Amazon web services 带有catalina.out的rsyslog陈旧文件处理程序

Amazon web services 带有catalina.out的rsyslog陈旧文件处理程序,amazon-web-services,tomcat7,amazon-elastic-beanstalk,rsyslog,Amazon Web Services,Tomcat7,Amazon Elastic Beanstalk,Rsyslog,问题: 在通过AWS EBS Tomcat 7容器将microservices部署为war后……注意到UTC日边界处发生的日志旋转会留下一个过时的inode文件 日志循环更像是拷贝n截断,这会导致rsyslog的文件处理程序过时,它正在侦听catalina.out的更改。防止过时inode描述符的最佳方法是什么?我应该在logback.xml或logrotate中指定滚动策略还是 sudo lsof/var/log/tomcat7/catalina.out的输出(以及sudo stat报告最新i

问题: 在通过AWS EBS Tomcat 7容器将microservices部署为war后……注意到UTC日边界处发生的日志旋转会留下一个过时的inode文件

日志循环更像是拷贝n截断,这会导致rsyslog的文件处理程序过时,它正在侦听catalina.out的更改。防止过时inode描述符的最佳方法是什么?我应该在logback.xml或logrotate中指定滚动策略还是

sudo lsof/var/log/tomcat7/catalina.out的输出(以及sudo stat报告最新inode)

但与调试模式下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再次流式传输?

我还遇到了一个问题,即一旦logrotated在catalina.out上旋转,rsyslog就不会发送新记录。发布统计数据对我来说并没有什么好处,因为问题是tomcat停止向catalina.out(!)写信……在阅读了各种论坛和博客后,我通过以下步骤解决了这个问题:

  • 确保在rsyslog配置中定义了
    $WorkDirectory
    ;这允许rsyslog为catalina.out(或它监视的任何其他日志文件)写入“状态文件”
  • ,您需要停止rsyslog,删除此状态文件,然后在
    postrotate
    条目上重新启动rsyslog
  • catalina.out的my logrotate设置(状态文件位于/var/lib/rsyslog中):


回答我自己的问题:1。catalina.out的CopyNTRunState似乎不仅在UTC日滚动期间发生,而且在一整天都发生。2.sudo stat告诉shell重新评估您提供给它的任何目的地的inode位置……因此,rsyslog客户端开始通过imfile再次流式处理
sudo stat /var/log/tomcat7/catalina.out
/opt/tomcat/logs/catalina.out {
    rotate 7
    size 50M
    notifempty
    missingok
    postrotate
        service rsyslog stop
        rm /var/lib/rsyslog/*
        service rsyslog start
    endscript
}