监视与模式匹配的日志文件写入速率

时间:2013-07-10 19:08:50

标签: linux bash logging monitoring

我正在看一个带时间戳的日志文件。日志经常会写一条消息,“OK”

我怎样才能捕获每秒写入“OK”的数量?例如。输出如

10.5 OK/sec
9 OK/sec
20 OK/sec

日志非常大,在整个文件上执行grep是不切实际的。我从

开始
tail -f my.log | grep OK

这很有帮助,但并不能让我得到这个价格。

谢谢!

下面的第一个解决方案很棒(其他方面也很好),我稍微修改了一下这就是我提出的方法

tail -f my.log | perl -lne 'if(/(\d+:\d+:\d+).*OK/) { print $1; }'| uniq -c

2 个答案:

答案 0 :(得分:3)

当你的日志形式如下:

Wed Jul 10 22:44:00 CEST 2013 OK
Wed Jul 10 22:44:00 CEST 2013 OK
Wed Jul 10 22:44:00 CEST 2013 OK
Wed Jul 10 22:44:00 CEST 2013 OK
Wed Jul 10 22:44:01 CEST 2013 OK
Wed Jul 10 22:44:01 CEST 2013 OK
Wed Jul 10 22:44:01 CEST 2013 OK
Wed Jul 10 22:44:01 CEST 2013 OK
Wed Jul 10 22:44:01 CEST 2013 OK
Wed Jul 10 22:44:01 CEST 2013 OK
Wed Jul 10 22:44:01 CEST 2013 OK
Wed Jul 10 22:44:01 CEST 2013 OK

因此,在timestamp OK格式中,您可以尝试简单的方法:

tail -f logfile | uniq -c

您将获得下一个结果:

4 Wed Jul 10 22:44:00 CEST 2013 OK
8 Wed Jul 10 22:44:01 CEST 2013 OK 
^
+---- number of OK in the same timestamp

答案 1 :(得分:1)

这是一个快速编写脚本的脚本:

#! /bin/bash
log="/var/log/messages"
seconds="1"
filter="OK"

while true; do
    echo "$(timeout $seconds tail -n0 -f $log|grep $filter|wc -l) OK/sec" 
done

有一些竞争条件,它可能会在循环中丢失一两行,但不太可能。此外,并非每个Linux发行版都默认安装timeout,因此您可能需要检查。