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.


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

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.


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

-1

Anda dapat mencoba sesuatu seperti ini:

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

Ini mencetak nomor baris di depan setiap baris.


1) Bukan itu yang dicari OP dan 2) nlakan melakukan ini, tidak memerlukan panggilan untuk perl.
EEAA
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.