在 CentOS/RHEL 8 中使用 Rsyslog 设置集中式日志服务器
为了让系统管理员识别或分析CentOS 8或RHEL 8/var/log
服务器上的问题,重要的是从系统目录中的日志文件中了解和查看特定时间段内服务器上发生的事件。
服务器上的Syslog (系统日志协议)系统可以充当网络上的中央日志监控点,所有创建日志的服务器、网络设备、交换机、路由器和内部服务(无论是链接到特定的内部问题还是仅仅是信息性消息)都可以发送其日志。
在CentOS/RHEL 8服务器上,Rsyslog守护程序是默认预安装的最重要的日志服务器,其次是Systemd 日志守护程序(journald)。
Rsyslog是一款开源实用程序,作为客户端/服务器架构服务开发,可以独立实现两种角色。它可以作为服务器运行并收集网络上其他设备传输的所有日志,也可以作为客户端运行,将所有内部系统事件记录到远程Syslog服务器。
要求
为了在CentOS/RHEL 8服务器上设置集中式日志服务器,您需要检查并确认/var
分区是否有足够的空间(至少几 GB)来存储网络上其他设备发送的所有记录日志文件。我建议您使用单独的驱动器(LVM或RAID)来挂载/var/log/
目录。
如何在 CentOS/RHEL 8 中配置 Rsyslog 服务器
1.正如我所说,Rsyslog服务已在CentOS/RHEL 8服务器中安装并自动运行。为了验证守护进程是否在系统中运行,请运行以下命令。
# systemctl status rsyslog.service
如果该服务未默认运行,请运行以下命令启动rsyslog守护程序。
# systemctl start rsyslog.service
2.如果您计划用作集中日志服务器的系统上未默认安装Rsyslog实用程序,请运行以下dnf 命令来安装 rsyslog 包并启动守护程序。
# dnf install rsyslog # systemctl start rsyslog.service
3.安装Rsyslog实用程序后,您现在可以通过打开主配置文件/etc/rsyslog.conf将 rsyslog 配置为集中式日志服务器,以便接收外部客户端的日志消息。
# vi /etc/rsyslog.conf
在/etc/rsyslog.conf配置文件中,找到并取消注释以下几行,以通过514端口向Rsyslog服务器授予 UDP 传输接收权限。Rsyslog使用标准UDP协议进行日志传输。
module(load="imudp") # needs to be done just once input(type="imudp" port="514")
4、 UDP协议没有TCP的开销,数据传输速度比TCP协议快,但UDP协议不保证传输数据的可靠性。
但是,如果您想使用TCP协议接收日志,则必须在配置文件/etc/rsyslog.conf中找到并取消注释以下行,以便配置 Rsyslog 守护程序以绑定和监听514端口上的 TCP 套接字。
module(load="imtcp") # needs to be done just once input(type="imtcp" port="514")
5.现在创建一个用于接收远程消息的新模板,因为该模板将指导本地 Rsyslog 服务器,在那里保存由 Syslog 网络客户端发送的接收消息。
$template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" *.* ?RemoteLogs
该$template RemoteLogs
指令指导 Rsyslog 守护程序根据客户端名称和根据模板配置中添加的概述属性创建消息的远程客户端应用程序收集所有传输的日志消息并将其写入不同的文件:%HOSTNAME% and %PROGRAMNAME%
。
所有接收到的日志文件都将写入本地文件系统中以客户端机器的主机名命名的分配文件,并保存在/var/log/目录中。
重定向规则& ~
指示本地 Rsyslog 服务器停止进一步处理收到的日志消息并删除该消息(而不是将其写入内部日志文件)。
这RemoteLogs
是为该模板指令指定的任意名称。您可以使用任何最适合您的模板的名称。
要配置更复杂的 Rsyslog 模板,请通过运行man rsyslog.conf命令阅读 Rsyslog 配置文件手册或查阅Rsyslog 在线文档。
# man rsyslog.conf
6.完成上述配置更改后,您可以通过运行以下命令重新启动 Rsyslog 守护程序以应用最近的更改。
# service rsyslog restart
7.重新启动Rsyslog服务器后,它现在应充当集中式日志服务器并记录来自 Syslog 客户端的消息。要确认 Rsyslog 网络套接字,请运行netstat 命令并使用grep 实用程序过滤 rsyslog 字符串。
# netstat -tulpn | grep rsyslog
如果CentOS 8上未安装netstat 命令,则可以使用以下命令安装它。
# dnf whatprovides netstat # dnf install net-tools
8.如果您在CentOS/RHEL 8中激活了SELinux,请运行以下命令以根据网络套接字类型允许 rsyslog 流量。
# semanage port -a -t syslogd_port_t -p udp 514 # semanage port -a -t syslogd_port_t -p tcp 514
如果CentOS 8上未安装semanage 命令,则可以使用以下命令进行安装。
# dnf whatprovides semanage # dnf install policycoreutils-python-utils
9.如果系统上有活动的防火墙,请运行以下命令以便在 Firewalld 中添加允许端口上的 rsyslog 流量所需的规则。
# firewall-cmd --permanent --add-port=514/tcp # firewall-cmd --permanent --add-port=514/udp # firewall-cmd --reload
您还可以限制来自白名单 IP 范围的端口514上的传入连接,如下所示。
# firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="123.123.123.0/21" port port="514" protocol="tcp" accept' # firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="123.123.123.0/21" port port="514" protocol="udp" accept' # firewall-cmd --reload
就这样!Rsyslog现在配置为集中式日志服务器,可以从远程客户端收集日志。在下一篇文章中,我们将了解如何在CentOS/RHEL 8服务器上配置 Rsyslog 客户端。