linux系统日志转发核心是配置rsyslog,分客户端添加转发规则(如. @@192.168.100.100:514)和服务端启用udp/tcp监听($modload imudp等)并按ip/日期分类存储($template remotehost),最后通过logger测试和netstat验证。

Linux 系统日志转发到指定日志服务器,核心是配置 rsyslog —— 它负责把本地日志按规则发出去。整个过程分两步:客户端(发日志的机器)加转发规则,服务端(接收日志的机器)开启监听并存日志。不依赖额外工具,系统自带就能完成。
客户端配置:添加转发规则
编辑 /etc/rsyslog.conf,在文件末尾追加一行,指定目标服务器地址和协议:
-
UDP 方式(默认、轻量、适合内网):
*.* @192.168.100.100:514 -
TCP 方式(可靠、防丢包,推荐生产环境):
*.* @@192.168.100.100:514 - 如果只想发特定日志,比如认证和内核相关:
auth.*;kern.* @@192.168.100.100:514
保存后执行 systemctl restart rsyslog 生效。注意确认客户端与服务器之间网络可达,且防火墙放行 UDP/TCP 514 端口。
服务端配置:启用接收并定义存储路径
在日志服务器上,先加载输入模块并启动监听:
- 编辑 /etc/rsyslog.conf,在
MODULES区块后加入:
$ModLoad imudp $UDPServerRun 514 $ModLoad imtcp $InputTCPServerRun 514
再定义日志存放位置,例如按 IP 和日期自动分类:
- 添加模板:
$template RemoteHost,"/var/log/remote/%FROMHOST-IP%/%$YEAR%-%$MONTH%-%$DAY%.log" - 应用模板:
*.* ?RemoteHost & ~(& ~表示匹配后不再继续处理)
重启 rsyslog,目录会自动创建,无需手动建路径。
验证是否成功
最简单的方法是手动触发一条测试日志:
- 在客户端执行:
logger "test log from client" - 在服务端检查对应路径,比如:
tail -f /var/log/remote/192.168.100.101/2026-07-29.log
看到刚写入的内容,说明链路通了。也可用 netstat -tuln | grep :514 确认服务端确实在监听。
常见问题提醒
转发失败通常卡在这几个地方:
- 客户端没重启 rsyslog 服务,配置只是写了没生效
- 服务端只开了 UDP 却用 TCP 转发(或反过来),协议不匹配
- SELinux 或防火墙拦截了 514 端口,尤其是 CentOS/RHEL 默认启用 SELinux
- 日志服务器磁盘满或权限不足,导致无法写入
/var/log/remote目录











