Как следить за количеством новых линий в хвосте

9

Я хочу сделать что-то вроде этого:

watch tail -f | wc -l
#=> 43
#=> 56
#=> 61
#=> 44
#=> ...

Он считает новые линии хвоста каждую секунду

/ Linux, CentOs

Чтобы быть более понятным. У меня есть что-то вроде этого:

tail -f /var/log/my_process/*.log | grep error

Я читаю некоторые сообщения об ошибках. И теперь я хочу их посчитать. Сколько ошибок ~ я получил в секунду. Таким образом, одна строка в журнале - это одна ошибка в процессе.

fl00r
источник
Что ты пытаешься сделать? Если вы хотите смотреть добавленные строки, достаточно использовать в tail -f /path/to/fileодиночку. Если вы хотите посмотреть строки файла, вы можете использовать watch wc -l /path/to/file.
Халед
@ Khaled, мне нужно посмотреть, сколько новых строк было добавлено
fl00r
Я использую хвост с регулярным выражением для ряда файлов, и я хочу увидеть, сколько строк добавляется ко всем этим файлам за один раз
fl00r
1
Hmpfh. tail -f /var/log/my_process/*.log |grep error > /tmp/error.lines & ; watch wc /tmp/error.lines? Тогда делай математику.
CJC
@cjc это работает, спасибо! :) Вы должны на это как ab ответ
fl00r

Ответы:

24

Я недавно обнаружил PV, и это действительно круто, вы могли бы сделать что-то вроде

tail -f logfile | pv -i2 -ltr > /dev/null

  • -i2 = считать каждые 2 секунды
  • -l = количество строк
  • -t = время печати
  • -r = показать скорость
javipolo
источник
3

Вот быстрый и грязный метод. Вы в основном хотите разбить tailи watch wcна отдельные части, и сделать что-то вроде:

tail -f /var/log/my_process/*.log |grep error > /tmp/error.lines &
watch wc /tmp/error.lines

в этот момент вы можете сделать математику, чтобы получить число ошибок / сек. Но, если вы просто делаете это для разовой проверки уровня ошибок, быстрых и грязных может быть достаточно.

CJC
источник
3

Если 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
aprodan
источник
-1

Вы можете попробовать что-то вроде этого:

tail -f /var/log/my_process/*.log | perl -pe '$_ = "$. $_"'

Он печатает номер строки перед каждой строкой.

финн
источник
1) Это не то, что ищет OP, и 2) nlсделает это, не требуя вызова perl.
EEAA