在本教程中,我们将了解 Linux 中的 Syslog 以及如何使用它向远程机器发送日志。 Syslog 是消息记录的标准。 很长一段时间以来,它一直是 Linux/Unix 系统上的标准日志记录机制。 虽然现在大多数发行版都附带 journald
– 一个 systemd
基于记录器 – Syslog 仍然存在,通常与 journald
.
什么是系统日志?
Syslog是一个模糊的概念,一般指以下3个东西:
- 系统日志守护进程:它是一个监听日志并将它们写入特定位置的守护进程。 位置在守护程序的配置文件中定义。
rsyslog
是大多数发行版附带的 Syslog 守护程序。 - 系统日志消息格式: 它指的是 Syslog 消息的语法。 语法通常由标准定义(例如 RFC5424)。
- 系统日志协议: 是指用于远程日志记录的协议。 除了 UDP 之外,现代 Syslog 守护进程还可以使用 TCP 和 TLS,UDP 是用于远程日志记录的旧协议。
Syslog 的优势 journald
是将日志写入可以使用 cat、grep、tail 等基本文本操作命令读取的文件中。
journald
日志以二进制形式编写,您需要使用 journalctl
命令查看它们。
查看本地系统日志
日志是有关系统中发生的事情的重要信息来源。 它们也是人们应该寻找任何类型的故障排除的第一个地方。
日志一般写在 /var/log
目录。 此目录的结构取决于您的发行版。
笔记: 此方法仅适用于由 Syslog 守护程序写入的日志,不适用于由 Syslog 守护程序写入的日志 journald
.
1. 使用 ls 命令显示系统日志
列出内容 /var/log
对于使用 ls 命令的 Ubuntu 20.04 机器:
$ sudo ls /var/log
2、Linux下使用tail命令查看系统日志
使用tail命令可以查看最近几条日志。 添加 -f 选项可让您实时观看它们。
对于基于 RedHat 的系统:
$ sudo tail -f /var/log/messages
对于基于 Ubuntu/Debian 的系统:
$ sudo tail -f /var/log/syslog
同样, tail
命令可用于查看内核日志(kern.log
), 启动日志 (boot.log
), 等等 。
日志去向的规则在 Syslog 守护进程的配置文件中定义。 为了 rsyslog
, 它是 /etc/rsyslog.conf
3. 在 Linux 中使用文本编辑器查看和编辑系统日志
我们来看看 rsyslog
使用 nano 编辑器的配置文件:
$ sudo nano /etc/rsyslog.conf
从截图中可以看出,它使用 imjournal
模块从日志中读取消息。 滚动文件,可以看到日志位置的规则:

笔记: 对于某些发行版,位置规则在 /etc/rsyslog.d/50-default.conf
某些行开头的“kern”、“info”等是 Syslog 标准定义的“设施代码”。 有关设施代码和 Syslog 标准其他部分的更多信息,请参见此 Wikipedia 页面。
除了本地日志记录外,Syslog 还支持通过网络进行远程日志记录。 它遵循用于远程日志记录的服务器/客户端架构。 接下来我们将看看如何配置这个服务器/客户端架构,以便可以远程记录消息。
远程系统日志的服务器配置
我们将配置一个 CentOS 8 机器作为远程服务器,通过 TCP 从主机接收 Syslog 消息。 你需要 超级用户权限 每一步。 因此,要么更改为 root 用户,要么更改为前缀 sudo 在每个命令之前。
1.检查rsyslog是否安装
rsyslog
是 Syslog 守护进程,它将侦听来自主机的日志。 要检查它是否已安装,请键入:
$ rsyslogd -v
如果安装了它会打印一些信息

如果尚未安装,您可以使用 dnf
命令:
$ sudo dnf install rsyslog

2.编辑rsyslog的配置文件
我们需要修改的文件是 /etc/rsyslog.conf
. 您可以使用您选择的编辑器。 我将使用 nano 编辑器。
$ sudo nano /etc/rsyslog.conf
您还可以通过使用什么为单独的客户端系统创建单独的目录来对日志进行分组 rsyslog
称为“模板”。 这些模板是指令 rsyslog
.
要按系统启用日志分组,请添加第 7 行和第 8 行。要启用 TCP,请删除第 4 行和第 5 行的注释,删除该行开头的“#”字符。
... # Provides TCP syslog reception # for parameters see https://www.rsyslog.com/doc/imtcp.html module(load="imtcp") # needs to be done just once input(type="imtcp" port="514") $template FILENAME,"/var/log/%HOSTNAME%/syslog.log" *.* ?FILENAME ...

3.配置防火墙打开rsyslog使用的端口
默认情况下 rsyslog
侦听端口 514。我们需要使用 firewall-cmd 命令打开此端口:
$ sudo firewall-cmd --add-port=514/tcp --zone=public --permanent $ sudo firewall-cmd --reload

4.重启rsyslog
现在我们已经更改了配置文件并打开了端口,我们需要重新启动 rsyslog
以便它可以选择新配置。 我们可以重新开始 rsyslog
使用 systemctl
命令:
$ sudo systemctl restart rsyslog
如果您希望 rsylog 在每次启动时自动启动,请键入:
$ sudo systemctl enable rsyslog
5.检查rsyslog是否正在监听打开的端口
我们可以使用 netstat 命令列出所有打开的端口:
$ sudo netstat -pnlt

正如上面屏幕截图中突出显示的那样, rsyslog
正在侦听端口 514。
查看远程系统日志的客户端配置
每个客户端都必须单独配置。 要配置客户端:
1.检查rsyslog是否安装
在客户端系统上也是 rsyslog
需要安装。 如果尚未安装,您可以使用与服务器相同的步骤进行安装。
2.编辑rsyslog的配置文件
只需要为客户端添加 1 行 /etc/rsyslog.conf
文件。 使用您选择的编辑器打开它:
$ sudo nano /etc/rsyslog.conf
并添加以下行:
... *.* @@<server's-ip-address>:514 ...

*.*
告诉 rsyslog
转发所有日志。 这 @@
表示 TCP 连接,514 是端口号。 您可能需要配置防火墙以打开端口号。 如果客户端设置了防火墙,则客户端系统上的 514 也是如此。 在这种情况下,请按照与服务器相同的步骤进行操作。
3.重启rsyslog
我们需要重新开始 rsyslog
在客户端系统上以及使用 systemctl
命令:
$ sudo systemctl restart rsyslog $ sudo systemctl enable rsyslog
测试日志操作
在您的客户端系统上, 类型:
$ logger "I just logged a message"

在服务器系统上,您会发现为每个客户端创建了一个单独的目录(以及为服务器系统本身创建的 1 个目录)。

查看内容 /var/log/earth66
/syslog.log
使用tail命令 服务器系统:
$ sudo tail -f /var/log/earth66/syslog.log

结论
在本教程中,我们了解了 Syslog 并使用 rsyslog
. 检查日志是故障排除的第一个也是最重要的部分之一。 了解如何查看和理解日志有助于节省时间和精力。 要了解更多关于 rsyslog
和它的配置,看看它的手册页和文档。