Як слідкувати за кількістю нових рядків у хвіст


9

Я хочу зробити щось подібне:

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

Він рахує нові лінії хвоста щосекунди

/ Linux, CentOs

Щоб бути більш чітким. У мене щось таке:

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

Я читаю деякі повідомлення про помилки. А зараз я хочу їх порахувати. Скільки ~ помилок у мене за секунду. Отже, один рядок у журналі - це одна помилка в процесі.


Що ти намагаєшся зробити? Якщо ви хочете переглянути додані рядки, досить користуватися 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 це працює, дякую! :) Вам слід на це як відповідь
fl00r

Відповіді:


24

Нещодавно я виявив ПВ, і це дуже здорово, ви можете зробити щось на кшталт

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

  • -i2 = рахувати кожні 2 секунди
  • -l = кількість ліній
  • -t = час друку
  • -r = показник показника

3

Ось швидкий і брудний метод. Ви в основному хочете розбити tailі watch wcна окремі частини, і зробити щось на кшталт:

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

в цей момент ви можете займатися математикою, щоб отримати число помилок / сек. Але, якщо ви просто робите це для одноразового вивчення рівня помилок, швидке та брудне може бути досить хорошим.


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

-1

Ви можете спробувати щось подібне:

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

Він друкує номер рядка перед кожним рядком.


1) Це не те, що шукає ОП, і 2) nlце зробить, не вимагаючи, щоб виклик переслідував.
EEAA
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.