<p>最稳妥的rsyslog客户端转发规则是使用@@(TCP协议),如. @@192.168.10.100:514,需确保服务端启用imtcp并监听514/tcp、防火墙放行该端口,且推荐将规则写入/etc/rsyslog.d/下独立.conf文件而非主配置末尾。</p>

直接用 @@ 转发最稳妥,TCP 协议能避免丢日志,但必须确保服务端监听 TCP 514 且防火墙放行 —— UDP(@)看似简单,实际在生产环境容易静默丢数据,不推荐。
rsyslog 客户端转发规则怎么写
转发规则本质是一条匹配 + 动作语句,写在 /etc/rsyslog.d/ 下任意 .conf 文件里(如 50-remote.conf),优先级由文件名数字决定。
-
*.* @@192.168.10.100:514:转发所有日志(facility 和 priority 全匹配)走 TCP -
auth,authpriv.* @@192.168.10.100:514:只转 auth 类日志(如 ssh 登录、sudo 操作) -
if $programname == 'nginx' then @@192.168.10.100:514 & ~:仅转 nginx 进程日志,& ~防止重复写本地 - 不要写在
/etc/rsyslog.conf末尾 —— 系统更新可能覆盖;统一用/etc/rsyslog.d/管理更安全
为什么转发后远程收不到日志
常见原因不是配置写错了,而是协议、端口、权限三者没对齐。重点查这四点:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 客户端用的是
@@(TCP),但服务端只启了 UDP 监听(imudp+$UDPServerRun 514)→ 必须加imtcp和$InputTCPServerRun 514 - 服务端防火墙没开 514/tcp:
firewall-cmd --permanent --add-port=514/tcp && firewall-cmd --reload - SELinux 启用时默认禁止 rsyslog 外发:
setsebool -P rsyslog_forward on(CentOS/RHEL) - 客户端本地日志没触发:用
logger "test from $(hostname)"生成一条日志,再看服务端是否收到
如何让关键日志走远程、其他日志留本地
rsyslog 的规则是顺序执行的,靠 & ~ 截断后续处理,而不是“替换”。所以要先定义远程动作,再用 & ~ 显式终止该条日志流,本地默认写入不受影响。
- 在
/etc/rsyslog.d/99-keylog.conf中写: if $syslogseverity >= 4 then action(type="omfwd" protocol="tcp" target="192.168.10.100" port="514") & ~if $programname == 'sshd' and $msg contains 'Failed password' then action(type="omfwd" protocol="tcp" target="192.168.10.100" port="514") & ~- 注意:
omfwd模块必须已加载(v8.32+ 默认启用,老版本需手动module(load="omfwd")) - 别漏掉
& ~—— 没它,日志会既发远程又写本地/var/log/messages,但更糟的是,如果后面有& stop,这条日志可能被直接丢弃
真正容易被忽略的是队列配置:网络抖动时,没配 $ActionQueue* 参数的 TCP 转发会卡住甚至阻塞本地日志写入。哪怕只是加 $ActionQueueFileName fwdq 和 $ActionQueueSaveOnShutdown on,也能避免半夜丢日志还查不出原因。

















