如何在 Linux 中使用 Rsyslog 设置中央日志服务器
日志是任何软件或操作系统的重要组成部分。日志通常记录用户的操作、系统事件、网络活动等等,具体取决于它们的用途。Linux 系统上使用最广泛的日志系统之一是rsyslog。
Rsyslog是一个强大、安全、高性能的日志处理系统,它接受来自不同类型的源(系统/应用程序)的数据并将其输出为多种格式。
它已从常规syslog守护程序发展为功能齐全的企业级日志系统。它采用客户端/服务器模型设计,因此可以配置为客户端和/或其他服务器、网络设备和远程应用程序的中央日志服务器。
测试环境
为了本指南的目的,我们将使用以下主机:
- 服务器:192.168.241.140
- 客户端:172.31.21.58
如何安装和配置 Rsyslog 服务器
大多数 Linux 发行版都预装了rsyslog包。如果尚未安装,您可以使用 Linux 包管理器工具进行安装,如下所示。
$ sudo yum update && yum install rsyslog #CentOS 7 $ sudo apt update && apt install rsyslog #Ubuntu 16.04, 18.04
一旦安装了rsyslog,您需要立即启动该服务,使其在启动时自动启动并使用systemctl 命令检查其状态。
$ sudo systemctl start rsyslog $ sudo systemctl enable rsyslog $ sudo systemctl status rsyslog
主 rsyslog 配置文件位于/etc/rsyslog.conf,它加载模块,定义全局指令,包含处理日志消息的规则,还包括/etc/rsyslog.d/中针对各种应用程序/服务的所有配置文件。
$ sudo vim /etc/rsyslog.conf
默认情况下,rsyslog使用imjournal和imusock模块分别从systemd 日志导入结构化日志消息并通过 Unix 套接字接受来自本地系统上运行的应用程序的 syslog 消息。
要将 rsyslog 配置为网络/中央日志服务器,您需要设置用于远程系统日志接收的协议(UDP或TCP或两者)以及它监听的端口。
如果您想使用速度更快但不可靠的UDP连接,请搜索并取消注释以下行(将514替换为您希望它监听的端口,这应该与客户端发送消息的端口地址相匹配,我们将在配置 rsyslog 客户端时进一步查看这一点)。
$ModLoad imudp $UDPServerRun 514
要使用TCP连接(速度较慢但更可靠),请搜索并取消注释以下行。
$ModLoad imtcp $InputTCPServerRun 514
在这种情况下,我们希望同时使用 UDP 和 TCP 连接。
接下来,您需要按照以下格式定义处理远程日志的规则集。
facility.severity_level destination (where to store log)
在哪里:
- facility:是生成消息的进程/应用程序的类型,包括 auth、cron、daemon、kernel、local0..local7。使用
*
表示所有设施。 - danger_level:日志消息的类型:emerg-0、alert-1、crit-2、err-3、warn-4、notice-5、info-6、debug-7。使用
*
表示所有严重性级别,无表示没有严重性级别。 - 目标:是本地文件或远程 rsyslog 服务器(以 IP:port 的形式定义)。
我们将使用以下规则集从远程主机收集日志,使用RemoteLogs模板。请注意,这些规则必须位于处理本地消息的任何规则之前,如屏幕截图所示。
$template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" *.* ?RemoteLogs & ~
查看上述规则集,第一条规则是“$template RemoteLogs,”/var/log/%HOSTNAME%/%PROGRAMNAME%.log””。
指令$template告诉 rsyslog 守护进程根据生成消息的主机名(客户端计算机名称)和远程客户端设备(程序/应用程序)收集并将所有接收到的远程消息写入/var/log下的不同日志,如模板RemoteLogs中的设置所定义。
第二行“*.* ?RemoteLogs”表示使用RemoteLogs模板配置记录所有严重性级别的所有设施的消息。
最后一行“& ~”指示 rsyslog 在将消息写入文件后停止处理消息。如果不包含“& ~”,则消息将被写入本地文件。
您还可以使用许多其他模板,有关更多信息,请参阅 rsyslog 配置手册页(man rsyslog.conf)或参阅Rsyslog 在线文档。
这就是配置 rsyslog 服务器的过程。保存并关闭配置文件。要应用最近的更改,请使用以下命令重新启动 rsyslog 守护程序。
$ sudo systemctl restart rsyslog
现在验证 rsyslog 网络套接字。使用ss 命令(或使用相同标志的netstat 命令)并将输出传送到grep 以过滤掉 rsyslogd 连接。
$ sudo ss -tulnp | grep "rsyslog"
接下来,在CentOS 7上,如果您启用了SELinux,请运行以下命令以根据网络套接字类型允许 rsyslog 流量。
$ sudo semanage -a -t syslogd_port_t -p udp 514 $ sudo semanage -a -t syslogd_port_t -p tcp 514
如果系统启用了防火墙,则需要通过运行打开端口514以允许UDP/TCP连接到 rsyslog 服务器。
------------- On CentOS ------------- $ sudo firewall-cmd --permanent --add-port=514/udp $ sudo firewall-cmd --permanent --add-port=514/tcp $ sudo firewall-cmd --reload ------------- On Ubuntu ------------- $ sudo ufw allow 514/udp $ sudo ufw allow 514/tcp $ sudo ufw reload
如何配置 Rsyslog 客户端以将日志发送到 Rsyslog 服务器
现在在客户端系统上,使用以下命令检查 rsyslog 服务是否正在运行。
$ sudo systemctl status rsyslog
如果尚未安装,请安装并启动服务,如前所示。
$ sudo yum update && yum install rsyslog #CentOS 7 $ sudo apt update && apt install rsyslog #Ubuntu 16.04, 18.04 $ sudo systemctl start rsyslog $ sudo systemctl enable rsyslog $ sudo systemctl status rsyslog
一旦 rsyslog 服务启动并运行,打开主配置文件,您将在其中对默认配置执行更改。
$ sudo vim /etc/rsyslog.conf
要强制 rsyslog 守护程序充当日志客户端并将所有本地生成的日志消息转发到远程 rsyslog 服务器,请在文件末尾添加此转发规则,如下面的屏幕截图所示。
*. * @@192.168.100.10:514
上述规则将从所有设施和所有严重性级别发送消息。要从特定设施(例如auth )发送消息,请使用以下规则。
auth. * @@192.168.100.10:514
保存更改并关闭配置文件。要应用上述设置,请重新启动 rsyslog 守护程序。
$ sudo systemctl restart rsyslog
如何监控 Rsyslog 服务器上的远程日志
最后一步是验证 rsyslog 是否确实在/var/log下以hostname/programname.log格式接收并记录来自客户端的消息。
运行 ls 命令来列出父日志目录的长列表,并检查是否有一个名为ip-172.31.21.58(或您的客户端机器的主机名)的目录。
$ ls -l /var/log/
如果目录存在,请通过运行检查其中的日志文件。
$ sudo ls -l /var/log/ip-172-31-21-58/
概括
Rsyslog是一款高性能日志处理系统,采用客户端/服务器架构设计。我们希望您能够按照本指南中的说明安装和配置Rsyslog作为中央/网络日志服务器和客户端。
您可能还想参考相关的 rsyslog 手册页以获得更多帮助。欢迎向我们提供任何反馈或提出问题。