Amazon web services 带有catalina.out的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报告最新inode) 但与调试模式下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
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配置中定义了
;这允许rsyslog为catalina.out(或它监视的任何其他日志文件)写入“状态文件”$WorkDirectory
- ,您需要停止rsyslog,删除此状态文件,然后在
条目上重新启动rsyslogpostrotate
- catalina.out的my logrotate设置(状态文件位于/var/lib/rsyslog中):
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
}