Linux 中的 Syslog 是什么? 设置远程系统日志记录的分步指南

在本教程中,我们将了解 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 
列表/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 
rsylog 配置

从截图中可以看出,它使用 imjournal 模块从日志中读取消息。 滚动文件,可以看到日志位置的规则:

Rsylog 配置2rsylog 配置

笔记: 对于某些发行版,位置规则在 /etc/rsyslog.d/50-default.conf

某些行开头的“kern”、“info”等是 Syslog 标准定义的“设施代码”。 有关设施代码和 Syslog 标准其他部分的更多信息,请参见此 Wikipedia 页面。

除了本地日志记录外,Syslog 还支持通过网络进行远程日志记录。 它遵循用于远程日志记录的服务器/客户端架构。 接下来我们将看看如何配置这个服务器/客户端架构,以便可以远程记录消息。

远程系统日志的服务器配置

我们将配置一个 CentOS 8 机器作为远程服务器,通过 TCP 从主机接收 Syslog 消息。 你需要 超级用户权限 每一步。 因此,要么更改为 root 用户,要么更改为前缀 sudo 在每个命令之前。

1.检查rsyslog是否安装

rsyslog 是 Syslog 守护进程,它将侦听来自主机的日志。 要检查它是否已安装,请键入:

$ rsyslogd -v 

如果安装了它会打印一些信息

检查 Rsyslog 1检查 Rsyslog 1

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

$ sudo dnf install rsyslog 
安装 Rsyslog安装 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 ... 
编辑配置 2编辑配置

3.配置防火墙打开rsyslog使用的端口

默认情况下 rsyslog 侦听端口 514。我们需要使用 firewall-cmd 命令打开此端口:

$ sudo firewall-cmd  --add-port=514/tcp  --zone=public  --permanent $ sudo firewall-cmd --reload 
打开 TCP 端口 514打开 TCP 端口 514

4.重启rsyslog

现在我们已经更改了配置文件并打开了端口,我们需要重新启动 rsyslog 以便它可以选择新配置。 我们可以重新开始 rsyslog 使用 systemctl 命令:

$ sudo systemctl restart rsyslog 

如果您希望 rsylog 在每次启动时自动启动,请键入:

$ sudo systemctl enable rsyslog 

5.检查rsyslog是否正在监听打开的端口

我们可以使用 netstat 命令列出所有打开的端口:

$ sudo netstat -pnlt 
使用 Netstat 检查开放端口使用 Netstat 检查开放端口

正如上面屏幕截图中突出显示的那样, rsyslog 正在侦听端口 514。

查看远程系统日志的客户端配置

每个客户端都必须单独配置。 要配置客户端:

1.检查rsyslog是否安装

在客户端系统上也是 rsyslog 需要安装。 如果尚未安装,您可以使用与服务器相同的步骤进行安装。

2.编辑rsyslog的配置文件

只需要为客户端添加 1 行 /etc/rsyslog.conf 文件。 使用您选择的编辑器打开它:

$ sudo nano /etc/rsyslog.conf 

并添加以下行:

... *.* @@<server's-ip-address>:514 ... 
客户端配置1客户端配置

*.* 告诉 rsyslog 转发所有日志。 这 @@ 表示 TCP 连接,514 是端口号。 您可能需要配置防火墙以打开端口号。 如果客户端设置了防火墙,则客户端系统上的 514 也是如此。 在这种情况下,请按照与服务器相同的步骤进行操作。

3.重启rsyslog

我们需要重新开始 rsyslog 在客户端系统上以及使用 systemctl 命令:

$ sudo systemctl restart rsyslog $ sudo systemctl enable rsyslog 

测试日志操作

在您的客户端系统上, 类型:

$ logger "I just logged a message" 
记录器记录器

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

服务器目录 1服务器目录

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

$ sudo tail -f /var/log/earth66/syslog.log 
远程记录远程记录

结论

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