日志文件对于探测和排除错误非常重要。系统管理员首先要仔细检查这些文件,以便缩小错误的可能原因,并提出解决方案。在具有数十或数百台服务器和其他设备的基础设施中,管理日志文件可能是一个挑战。这就是 Rsyslog 的用武之地。
Rsyslog是一种开源日志记录程序,它可以方便地将日志文件转发到IP网络中的集中日志服务器。通过集中式日志记录,管理员可以轻松地从一个中心点监视多个系统的日志文件。在这篇文章中,我们将引导您在Debian11上安装和配置 Rsyslog 服务器。
实验设备
为了演示如何使用 Rsyslog 将日志文件从客户机系统发送到 Rsyslog 服务器,我们将进行一个简单的实验准备,如下所示:
- Rsyslog server: Debian 11 IP: 192.168.1.151
- Rsyslog client: Ubuntu 20.04 IP: 10.20.0.170
(1) 服务端配置
如前所述,Rsyslog 工作在客户机 -> 服务器模型中,在 Debian 11 上,Rsyslog 是默认安装的。如果由于某种原因 Rsyslog 不存在,您可以使用该命令安装它
$ sudo apt install -y rsyslog
安装完成后,您可以如下所示检查其运行状态
$ sudo systemctl status rsyslog
接下来,我们将配置 rsyslog 以在服务器模式下运行,编辑配置文件 /etc/rsyslog.conf
$ sudo vi /etc/rsyslog.conf
取消注释下面允许从远程客户端接收 UDP 和 TCP syslog 日志的行
# provides UDP syslog reception
module(load="imudp")
input(type="imudp" port="514")
# provides TCP syslog reception
module(load="imtcp")
input(type="imtcp" port="514")
粘贴以下行定义日志模板,Rsyslog 守护进程将使用此模板存储来自客户机传入的日志。
$template remote-incoming-logs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log"
*.* ?remote-incoming-logs
日志文件将使用以下命名约定:
- /%HOSTNAME%/ – 客户机系统的主机名
- /%PROGRAMNAME%/ – 创建日志文件的客户端程序
重新启动 rsyslog 守护进程
$ sudo systemctl restart rsyslog
缺省情况下,rsyslog 监听 514 端口。您可以通过执行 ss 命令确认
$ sudo ss -tunlp | grep 514
(2) 配置防火墙规则
如果您正在运行 UFW 防火墙,请确保允许端口 514,以便允许传入的传入日志消息。
$ sudo ufw allow 514/tcp
$ sudo ufw allow 514/udp
然后重新加载防火墙
$ sudo ufw reload
(3) 配置客户端
最后一步是配置客户端系统将日志文件发送到 rsyslog 服务器。再次登录到客户机,确保 rsyslog 守护进程已安装并运行。
接下来,编辑 rsyslog 配置文件
$ sudo vi /etc/rsyslog.conf
转到文件的最后并添加如下这些行
#Enable sending system logs over UDP to rsyslog server
*.* @rsyslog-ip-address:514
#Enable sending system logs over TCP to rsyslog server
*.* @@rsyslog-ip-address:514
这些行指示客户端通过 UDP 和 TCP 协议将日志文件发送到 rsyslog 服务器。
注意: 第一行有一个 @ 符号表示 UDP,第二行有两个 @@ 符号表示 TCP 协议。
Should the remote server experience any downtime and you want to
preserve your logs, you can set the disk queue buffer by appending the
lines shown.
如果远程服务器出现任何停机,并且希望保存日志,则需要设置磁盘队列缓冲区,如下所示
Set disk queue when rsyslog server will be down:
$ActionQueueFileName queue
$ActionQueueMaxDiskSpace 1g
$ActionQueueSaveOnShutdown on
$ActionQueueType LinkedList
$ActionResumeRetryCount -1
下面是对客户端配置的所有修改的摘要
保存并退出文件。现在重新启动 rsyslog 服务,使更改生效。
$ sudo systemctl restart rsyslog
(4) 查看客户端日志文件
All the log files (including the servers) are stored in the /var/log/ directory. To view the client’s logs, run the following command:
所有日志文件 (包括服务器) 都存储在 /var/log/ 目录中,运行命令查看客户端的日志
$ ls /var/log/
客户端日志文件将保存在与客户端系统主机名对应的目录中,如下所示:
您可以进一步查看主日志目录中包含的日志文件
$ sudo ls -l /var/log/ubuntu-20-04/
当需要实时查看日志信息时,使用如下命令 tail。例如:我们正在查看 sudo 用户的日志。
$ sudo tail -f /var/log/ubuntu-20-04/sudo.log
末尾总结
我们已经成功地安装了 rsyslog 并将其配置为允许从客户端系统向 rsyslog 服务器发送日志文件。现在,您可以根据需要配置尽可能多的客户端系统,将日志发送到 rsyslog 服务器,以实现集中的日志管理结构。