我正在努力向我们的系统添加一些nagios警报 - 其中一些将监视某些事件发生在nginx / apache日志中的速率(或从那些日志中解析值。)我接近这个问题的方式是这样的远程是一个简单的shell脚本尾部-f'ing日志25秒左右到一个临时文件,杀死进程,然后在临时文件上运行awk等。这里的目标是在25秒内获取日志“样本”然后执行分析。
这显然不太理想,因为由于这些临时文件导致磁盘IO增加 - 我真正想要的是一个“增强”尾部-f,它会在一定的秒数后干净地终止管道。即:
tail -f --interval'5秒'| grep“/ serve”
将日志拖尾5秒并向我显示所有包含“/ serve”的行。
我想我可以快速制作一个ruby脚本来做到这一点,但我想确保没有更多的单一方法来实现这一目标。在较高的层次上,是否有更好的方法从最后N秒采集日志样本(不,我宁愿不解析时间戳等)。
答案 0 :(得分:4)
找到解决方案。 “apt-get install timeout”:)
编辑:实际上这会杀死尾巴,不会让它优雅地退出,所以我们会丢失整个管道。我想要的是:
超时-15 5 tail -f /mnt/log/nginx/nginx-access.log | grep'/ javascripts'| wc -l </ p>
告诉我在过去5秒内提供了多少个javascript文件,等等。
答案 1 :(得分:0)
略有不同的方法:
(tail -f /var/log/messages & P=$! ; sleep 5; kill -9 $P) | grep /serve
答案 2 :(得分:0)
我认为,作为Nagiios用户,您不希望探测进程暂停任意时间。在最坏的情况下,这将使Nagios不经常检查其他事情,或者“检查”支票。
如果脚本快速(立即)运行并解析文件的最后几行,只返回时间戳晚于给定时间的有趣内容?