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

用于记录的Rsyslog模块

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

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

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏