Rsyslog是Ubuntu系统上一个强大且灵活的系统日志守护进程,用于收集、过滤、存储和转发由操作系统及应用程序生成的日志消息。它是传统syslog服务的增强版本,提供了额外功能,如高性能日志记录、高级过滤能力以及对多种日志协议的支持,包括TCP、UDP和RELP(可靠事件日志协议)。Rsyslog可以处理来自各种来源的日志消息,并将它们定向到不同的目标位置,如文件、数据库或远程服务器。它广泛应用于集中式日志系统中,用于监控、故障排除和审计目的。通过允许详细的配置,Rsyslog使Ubuntu管理员能够高效地管理系统日志,确保重要信息被安全地捕获和存储。

日志对于分析和排查Linux系统及应用程序相关问题非常有用。默认情况下,所有日志文件都位于基于Linux的操作系统中的/var/log目录内。有几种类型的日志文件,包括cron、kernel、users和security,其中大多数文件由Rsyslog服务控制。

在本教程中,我将解释如何在Ubuntu 24.04服务器上配置Rsyslog服务器。

前提条件

两台运行Ubuntu 24.04的服务器。

Rsyslog服务器机器上配置了静态IP地址192.168.0.101,Rsyslog客户端机器上配置了192.168.0.102。

两台服务器上都配置了root密码。

安装Rsyslog

你可以通过运行以下命令来安装Rsyslog:

apt install rsyslog -y

安装Rsyslog后,你可以使用以下命令检查Rsyslog的版本:

rsyslogd -v

你还可以使用以下命令检查Rsyslog的状态:

systemctl status rsyslog

你应该看到类似以下的输出:

? rsyslog.service - System Logging Service
   Loaded: loaded (/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2024-08-22 04:28:55 UTC; 1min 31s ago
     Docs: man:rsyslogd(8)
           http://www.rsyslog.com/doc/
 Main PID: 724 (rsyslogd)
    Tasks: 4 (limit: 1114)
   CGroup: /system.slice/rsyslog.service
           ??724 /usr/sbin/rsyslogd -n

Aug 22 04:28:53 ubuntu2404 systemd[1]: Starting System Logging Service...
Aug 22 04:28:54 ubuntu2404 rsyslogd[724]: imuxsock: Acquired UNIX socket \'/run/systemd/journal/syslog\' (fd 3) from systemd.  [v8.32.0]
Aug 22 04:28:54 ubuntu2404 rsyslogd[724]: rsyslogd\'s groupid changed to 106
Aug 22 04:28:54 ubuntu2404 rsyslogd[724]: rsyslogd\'s userid changed to 102
Aug 22 04:28:54 ubuntu2404 rsyslogd[724]:  [origin software="rsyslogd" swVersion="8.32.0" x-pid="724" x-info="http://www.rsyslog.com"] start
Aug 22 04:28:55 ubuntu2404 systemd[1]: Started System Logging Service.

Rsyslog现已安装并运行。接下来,你必须配置它以服务器模式运行。你可以编辑文件/etc/rsyslog.conf。

首先,你需要定义协议,可以是UDP、TCP或两者兼有。

要同时使用UDP和TCP连接,搜索并取消注释以下行:

nano /etc/rsyslog.conf

配置Rsyslog服务端

取消注释以下行以启用UDP和TCP模块:

$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514

接下来,定义特定的子网、IP或域名以限制访问,如下所示:

$AllowedSender TCP, 127.0.0.1, 192.168.0.0/24, *.example.com
$AllowedSender UDP, 127.0.0.1, 192.168.0.0/24, *.example.com

接下来,你必须创建一个模板来告诉Rsyslog服务器如何存储传入的syslog消息。在GLOBAL DIRECTIVES部分之前添加以下行:

$template remote-incoming-logs, "/var/log/%HOSTNAME%/%PROGRAMNAME%.log" 
*.* ?remote-incoming-logs

完成后保存并关闭文件。然后,使用以下命令检查Rsyslog配置是否存在语法错误:

rsyslogd -f /etc/rsyslog.conf -N1

你应该看到以下输出:

rsyslogd: version 8.32.0, config validation run (level 1), master config /etc/rsyslog.conf
rsyslogd: End of config validation run. Bye.

最后,使用以下命令重启Rsyslog服务:

systemctl restart rsyslog

现在,使用以下命令验证Rsyslog是否正在监听TCP/UDP端口:

netstat -4altunp | grep 514

你应该得到以下输出:

tcp        0      0 0.0.0.0:514             0.0.0.0:*               LISTEN      1332/rsyslogd       
udp        0      0 0.0.0.0:514             0.0.0.0:*                           1332/rsyslogd

Rsyslog服务器已安装并配置完毕,可以接收来自远程主机的日志。

配置Rsyslog客户端

现在,你必须配置Rsyslog客户端将syslog消息发送到远程Rsyslog服务器。

登录到客户端机器,打开Rsyslog配置文件,如下所示:

nano /etc/rsyslog.conf

在文件末尾添加以下行:

##Enable sending of logs over UDP add the following line:
*.* @192.168.0.101:514

##Enable sending of logs over TCP add the following line:
*.* @@192.168.0.101:514

##Set disk queue when rsyslog server will be down:
$ActionQueueFileName queue
$ActionQueueMaxDiskSpace 1g
$ActionQueueSaveOnShutdown on
$ActionQueueType LinkedList
$ActionResumeRetryCount -1

保存并关闭文件。然后,重启Rsyslog服务以应用配置更改:

systemctl restart rsyslog

此时,Rsyslog客户端已配置完毕,可以将日志发送到Rsyslog服务器。

查看客户端日志

登录到Rsyslog服务器并检查/var/log目录。你应该能看到客户端机器主机名的条目,包括多个日志文件:

ls /var/log/rsyslog-client/

输出:

CRON.log  kernel.log  rsyslogd-2039.log  rsyslogd.log  sudo.log  wpa_supplicant.log

总结

在本文中,我们学习了如何在Ubuntu 24.04服务器上安装和配置Rsyslog服务器,以及如何配置Rsyslog客户端将日志发送到Rsyslog服务器。如果你有任何问题,请随时提出。