rsyslog陈旧的文件处理程序与catalina.out

时间:2014-10-23 06:32:48

标签: amazon-web-services tomcat7 elastic-beanstalk rsyslog

问题: 通过AWS EBS Tomcat 7容器将微服务部署为战争后...注意到在UTC日边界发生的日志轮换会留下过时的inode文件。

日志轮换更像是一个copy n truncate,这会导致rsyslog过时的文件处理程序,它正在侦听catalina.out的更改。什么是防止过时的inode描述符的最佳方法?我应该在logback.xml或logrotate中指定翻转策略还是......?

输出sudo lsof /var/log/tomcat7/catalina.out(和sudo stat report最新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 个答案:

答案 0 :(得分:0)

一旦logrotated在catalina.out上轮换,rsyslog也不会发送新记录。发布一个统计数据并没有完全削减它,因为问题是tomcat停止写catalina.out(!)...在仔细阅读各种论坛和博客后,我能够通过以下步骤解决这个问题:

  • 确保我们在rsyslog配置中定义了$WorkDirectory;这允许rsyslog写入"状态文件"对于catalina.out(或者它监视的任何其他日志文件)
  • As noted here on Loggly's blog,您需要停止rsyslog,删除此状态文件,然后在postrotate条目上重新启动rsyslog。
  • catalina.out的logrotate设置(状态文件位于/ var / lib / rsyslog中):

    /opt/tomcat/logs/catalina.out {
        rotate 7
        size 50M
        notifempty
        missingok
        postrotate
            service rsyslog stop
            rm /var/lib/rsyslog/*
            service rsyslog start
        endscript
    }