【问题标题】:How to tail -f a file (or similar) for a specified interval?如何在指定的时间间隔内拖尾 -f 文件(或类似文件)?
【发布时间】:2009-06-15 19:06:48
【问题描述】:

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

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

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

将跟踪日志 5 秒钟,并显示所有带有“/serve”的行。

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

【问题讨论】:

    标签: unix logging intervals tail


    【解决方案1】:

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

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

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

    告诉我最近 5 秒内提供了多少个 javascript 文件,等等。

    【讨论】:

    • 超时 -s15 5 尾 -f /mnt/log/nginx/nginx-access.log | grep '/javascripts' | wc -l
    • 当我运行它时,我只是得到“终止”并且 wc 没有输出 - 有什么想法吗?
    【解决方案2】:

    稍微不同的方法:

    (tail -f /var/log/messages & P=$! ; sleep 5; kill -9 $P) | grep /serve
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-26
        • 1970-01-01
        • 2021-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多