Rsyslog 速率限制
systemd 日志限制在任何默认 rsyslog 限制之前达到,因为它的默认限制较小。
默认情况下,rsyslog 将在 10 分钟内接受 20,000 条消息。
因此,如果我们如上所示增加 systemd 日志日志记录的速率限制,我们可能会开始在 syslog 日志中收到类似的消息,如下所示。
.... Jan 9 22:42:35 server1 rsyslogd-2177: imjournal: begin to drop messages due to rate-limiting Jan 9 22:51:26 server1 rsyslogd-2177: imjournal: 143847 messages lost due to rate-limiting ...
第一条消息指出当达到限制时消息将被丢弃,一旦间隔结束(默认为 10 分钟后),由于速率限制而丢失的消息量将被记录。
限制在 /etc/rsyslog.conf 文件中控制。
$ModLoad imjournal $imjournalRatelimitInterval 600 $imjournalRatelimitBurst 20000
同样,我们可以根据需要修改这些值,并且可以通过将两者都设置为 0 来完全禁用它们。
如果对 /etc/rsyslog.conf 文件进行任何更改,则需要重新启动 rsyslog 服务使更改生效。
systemctl restart rsyslog
为什么要限速?
对日志进行速率限制是为了防止日志使用过多级别的系统资源。
要记录事件,需要将其写入使用系统资源的磁盘。
如果这些事件中有太多需要记录到磁盘中,它们可能会使系统不堪重负,并导致更重要的服务响应缓慢或者失败。
出于这个原因,通常不建议完全禁用速率限制,而是根据需要对其进行调整。
同时,我们不想丢弃生成严重警报可能需要的重要消息,因此需要找到平衡点。
默认情况下,在 Linux 中有一些不同的机制可以限制日志记录。
这些主要是默认情况下的 systemd 日志和 rsyslog 速率限制。
在这里,我们介绍了修改或者删除日志记录的速率限制。
Systemd 日志速率限制
我们如何知道日志限制是否真的导致我们丢弃日志消息?
通常,我们会在日志文件中看到类似的消息,如下所示。
Jan 9 09:18:07 server1 journal: Suppressed 7124 messages from /system.slice/named.service
在这种特殊情况下,我们有一个运行 Bind 的 DNS 服务器,它记录所有 DNS 查询。
7124 条消息被抑制和丢弃(未记录),因为在此示例中它们进入得太快。
默认情况下,systemd 在 30 秒内允许 1,000 条消息。
这些限制在 /etc/systemd/journald.conf 文件中控制。
RateLimitInterval=30s RateLimitBurst=1000
如果在 RateLimitInterval 定义的时间内收到的消息超过 RateLimitBurst 中指定的数量,则该间隔内的所有其他消息都将被丢弃,直到该间隔结束。
我们可以根据需要修改这些值,我们可以通过将两者都设置为 0 来完全禁用 systemd 日志记录速率限制。
如果对 /etc/systemd/journald.conf 进行任何更改,则需要重新启动 systemd-journald 服务使更改生效。
systemctl restart systemd-journald