Kuyruktaki yeni hatların sayısı nasıl izlenir


9

Böyle bir şey yapmak istiyorum:

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

Her saniye yeni kuyruk çizgileri sayar

/ Linux, CentO'lar

Daha açık olmak gerekirse. Böyle bir şey var:

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

Bazı hata mesajlarını okuyorum. Ve şimdi onları saymak istiyorum. Bir saniyede kaç ~ hata var. Bu nedenle, günlükteki bir satır, bir işlemdeki bir hatadır.


Ne yapmaya çalışıyorsun? Eklenen satırları izlemek istiyorsanız, tail -f /path/to/filetek başına kullanmak yeterlidir . Dosya satırlarını izlemek istiyorsanız kullanabilirsiniz watch wc -l /path/to/file.
Khaled

@Khaled, kaç yeni satır eklendiğini izlemem gerekiyor
fl00r

Birkaç dosya için regex ile kuyruk kullanın ve bir süre içinde tüm bu dosyalara kaç satır eklendiğini görmek istiyorum
fl00r

1
Hmpfh. tail -f /var/log/my_process/*.log |grep error > /tmp/error.lines & ; watch wc /tmp/error.lines? Sonra matematik yapın.
cjc

@cjc çalışıyor, teşekkürler! :) ab cevap olarak bunu gerekir
fl00r

Yanıtlar:


24

Geçenlerde pv keşfettim ve gerçekten harika, böyle bir şey yapabilirsin

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

  • -i2 = 2 saniyede bir say
  • -l = satır sayma
  • -t = baskı süresi
  • -r = gösteri hızı

3

İşte hızlı ve kirli bir yöntem. Temel olarak tailve watch wcparçalarını ayrı parçalara bölmek ve şöyle bir şey yapmak istiyorsunuz:

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

hangi noktada, bir hata / sn numarası almak için matematik yapabilirsiniz. Ancak, bunu sadece hata oranınızın bir kerelik muayenesi için yapıyorsanız, hızlı ve kirli yeterince iyi olabilir.


3

PV mevcut değilse, perl ile yapılabilir:

Her saniyede bir:

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

10 saniyede bir

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

Örnek çıktı:

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

Böyle bir şey deneyebilirsiniz:

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

Satır numarasını her satırın önüne yazdırır.


1) OP'nin aradığı nlbu değildir ve 2) bunu yapar, perl için çağrı gerektirmez.
EEAA
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.