我在 CentOS 7(CentOS Linux 版本 7.1.1503(核心))上使用 rsyslog(rsyslog-7.4.7-7.el7_0.x86_64)。我们上面有一些使用syslog框架进行记录的应用程序。我们有很多日志。在高峰时,它可以在一秒钟内多达 50000 条日志。
我们的系统早些时候运行在 CentOS 6.2(和 rsyslog 5.8)上,我们从未观察到任何下降。经过一番搜索,我们发现有速率限制。我们在/var/log/messages中收到诸如“imjournal:由于速率限制而开始丢弃消息”之类的消息,然后收到“imjournal:130886由于速率限制而丢失的消息”之类的消息。我们尝试了不同的方法来禁用或调整它,但没有成功。我们尝试了以下方法。
1)/etc/rsyslog.conf 中的变化
$ModLoad imjournal # provides access to the systemd journal
$imjournalRatelimitInterval 1
$imjournalRatelimitBurst 50000
来自 rsyslog.conf 的其他一些信息如下。这里没有改变任何东西
$OmitLocalLogging on
$IMJournalStateFile imjournal.state
我们还看到 imuxsock 有一些速率限制;但是我们知道当 OmitLocalLogging 为 ON 时不会使用它
2)/etc/systemd/journald.conf 的变化
Storage=auto
RateLimitInterval=1s
RateLimitBurst=100000
我们的应用程序有 Java 模块(使用 SLF4J 和 LOG4J)和 C/C++ 模块(使用 syslog() 调用)。对于 C/C++ 模块,我们大部分时间都缺少 DEBUG 日志。但是 Java 模块的调试日志显然总是很好。
systemd 的版本是“systemd-208-20.el7.x86_64”。应用程序和 rsyslogd 在同一台机器上。
最佳答案
随着 CentOS 7 上 systemd (219-19) 的最新更新,我们能够让我们的日志再次工作的唯一方法是使用下面的配置更改,而不受 journald 或 IMUXSock 的任何速率限制。这也减少了,但并没有完全消除 journald 对 CPU 的过度消耗。
在“$ModLoad imuxsock”和“$ModLoad imjournal”之后将以下内容添加到/etc/rsyslog.conf:
$IMUXSockRateLimitInterval 0
$IMJournalRatelimitInterval 0
在/etc/systemd/journald.conf 中设置以下内容:
Storage=volatile
Compress=no
RateLimitInterval=0
MaxRetentionSec=5s
重新启动 journald 和 rsyslog 以获取更改:
systemctl restart systemd-journald.service
systemctl restart rsyslog.service
在 systemd 的最后一次更新之前,您可以在/etc/rsyslog.conf 中注释掉“$ModLoad imjournal”来解决这个问题,但这不再起作用。
关于rsyslog - CentOS 7 rsyslog DEBUG 日志为 C/C++ 模块删除,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33041593/