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/*
  • 转自: https://www.jianshu.com/p/4e71f553cf3f

最新文章

  1. C#小小总结(面向对象)
  2. [题解+总结]NOIP动态规划大合集
  3. AndroidStudio支持新的NDK的操作使用
  4. java Email发送及中文乱码处理。
  5. 通宵疯狂积累VB.NET基础知识
  6. 【Demo 0011】多媒体播放器
  7. js原生设计模式——2面向对象编程之继承—call(this)构造函数式继承
  8. Bash : 索引数组
  9. 花了一年时间完成的 在线G代码编辑,加工系统 G-Code Editor V1.0
  10. ubuntu14.04 64位 安装eclipse
  11. java核心卷笔记--P48字符串3.6.5
  12. 启动期间的内存管理之bootmem_init初始化内存管理–Linux内存管理(十二)
  13. Django实例
  14. MAIL服务器搭建
  15. HTML学习笔记Day16
  16. centos7 mysql-server 安装过程
  17. Chain训练准则的计算
  18. springboot集成redis缓存
  19. Stack源码解析
  20. 3dContactPointAnnotationTool开发日志(一)

热门文章

  1. 让启动的jar包能打断点
  2. 统计tomcat的access日志
  3. Linux 在miniconda和anaconda同时安装时,卸载miniconda
  4. java 复习篇1-----人机交互
  5. 在nestjs中使用rabbitmq
  6. lua 文件读写处理(操作敏感词库)
  7. Spring 自定义注解 操作日志
  8. hexo部署和优化记录
  9. nodejs查询
  10. Jmeter学习:常用内置函数