服务端必须显式加载imtcp/imudp模块、监听514端口、定义模板并用&~终止处理,否则日志静默丢弃或重复落盘;默认rsyslog不监听网络端口,需手动启用接收能力,并逐层验证模块、端口、防火墙、模板及客户端协议。

直接上结论:服务端必须显式加载 imtcp 或 imudp 模块、监听 514 端口、定义模板并用 &~ 终止处理,缺一不可;否则日志看起来“没收到”,实际是静默丢弃或重复落盘。
rsyslog服务端必须加载模块并监听514端口
默认配置下,rsyslog 不监听任何网络端口——它只处理本地日志。想当服务器,得手动启用接收能力。
- 编辑
/etc/rsyslog.d/50-remote.conf(推荐)或/etc/rsyslog.conf - 添加这两行(TCP + UDP 都开,或按需选其一):
module(load="imtcp")input(type="imtcp" port="514")module(load="imudp")input(type="imudp" port="514") - 注意顺序:
module(load=...)必须出现在input(...)之前,否则模块未加载,监听无效 - 改完别急着重启,先跑
rsyslogd -N1验证语法和模块加载状态,输出里要有imtcp和omfwd才算到位
模板定义和调用必须带 &~ 终止符
不加 &~ 是最隐蔽的坑:日志既写进你指定的远程目录,又继续落到 /var/log/messages,你以为转发成功了,其实本地还在冗余写入,磁盘悄悄爆掉。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 模板名大小写敏感:
$template RemoteLogs和?remotelogs不匹配 - 模板定义示例(按主机名分目录):
$template RemoteLogs,"/var/log/remote/%HOSTNAME%/%$YEAR%-%$MONTH%-%$DAY%.log" - 调用必须紧接
&~:*.* ?RemoteLogs &~(中间不能换行,不能有空格隔开) - 如果用
%FROMHOST-IP%,NAT 环境下会拿到中间设备 IP,建议优先用%HOSTNAME%或客户端加$ActionForwardDefaultTemplate RSYSLOG_ForwardFormat
防火墙、端口监听与连通性必须逐层验证
配置写对了,但 ss 看不到监听、tcpdump 抓不到包,八成是卡在基础设施层。
- 检查监听:
ss -tuln | grep :514—— UDP 看udp行,TCP 看tcp行 - 查防火墙:
Ubuntu:ufw status确认514/udp或514/tcp允许
RHEL/CentOS:firewall-cmd --list-ports看是否含514 - 测连通性:
TCP:nc -zv 192.168.1.100 514
UDP:nc -u -zv 192.168.1.100 514(UDP 的nc返回快不代表通,得配合tcpdump -i any port 514抓包确认) - 服务端收不到?先在客户端执行
logger "test from $(hostname)",再立刻在服务端tail -f /var/log/remote/$(hostname)/2026-06-17.log查看是否实时出现
生产环境务必用 TCP 而非 UDP
UDP 无连接、无重传、无顺序保证,内网短距测试可以,线上一旦丢包或网络抖动,审计日志就断层,根本没法追责。
- 客户端规则必须用
@@(双@),不是@:*.* @@192.168.1.100:514 - 服务端只开
imtcp,关掉imudp,减少攻击面 - 要更稳?加队列缓存:
$ActionQueueFileName fwdRule1$ActionQueueMaxDiskSpace 1g$ActionQueueSaveOnShutdown on
放在客户端配置里,网络中断时日志暂存磁盘,恢复后自动补发 - 敏感系统必须上 TLS,明文走 514 端口等于把密码、命令历史全广播出去
真正难的不是写那几行配置,而是每改一处都得验证模块加载、端口监听、防火墙、模板调用、&~ 位置、客户端协议符号——漏一个,日志就消失,而且不报错,只能靠 rsyslogd -N1 和 tcpdump 一层层往下筛。










