网站搜索

如何在 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使用imjournalimusock模块从systemd日志导入结构化日志消息并接受syslog分别通过 Unix 套接字来自本地系统上运行的应用程序的消息。

要将 rsyslog 配置为网络/中央日志服务器,您需要设置它将用于远程系统日志接收的协议(UDPTCP 或两者)它监听的端口。

如果您想使用更快但不可靠的 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 手册页以获得更多帮助。请随时向我们提供任何反馈或提出问题。