排查rsyslog客户端队列满丢日志,核心是确认“日志发不出去”而非“没产生”,重点看队列堆积、转发失败和限速拦截三类表现:检查$ActionQueueType是否为Disk、用rsyslogd -N1验证语法、测试TCP连通性(@@开头)、搜journalctl中"queue full"或"rate-limiting"关键词,并确认imuxsock加载及journald转发配置。

排查 rsyslog 客户端队列满导致丢日志,核心是确认“日志发不出去”而非“没产生”,重点看队列堆积、转发失败和限速拦截这三类表现。
查队列状态和积压情况
rsyslog 默认内存队列有限,一旦远程目标不可达或响应慢,日志就会排队;队列满后直接丢弃,不报错也不告警。
- 用
rsyslogd -N1验证配置语法是否正确(避免因语法错误导致队列模块未加载) - 检查配置中是否启用了磁盘队列:
搜索$ActionQueueType—— 若为LinkedList或未设置,默认只用内存队列,极易溢出;
推荐设为Disk并指定文件名:$ActionQueueType Disk<br>$ActionQueueFileName rsyslog_queue
- 查看当前队列积压量:
logger "test-queue-check"; sleep 1; journalctl -u rsyslog | tail -20
若看到类似queue full, discarding message或action 'action_0' suspended的提示,说明队列已满或被挂起
验证网络与目标服务连通性
队列满往往不是因为日志太多,而是因为发不出去。TCP 转发失败时,rsyslog 会不断重试并堆积,直到队列耗尽。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 确认转发协议:UDP 无确认机制,丢包不提醒;生产环境必须用 TCP(配置以
@@开头,如@@192.168.1.100:514) - 测试目标端口是否可达:
timeout 3 bash -c 'echo >/dev/tcp/192.168.1.100/514' && echo "OK" || echo "FAIL"
注意:需确保目标 syslog 服务(如 syslog-ng 或另一台 rsyslog)确实在监听 TCP 514 - 检查目标端是否真在收日志:
在接收端执行tcpdump -i any port 514 -c 10,再本地发一条日志(logger test),看是否有包抵达
检查限速与丢弃日志的痕迹
即使队列没满,rsyslog 和 journald 自身也有速率限制,超限后静默丢弃,日志里只留一行提示。
- 搜丢弃记录:
journalctl -u rsyslog | grep -i "lost\|rate-limit\|discarded"
常见关键词:messages lost due to rate-limiting、imjournal: X messages lost - 检查限速配置:
rsyslog 端看$SystemLogRateLimitInterval和$SystemLogRateLimitBurst;
journald 端看/etc/systemd/journald.conf中的RateLimitInterval=和RateLimitBurst=;
默认 5 秒 200 条,高日志量场景建议调大(如设为 1 秒 1000 条) - 临时关闭限速测试:
在 rsyslog 配置中加$SystemLogRateLimitBurst 0(0 表示禁用),重启后观察是否还丢
确认日志源是否被截断或绕过
有时你以为日志进了 rsyslog,其实根本没进来——比如 /dev/log socket 损坏、imuxsock 模块没加载,或 systemd-journald 没转发给 rsyslog。
- 检查 socket 是否正常:
ls -l /dev/log—— 应显示srw-rw-rw-类型的 socket 文件 - 确认 imuxsock 已加载:
grep -r "imuxsock" /etc/rsyslog.d/ /etc/rsyslog.conf
缺失则手动添加module(load="imuxsock") - 确认 journald 向 rsyslog 转发已开启:
grep ForwardToSyslog /etc/systemd/journald.conf—— 必须为ForwardToSyslog=yes(小写 yes,大写无效)

















