Я хочу сделать что-то вроде этого:
watch tail -f | wc -l
#=> 43
#=> 56
#=> 61
#=> 44
#=> ...
Он считает новые линии хвоста каждую секунду
/ Linux, CentOs
Чтобы было понятнее. У меня получилось примерно так:
tail -f /var/log/my_process/*.log | grep error
Я читаю сообщения об ошибках. А теперь я хочу их посчитать. Сколько ошибок я получил за секунду. Таким образом, одна строка в журнале - это одна ошибка в процессе.
Я недавно открыл для себя pv, и это действительно здорово, вы могли бы сделать что-нибудь вроде
tail -f logfile | pv -i2 -ltr > /dev/null
Если pv недоступен, это можно сделать с помощью perl:
Каждую секунду:
tail -f recycleBack*out | perl -e 'while (<>) {$l++;if (time > $e) {$e=time;$i++;print "$i=> $l\n";$l=0}}'
Каждые 10 секунд
tail -f recycleBack*out | perl -e 'while (<>) {$l++;if (time > $e+10) {$e=time;$i++;print "$i=> $l\n";$l=0}}'
Пример вывода:
1=> 1
2=> 1523
3=> 1339
4=> 1508
5=> 1785
6=> 1587
7=> 1770
8=> 1432
9=> 1339
10=> 1555
11=> 1663
12=> 1693
13=> 1647
Вот быстрый и грязный метод. Вы в основном хотите сломать tail
и watch wc
на отдельные части и сделайте что-то вроде:
tail -f /var/log/my_process/*.log |grep error > /tmp/error.lines &
watch wc /tmp/error.lines
в этот момент вы можете выполнить математические вычисления, чтобы получить число ошибок в секунду. Но, если вы делаете это просто для разовой проверки уровня ошибок, быстрого и грязного может быть достаточно.
Вы можете попробовать что-то вроде этого:
tail -f /var/log/my_process/*.log | perl -pe '$_ = "$. $_"'
Он печатает номер строки перед каждой строкой.