【问题标题】:Monitor the rate of log file writes matching a pattern监控与模式匹配的日志文件写入速率
【发布时间】:2013-07-10 19:08:50
【问题描述】:

我正在查看一个带时间戳的日志文件。日志每隔一段时间就会写一条消息,“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

【问题讨论】:

  • 由于缓冲,计算一秒钟内写入的 OK 数可能会产生很大的误导。文件没有时间戳吗?
  • 它有时间戳,是的

标签: linux bash logging monitoring


【解决方案1】:

当您的日志格式如下:

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

【讨论】:

    【解决方案2】:

    这是一个快速的脚本:

    #! /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,因此您可能需要检查一下。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-04
      • 1970-01-01
      相关资源
      最近更新 更多