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中如何更改日志速率限制

默认情况下,在 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
日期:2020-07-07 20:54:52 来源:oir作者:oir