如何在 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日志导入结构化日志消息并接受syslog分别通过 Unix 套接字来自本地系统上运行的应用程序的消息。
要将 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。使用
*
表示所有设施。 - severity_level:是日志消息的类型:emerg-0、alert-1、crit-2、err-3、warn-4、notice-5、info-6、debug-7。使用
*
表示所有严重性级别,none 表示没有严重性级别。 - 目标:是本地文件或远程 rsyslog 服务器(以 IP:端口的形式定义)。
我们将使用以下规则集通过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 手册页以获得更多帮助。请随时向我们提供任何反馈或提出问题。