3

我正在向我们的系统添加一些 nagios 警报——其中一些将监控某些事件命中 nginx/apache 日志(或从这些日志中解析值)的速率。到目前为止,我解决问题的方法是一个简单的shell脚本tail -f'ing日志25秒左右到一个临时文件,杀死进程,然后在临时文件上运行awk等。这里的目标是在 25 秒内获得一个日志“样本”,然后执行分析。

这显然不太理想,因为这些临时文件导致磁盘 IO 增加——我真正想要的是一个“增强的” tail -f ,它会在一定秒数后干净地终止管道。IE:

tail -f --interval '5 秒' | grep“/服务”

将日志拖尾 5 秒,并向我显示所有带有“/serve”的行。

我想我可以快速编写一个 ruby​​ 脚本来完成此操作,但我想确保没有更统一的方法来完成此操作。在高层次上,有没有更好的方法从最后 N 秒中获取日志样本(不,我宁愿不解析时间戳等)

4

3 回答 3

5

找到了解决方案。“apt-get 安装超时” :)

编辑:实际上这会杀死尾巴,不会导致它优雅地退出,所以我们会丢失整个管道。我想工作的是:

超时 -15 5 尾 -f /mnt/log/nginx/nginx-access.log | grep '/javascripts' | wc -l

告诉我在过去 5 秒内提供了多少个 javascript 文件,等等。

于 2009-06-15T19:08:45.663 回答
1

稍微不同的方法:

(tail -f /var/log/messages & P=$! ; sleep 5; kill -9 $P) | grep /serve
于 2009-06-15T19:13:29.083 回答
0

我认为,作为 Nagiios 用户,您不希望探测进程暂停任意时间。在最坏的情况下,这将使 Nagios 检查其他事情的频率降低,或者“聚集”检查。

一个快速(即时)运行并解析文件最后几行的脚本呢?只返回时间戳晚于给定时间的有趣内容?

于 2009-06-15T19:15:09.160 回答