Cara mengawasi jumlah garis baru di ekor

9

Saya ingin melakukan sesuatu seperti ini:

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

Ia menghitung garis ekor baru setiap detik

/ Linux, CentOs

Agar lebih jelas. Saya mendapatkan sesuatu seperti ini:

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

Saya membaca beberapa pesan kesalahan. Dan sekarang saya ingin menghitungnya. Berapa banyak ~ kesalahan yang saya dapatkan dalam sedetik. Jadi satu baris dalam log adalah satu kesalahan dalam suatu proses.

fl00r
sumber
Apa yang sedang Anda coba lakukan? Jika Anda ingin menonton saluran yang ditambahkan, itu sudah cukup untuk digunakan tail -f /path/to/filesendiri. Jika Anda ingin menonton baris file, Anda dapat menggunakan watch wc -l /path/to/file.
Khaled
@ Terhormat, saya perlu melihat berapa banyak baris baru ditambahkan
fl00r
Saya menggunakan tail dengan regex untuk sejumlah file, dan saya ingin melihat berapa banyak baris yang ditambahkan ke semua file ini melalui waktu
fl00r
1
Hmpfh. tail -f /var/log/my_process/*.log |grep error > /tmp/error.lines & ; watch wc /tmp/error.lines? Lalu lakukan matematika.
cjc
@cjc berfungsi, terima kasih! :) Anda harus melakukannya sebagai jawaban ab
fl00r

Jawaban:

24

Saya baru saja menemukan pv, dan ini sangat keren, Anda dapat melakukan sesuatu seperti

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

  • -i2 = hitung setiap 2 detik
  • -l = hitung garis
  • -t = waktu cetak
  • -r = show rate
javipolo
sumber
3

Inilah metode cepat dan kotor. Anda pada dasarnya ingin memecah taildan watch wcmenjadi bagian-bagian yang terpisah, dan melakukan sesuatu seperti:

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

pada titik itu, Anda bisa melakukan matematika untuk mendapatkan nomor kesalahan / detik. Tetapi, jika Anda hanya melakukan ini untuk pemeriksaan satu kali dari tingkat kesalahan Anda, cepat dan kotor mungkin cukup baik.

cjc
sumber
3

Dalam hal pv tidak tersedia dapat dilakukan dengan perl:

Setiap satu detik:

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

Setiap 10 detik

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

Output sampel:

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
sumber
-1

Anda dapat mencoba sesuatu seperti ini:

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

Ini mencetak nomor baris di depan setiap baris.

Finn
sumber
1) Bukan itu yang dicari OP dan 2) nlakan melakukan ini, tidak memerlukan panggilan untuk perl.
EEAA