怎样使用 rsyslog 在 Linux 上设置远程日志记录

日志记录是 Linux 服务器管理的一个关键方面。 日志消息对于根本原因分析和避免将来发生潜在错误很有用。 分析和调试服务器错误是 IT 工程师和系统管理员都必须具备的核心技能。

本指南将向您展示怎样在 Linux 上设置远程日志服务器,也称为日志主机。 日志主机允许您将本地 Linux 日志聚合到远程集中式服务器,以便于访问和分析。

为什么要有专用的日志服务器?

Linux 操作系统使用 syslog(系统日志记录协议)守护进程记录服务器上的大多数活动,以便进行审计和调试。 所以你可能想知道,为什么我需要一个专门的服务器来存储我的日志? 以下是拥有专用日志服务器的一些优点:

  • 更好的安全性,因为远程日志服务器只有几个对外开放的端口。
  • 提高了服务器性能,因为远程日志主机不运行许多服务,除了用于日志的服务。
  • 简化日志消息的归档和管理。

日志消息对于审核您的服务器和基线非常重要,并且是服务器基础架构预防性维护程序的核心部分。

第 1 步:在 Linux 上安装 rsyslog

本指南侧重于 Ubuntu 20.04,但如果您使用其他主流 Linux 发行版,该过程应该几乎相同。

rsyslog 是用于 Linux 的远程日志服务,默认情况下预装在大多数现代 Linux 发行版中,用于 exampleUbuntu 和其他基于 Debian 的系统。

rsyslog 服务是一种现代且经过改进的 syslog 守护程序,它只允许您在本地管理日志。 使用 rsyslog 守护程序,您可以将本地日志发送到某个已配置的远程 Linux 服务器。

如果您的 PC 上没有安装 rsyslog,您可以在基于 Debian 的发行版上使用以下命令轻松安装:

sudo apt install rsyslog

在 Red Hat Linux 上,您可以通过键入以下命令来安装它:

yum install rsyslog

在 Fedora 及其衍生物,运行:

dnf install rsyslog

在 Arch Linux 上安装 rsyslog:

yay -S rsyslog

要检查 rsyslog 的状态,请运行以下命令:

systemctl status rsyslog

输出:

步骤 2:配置日志主机服务器

日志主机是配置为从其他服务器或 PC 接收日志消息的服务器。 rsyslog 配置位于 /etc/rsyslog.conf 文件。

你可以打开 /etc/rsyslog.conf 文件使用您选择的任何文本编辑器。 在本指南中,我们将使用 Vim。

您需要提升权限才能更改配置文件。

在开始编辑配置文件之前,您应该备份或复制该文件。 为此,请运行以下命令:

sudo cp /etc/rsyslog.conf /etc/rsyslog_original.config

接下来,打开 /etc/rsyslog.conf 文件使用文本编辑器。

sudo vim /etc/rsyslog.conf 

您可以使用两种协议通过 rsyslog 发送/接收日志文件:TCP 和 UDP。 本指南向您展示怎样配置两者。

您不需要同时配置 UDP 和 TCP 来进行远程日志记录。 只能选择两者之一。

如果您更喜欢使用 UDP,请通过删除前导查找并取消注释以下行 (#) 行前的符号。 您可以在配置文件的模块部分下找到这些行。

module(load="imudp")
input(type="imudp" port="514")

如果您更喜欢使用 TCP,请通过删除前导来取消注释以下行 (#) 符号位于行首:

module(load="imtcp")
input(type="imtcp" port="514")

下图显示了配置为使用 UDP 通信的 rsyslog 配置文件:

接下来,配置 rsyslog 存储日志的位置。 为了更好地组织,您应该按其来源对传入日志进行分类。 通过添加以下行在 rsyslog 配置文件中定义模板:

$template remote-incoming-logs, "/var/log/remote/%HOSTNAME%".log
*.* ?remote-incoming-logs

上述行命令 rsyslog 将日志存储在文件夹中 /var/log/remote/主机名, 在哪里 主机名 是向日志主机发送日志消息的远程客户端的名称。

现在,保存您所做的更改。 如果你使用 Vim,这里是怎样保存和退出文件。

最后,重新启动 rsyslog 服务以使您所做的更改生效。

sudo systemctl restart rsyslog

第 3 步:配置防火墙

如果您的防火墙已启用,请确保您在上面配置的端口能够与外界通信。 您需要编辑防火墙规则以允许传入日志。

对于基于 Debian 的发行版,只需使用 UFW 工具来启用 UDP 或 TCP 传输协议。

如果您使用的是 UDP,请运行以下命令,其中 514 是配置的端口号:

sudo ufw 514/udp

如果您在端口 514 上使用 TCP,只需运行:

sudo ufw 514/tcp

在 Fedora, 您可以使用 防火墙-cmd 以达到类似的结果。

firewall-cmd --zone=zone --add-port=514/udp

对于 Red Hat Linux,打开 iptables 文件位于 /etc/sysconfig/iptables 使用您选择的文本编辑器,并添加以下规则:

-A INPUT -m state --state NEW -m udp -p udp --dport 514 -j ACCEPT

重新启动 iptables 服务以使更改生效。

service iptables restart

第 4 步:配置日志记录客户端

客户端是将其日志发送到远程或集中式日志主机服务器的机器。 打开位于的 rsyslog 配置文件 /etc/rsyslog.conf

sudo vim /etc/rsyslog.conf

如果您使用的是 UDP,请添加以下行,其中 192.168.12.123 是远程服务器的 IP 地址,您将把日志写入:

*.* @192.168.12.123:514

如果您使用的是 TCP,请改为添加以下行。 请注意,该行有两个 @ 符号。

*.* @@192.168.12.123:514

Save 您的更改并使用以下命令在客户端上重新启动 rsyslog 服务:

sudo systemctl restart rsyslog

步骤 5:查看服务器上的日志消息

您可以使用 SSH 登录到远程服务器并查看从客户端服务器发送的日志。 在这种情况下,配置 rsyslog 以便它将客户端日志存储在 /var/log/远程 远程服务器的目录。

cd /var/logs/remote

然后使用 ls 命令列出目录的内容:

ls -l

正如您在输出中看到的,该目录包含名为的远程服务器的日志消息 安迪瓦鲁库鲁. 他们的日志文件被命名为 安迪瓦日志rukuru.log 分别。

然后,您可以使用文本编辑器或 Linux 文件查看工具(例如 cat 或 less)查看日志文件。

远程记录为您提供更多控制

本指南介绍了怎样在 Linux 上设置远程日志服务器(日志主机)。

日志主机在日志记录方面为您提供更好的组织和控制。 即使在系统损坏或无法访问的情况下,您仍然可以从日志主机查看其日志并找出问题所在。