Jak obserwować liczbę nowych linii w ogonie


9

Chcę zrobić coś takiego:

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

Co sekundę liczy nowe linie ogona

/ Linux, CentOs

Aby być bardziej przejrzystym. Mam coś takiego:

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

Czytam niektóre komunikaty o błędach. A teraz chcę je policzyć. Ile ~ błędów mam w sekundę. Tak więc jedna linia w dzienniku to jeden błąd w procesie.


Co próbujesz zrobić? Jeśli chcesz oglądać dołączone linie, wystarczy użyć tail -f /path/to/filesamego. Jeśli chcesz oglądać wiersze pliku, możesz użyć watch wc -l /path/to/file.
Khaled

@Khaled, muszę zobaczyć, ile nowych linii zostało dołączonych
fl00r

Używam tail z wyrażeniem regularnym dla wielu plików i chcę zobaczyć, ile wierszy jest dołączonych do wszystkich tych plików w czasie
fl00r

1
Hmpfh. tail -f /var/log/my_process/*.log |grep error > /tmp/error.lines & ; watch wc /tmp/error.lines? Następnie zrób matematykę.
cjc 22.10.12

@cjc to działa, dzięki! :) powinieneś na to odpowiedzieć jako ab
fl00r

Odpowiedzi:


24

Niedawno odkryłem pv i jest naprawdę fajnie, możesz zrobić coś takiego

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

  • -i2 = zliczanie co 2 sekundy
  • -l = zlicza linie
  • -t = czas wydruku
  • -r = pokaż stawkę

3

Oto szybka i brudna metoda. Zasadniczo chcesz rozbić taili watch wcna osobne części i zrobić coś takiego:

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

w którym momencie możesz wykonać matematykę, aby uzyskać liczbę błędów / sekundę. Ale jeśli robisz to tylko w celu jednorazowego zbadania poziomu błędu, szybkie i brudne rozwiązanie może być wystarczająco dobre.


3

Jeśli pv nie jest dostępne, można to zrobić za pomocą perla:

Co sekundę:

tail -f  recycleBack*out  | perl -e 'while (<>) {$l++;if (time > $e) {$e=time;$i++;print "$i=> $l\n";$l=0}}'

Co 10 sekund

tail -f  recycleBack*out  | perl -e 'while (<>) {$l++;if (time > $e+10) {$e=time;$i++;print "$i=> $l\n";$l=0}}'

Przykładowe dane wyjściowe:

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

Możesz spróbować czegoś takiego:

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

Drukuje numer linii przed każdą linią.


1) Nie tego szuka OP i 2) nlzrobi to, nie wymagając wywołania perla.
EEAA
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.