Linux syslog日志丢失的常见根因
速率限制触发丢弃:默认情况下,rsyslog 与 systemd-journald 都会对单位时间内的日志条数做限流。典型默认是每 5 秒最多 200 条,超出的消息会被丢弃;常见日志提示如:“imjournal: X messages lost due to rate-limiting” 或 “Suppressed N messages from /system.slice/xxx.service”。这在应用短时间爆量(如异常、启动刷屏)时尤为明显。
日志轮转与清理策略导致“看不见”:logrotate 按大小或时间切割日志并删除旧文件。若保留份数或周期设置过小,或轮转后权限/属主不正确,容易造成“新日志写入了但旧日志被删/不可读”的错觉。常见配置位于 /etc/logrotate.conf 与 /etc/logrotate.d/rsyslog。
服务未运行或配置错误:rsyslog 未启动、配置语法错误、日志路径/权限不当,都会直接导致日志写入失败或丢失。应检查服务状态与配置文件有效性。
磁盘空间不足或 I/O 受阻:磁盘满、inode 耗尽或 I/O 拥塞,会使写入失败或被系统静默丢弃。应优先排查 df -h、df -i 与系统 I/O 状况。
网络传输丢包(远程日志场景):使用 UDP 发送日志时,网络抖动、丢包或远端拥塞会造成日志缺失;TCP/RELP 更可靠但配置不当同样会丢。需核查网络连通性与远端接收能力。
权限/安全策略限制:日志文件或目录的权限/属主错误(如非 root:adm)、或 SELinux/AppArmor 策略限制,都会让写入失败。应检查文件权限与策略日志。
快速排查步骤
稳妥的修复与配置建议
调整或关闭速率限制(按需)
正确配置 logrotate,避免“看不见”的丢失
远程日志的可靠性提升