Linux 中 syslog 出现延迟 是很常见的问题,原因通常不在“网络慢”,而在 日志处理链路中的缓冲、阻塞或配置。下面按最常见到最容易被忽视的顺序说明。
默认情况下,rsyslog 为了提高性能会批量写日志,而不是来一条写一条。
典型表现:
常见相关配置(rsyslog):
$ActionQueueType LinkedList
$ActionQueueFileName fwdRule1
$ActionResumeRetryCount -1
$ActionQueueSaveOnShutdown on
✅ 解决思路:
syslog 最终要写文件:
/var/log/messages
/var/log/syslog
如果:
就会导致:
日志先堆在内存里,再慢慢落盘
✅ 排查:
iostat -x 1
dstat
例如:
syslog 是单进程串行处理的,一旦堵住就会全局延迟。
如果配置的是:
*.* @logserver:514
(单个 @ = UDP)
问题:
✅ 建议:
@@logserver:514)即使你本地很快,对端慢也会反压:
现代系统:
app → journald → rsyslog
journald 有自身速率限制:
# /etc/systemd/journald.conf
RateLimitInterval=30s
RateLimitBurst=1000
✅ 可临时调大或关闭测试
NTP 没同步时:
✅ 检查:
timedatectl
syslog 进程本身被“饿死”
# 看 syslog 进程
ps aux | grep rsyslog
# 看队列是否堆积
ls -l /var/spool/rsyslog/
# 看磁盘
iostat -x 1
# 看时间同步
timedatectl
# 看 journal 是否限速
systemctl status systemd-journald
你可以补充:
我可以直接帮你给一套针对性配置。