日志是任何软件或操作系统的关键组件。 日志通常记录用户的操作,系统事件,网络活动等等,具体取决于用途。 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套接字接受来自本地系统上运行的应用程序的系统日志消息。
用于记录的Rsyslog模块
要将rsyslog配置为网络/中央日志记录服务器,您需要设置它将用于远程syslog接收的协议( UDP或TCP或两者)以及它监听的端口。
如果你想使用速度更快但不可靠的UDP连接,请搜索并取消注释下面的行(用你希望它监听的端口替换514 ,这应该与客户端发送消息的端口地址相匹配,我们将会看到在配置rsyslog客户端时更多。
$ModLoad imudp $UDPServerRun 514
要使用TCP连接(速度较慢但更可靠),请搜索并取消注释以下行。
$ModLoad imtcp $InputTCPServerRun 514
在这种情况下,我们希望同时使用UDP和TCP连接。
配置Rsyslog日志服务器
接下来,您需要以下列格式定义用于处理远程日志的规则集 。
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。 使用
*
表示所有严重性级别,no表示没有严重性级别。 - destination :是本地文件或远程rsyslog服务器(以IP:port形式定义)。
我们将使用以下规则集来使用RemoteLogs模板从远程主机收集日志。 请注意,这些规则必须在处理本地消息的任何规则之前,如屏幕截图所示。
$template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" *.* ?RemoteLogs & ~
为Rsyslog-Logging定义规则集
查看上面的规则集 ,第一个规则是“$ 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"
检查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以允许通过运行同时与rsyslog服务器建立UDP / TCP连接。
------------- 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
配置Rsyslog客户端
上述规则将从所有设施和所有严重级别发送消息。 要从特定设施发送消息(例如auth) ,请使用以下规则。
auth. * @@192.168.100.10:514
保存更改并关闭配置文件。 要应用上述设置,请重新启动rsyslog守护程序。
$ sudo systemctl restart rsyslog
如何在Rsyslog服务器上监视远程日志记录
最后一步是验证rsyslog是否实际从host / programname.log形式的/ var / log下的客户端接收和记录消息。
运行到父日志目录的长列表,并检查是否有一个名为ip-172.31.21.58的目录(或者客户机的主机名是什么)。
$ ls -l /var/log/
检查Rsyslog客户端日志记录
如果该目录存在,请通过运行检查其中的日志文件。
$ sudo ls -l /var/log/ip-172-31-21-58/
检查Rsyslog客户端日志
摘要
Rsyslog是一个高性能的日志处理系统,采用客户端/服务器架构设计。 我们希望您能够将Rsyslog安装和配置为中央/网络日志服务器以及本指南中演示的客户端。
您可能还需要参考相关的rsyslog手册页以获取更多帮助。 请随时向我们提供任何反馈或提出问题。