美文网首页
rsyslog由于RateLimit丢失日志的处理

rsyslog由于RateLimit丢失日志的处理

作者: CodingCode | 来源:发表于2020-04-17 06:26 被阅读0次
    1. 问题

    问题的发现:在我们的docker应用中,配置了rsyslog作为日志输出;当应用产生的日志在某段时间内量比较大时,就发现会丢日志。

    1. 原因

    问题的原因:日志的输出路径,应用程序把日志输出到system journal,然后system journal再输出到rsyslog,最后由rsyslog把日志持久化存储到本地磁盘文件。

    而不管是system journal还是rsyslog都有一个配置值,允许一个时间段内最大的日志数量;当应用程序产生的日志数大于规定的数量时就会被丢弃。

    解决办法就是根据应用需要调整配置值。

    1. system journal的配置

    当system journal发生日志超量时,就会看到下面类似信息:

    $ sudo journalctl -u systemd-journald
    Apr 16 19:11:52 <hostname> systemd-journal[1356]: Suppressed 1929 messages from /system.slice/docker.service
    

    因为我们的应用是部署成docker container模式,所以对system journal来说它收到的日志是从docker.service发布过来的。

    system journal关于日志量的配置在:

    $ cat /etc/systemd/journald.conf
    RateLimitInterval=30s
    RateLimitBurst=1000
    

    含义是在30秒的周期内,允许的日志数目是1000,超过部分会被丢弃。

    我们可以估算应用的日志量来调整这两个值,然后重启system journal系统服务system systemd-journald restart即可。

    如果要取消限制,可以把两个值都设置成0就可以。

    1. rsyslog的配置

    和system journal类似,当rsyslog发生日志超量时,就会看到下面类似信息

    $ sudo journalctl -f -u rsyslog
    Apr 16 22:18:38 <hostname> rsyslogd[25142]: imjournal: begin to drop messages due to rate-limiting
    Apr 16 22:18:46 <hostname> rsyslogd[25142]: imjournal: 1429 messages lost due to rate-limiting
    

    同样的rsyslog也有两个配置项:

    $ cat /etc/rsyslog.conf 
    $ModLoad imjournal
    $imjournalRatelimitInterval 30
    $imjournalRatelimitBurst 1000
    

    含义是在30秒的周期内,允许的日志数目是1000,超过部分会被丢弃。

    也是根据需要调整值,或者通过把两个值都设置成0的方式关闭限制;然后重启rsyslog服务就行。

    1. 补充一点

    关于日志Rate的配置值,system journal和rsyslog都有一个缺省值,不同的操作系统,发行版本,以及system journal/rsyslog的版本都可能有不同的值,要查具体文档。
    如果在配置文件里面没有值,则使用缺省值。

    system journal的配置文件在:

    • /etc/systemd/journald.conf
    • /etc/systemd/journald.conf.d/*

    rsyslog的配置文件在:

    • /etc/rsyslog.conf
    • /etc/rsyslog.d/*

    相关文章

      网友评论

          本文标题:rsyslog由于RateLimit丢失日志的处理

          本文链接:https://www.haomeiwen.com/subject/qvssvhtx.html