Debian rsyslog日志远程集中收集
当服务器数量增多后,逐台登录查看日志既费时又容易遗漏。
rsyslog 是 Linux 系统自带的日志服务,通过简单配置就能把多台 Debian 服务器的系统日志实时发送到一台中央服务器保存,方便统一检索、备份和告警分析。
本文以 Debian 11/12 为例,带你从零完成 rsyslog 服务端和客户端配置,并验证日志是否真正汇总成功。
集中收集前需要准备什么
动手之前,先确认三件事:
- 准备一台用于接收日志的服务器,建议配置独立磁盘或挂载数据盘,避免日志写满系统盘。
- 确保服务端和所有客户端之间网络连通,默认使用 UDP/TCP 514 端口,请提前在防火墙放行。
- 所有机器使用 Debian 系统,并拥有 root 或 sudo 权限。
如果用的是云服务器,还要在安全组规则中放行对应协议和端口。
配置日志接收端(服务端)
服务端负责接收并存储所有客户端的日志。
可以先修改 rsyslog 配置,开启远程接收功能。
编辑 /etc/rsyslog.conf,找到下方被注释的模块加载行并取消注释:
sudo nano /etc/rsyslog.conf
# 允许通过 UDP 接收日志
module(load="imudp")
input(type="imudp" port="514")
# 允许通过 TCP 接收日志(更可靠)
module(load="imtcp")
input(type="imtcp" port="514")
接着在文件末尾新增一条规则,按客户端主机名存放日志:
$template RemoteLogs,"/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log"
*.* ?RemoteLogs
这条模板会把不同服务器的日志分别保存到 /var/log/remote/ 下以主机名命名的目录中,避免混杂在一起。
重启 rsyslog 使配置生效:
sudo systemctl restart rsyslog
sudo systemctl status rsyslog
看到 active (running) 说明服务端已开始监听。
此时可以检查 514 端口是否在监听:
sudo ss -tulnp | grep 514
配置日志发送端(客户端)
客户端只需把本机日志转发到服务端,配置相对简单。
在需要汇总日志的每台 Debian 机器上,编辑 /etc/rsyslog.conf:
sudo nano /etc/rsyslog.conf
在文件末尾添加一行,将服务器 IP 替换为实际地址:
*.* @192.168.1.100:514
注意:这里使用了 @ 表示 UDP 协议;
如果想用 TCP,需要写两个 @@,例如:
*.* @@192.168.1.100:514
保存后重启 rsyslog:
sudo systemctl restart rsyslog
客户端机器不需要额外放行端口,只做发送请求,通常不会被拦截。
检查日志是否汇总成功
配置完成后,在服务端查看 /var/log/remote/ 目录:
sudo ls /var/log/remote/
如果看到以客户端主机名命名的目录,说明日志已经成功接收。
也可以直接查看某个客户端的日志文件内容:
sudo tail -f /var/log/remote/client-hostname/syslog.log
若没有文件生成,先检查网络连通性和防火墙设置。
在客户端执行以下命令,确认能访问服务端的 514 端口:
telnet 192.168.1.100 514
如果端口不通,请检查云安全组和本地 ufw 防火墙规则。
常见问题与避坑提醒
- 日志文件不增长:客户端的 rsyslog 服务未正常启动,或配置语法错误。执行
sudo rsyslogd -N1可测试配置是否正确。 - 端口被占用:如果 514 端口已被其他进程占用,服务端 rsyslog 启动会失败。可用
sudo lsof -i:514排查,必要时更换高端口如 5514,记得同步修改客户端配置。 - 磁盘空间爆炸:集中收集后日志量可能大增,建议在服务端配置 logrotate 进行日志轮转,避免磁盘被写满。
- 时区不一致:若客户端和服务端时区不同,日志时间会混乱。建议将所有服务器时间同步到同一时区,并配置 NTP 服务。
写在最后
通过以上步骤,你已经能在 Debian 环境下用 rsyslog 将多台服务器的日志集中收集到一台机器上。
日常维护中,查看日志时只需登录服务端,按主机名进入对应目录即可,无需再逐个登录服务器排查问题。
如果日志量较大,后续还可以结合 logrotate 或 ELK 等工具做进一步分析,但 rsyslog 这套基础方案已经足够应对多数中小规模服务器的日志管理需求。