如何在 CentOS 上配置 rsyslog 客户端进行远程日志记录
rsyslog
是一个开源实用程序,广泛用于 Linux 系统,通过 TCP/UDP 协议转发或接收日志消息。 rsyslog
守护进程可以在两种情况下进行配置。 rsyslog 守护进程配置为日志收集服务器,可以从网络中的所有其他主机收集日志数据,这些主机配置为将其内部日志发送到服务器。在另一个角色中,rsyslog 守护进程可以配置为客户端,过滤内部日志消息并将其发送到本地文件夹(例如 /var/log)或基于路由设施的远程 rsyslog 服务器。
假设您已经在网络上启动并运行了 rsyslog 服务器,本指南将向您展示如何设置 CentOS 系统以将其内部日志消息路由到远程 rsyslog 服务器。这将极大地提高系统的磁盘使用率,特别是如果您没有专用于 /var 目录的单独大分区。
第一步:在 CentOS 上安装 rsyslog
在 CentOS 6 和 7 上,预安装了 rsyslog 守护进程。要验证 CentOS 系统上是否安装了 rsyslog,请发出以下命令:
# rpm -qa | grep rsyslog
# rsyslogd -v

如果由于某种原因您的系统上缺少 rsyslog
守护进程,请发出以下命令来安装它:
# yum install rsyslog
第二步:将 rsyslog
配置为 Syslog 客户端
为此,请使用您喜欢的文本编辑器打开位于 /etc
路径中的主 rsyslog
配置文件:
# nano /etc/rsyslog.conf
打开文件进行编辑后,您需要在文件底部添加以下语句。将 IP 地址替换为远程 rsyslog
服务器的 IP 地址。
*.* @192.168.1.25:514
上述语句告诉 rsyslog 守护进程将系统上每个设施的每条日志消息路由到 UDP 端口 514
上的远程 rsyslog
服务器 (192.168.1.25
)。
如果由于某些原因您需要更可靠的协议(例如 TCP),并且将 rsyslog
服务器配置为侦听 TCP 连接,则必须在远程主机的 IP 地址前面添加一个额外的 @ 字符,如下摘录所示:
*.* @@192.168.1.25:514
请注意,您还可以将 rsyslog
服务器的 IP 地址替换为其 DNS 名称 (FQDN)。
如果您只想转发来自特定设施(例如内核
设施)的日志消息,那么您可以在rsyslog
配置文件中使用以下语句。
kern.* @192.168.1.25:514
修改配置后,您需要重新启动守护进程以激活更改:
在 CentOS 7 或更高版本上:
# systemctl restart rsyslog.service
在 CentOS 6 或更早版本上:
# service rsyslog restart
在另一种情况下,假设您在计算机上安装了名为 foobar
的应用程序,该应用程序会将日志生成到 /var/log/foobar.log
文件中。现在您只想将其日志定向到远程 rsyslog 服务器。这可以通过在 rsyslog
配置中加载 imfile
模块来实现,如下所示。
首先加载 imfile
模块。此操作必须只执行一次。
module(load="imfile" PollingInterval="5")
然后指定 imfile
模块应监控的日志文件的路径:
input(type="imfile"
File="/var/log/foobar.log"
Tag="foobar"
Severity="error"
Facility="local7")
最后,将 local7
工具定向到远程 rsyslog
服务器:
local7.* @192.168.1.25:514
不要忘记重新启动 rsyslog
守护进程。
第三步:启用rsyslog
自动启动
要在每次系统重新引导后自动启动 rsyslog 客户端,请运行以下命令以在系统范围内启用它:
在 CentOS 7 或更高版本上:
# systemctl enable rsyslog.service
在 CentOS 6 或更早版本上:
# chkconfig rsyslog on
概括
在本教程中,我演示了如何将 CentOS 系统转变为 rsyslog 客户端,以强制其将日志消息发送到远程 rsyslog 服务器。这里我假设 rsyslog 客户端和 rsyslog 服务器之间的连接是安全的(例如,在受防火墙保护的公司网络内)。在任何情况下,都不要将 rsyslog 客户端配置为通过不安全的网络转发日志消息,尤其是通过 Internet,因为 syslog 协议是明文协议。为了安全传输,请考虑使用 TLS/SSL 加密系统日志消息。