【发布时间】:2015-08-13 21:35:03
【问题描述】:
问题: 在通过 AWS EBS Tomcat 7 容器将微服务部署为战争之后...注意到在 UTC 日边界发生的日志轮换留下了一个陈旧的 inode 文件。
日志轮换更像是一个副本和截断,这会导致 rsyslog 的文件处理程序过时,该处理程序正在侦听对 catalina.out 的更改。防止过时的 inode 描述符的最佳方法是什么?我应该在 logback.xml 或 logrotate 中指定翻转策略还是...?
sudo lsof /var/log/tomcat7/catalina.out 的输出(和 sudo stat 报告最新的 inode)
rsyslogd 18970 root 2r REG 202,1 1250 134754 /var/log/tomcat7/catalina.out
但与调试模式下 rsyslog 的日志输出不匹配。
4638.114765354:7fc839b8c700: stream checking for file change on '/var/log/tomcat7/catalina.out', inode 135952/135952file 7 read 0 bytes
解决方法 停止 Tomcat,删除 catalina.out,然后重新启动 Tomcat。这允许 rsyslog 继续流式传输新记录。
但是,几个小时后,rsyslog 无法将更新的日志记录流式传输到 rsyslog 目标服务器。 rsyslog 的调试日志包含与 stat 和 lsof 的输出相同的 inode。如果你运行
sudo stat /var/log/tomcat7/catalina.out
rsyslog 再次开始流式传输。
您是否注意到 rsyslog 在日志翻转用例之外间歇性地停止流式传输?
为什么sudo stat /var/log/tomcat7/catalina.out 会导致 rsyslog 再次流式传输?
【问题讨论】:
-
回答我自己的问题:1. 似乎 catalina.out 的 copyntruncate 不仅在 UTC 日翻转期间发生,而且全天发生。 2. sudo stat 告诉 shell 重新评估你给它的任何目的地的 inode 位置......因此 rsyslog 客户端再次通过 imfile 开始流式传输的原因
标签: amazon-web-services tomcat7 amazon-elastic-beanstalk rsyslog