2013-07-10 3 views
0

У меня есть файл журнала с отметкой времени, который я просматриваю. Каждый раз журнал записывает сообщение «ОК»Мониторинг скорости записи файла журнала, соответствующего шаблону

Как я могу записать число «ОК» в секунду в секунду? Например. выход

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

у него есть отметки времени, да – OneSolitaryNoob

ответ

2

Когда ваш журнал в форме, как:

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

Вот быстрый скрипт, чтобы сделать это:

#! /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, установленный по умолчанию, поэтому вы можете проверить его.

Смежные вопросы