Cómo observar el recuento de nuevas líneas en la cola

9

Quiero hacer algo como esto:

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

Cuenta nuevas líneas de cola cada segundo

/ Linux, CentOs

Para ser más claro. Tengo algo como esto:

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

Estoy leyendo algunos mensajes de error. Y ahora quiero contarlos. Cuantos ~ errores tengo en un segundo. Entonces, una línea en un registro es un error en un proceso.

fl00r
fuente
¿Que estás tratando de hacer? Si desea ver las líneas adjuntas, es suficiente para usar tail -f /path/to/filesolo. Si desea ver líneas de archivo, puede usar watch wc -l /path/to/file.
Khaled
@Khaled, necesito ver cuántas líneas nuevas se
agregaron
Utilizo tail con regex para varios archivos, y quiero ver cuántas líneas se agregan a todos estos archivos a la vez
fl00r
1
Hmpfh tail -f /var/log/my_process/*.log |grep error > /tmp/error.lines & ; watch wc /tmp/error.lines? Entonces haz matemáticas.
cjc
@cjc funciona, gracias! :) deberías hacerlo como respuesta ab
fl00r

Respuestas:

24

Recientemente descubrí pv, y es realmente genial, podrías hacer algo como

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

  • -i2 = cuenta cada 2 segundos
  • -l = contar líneas
  • -t = tiempo de impresión
  • -r = mostrar tasa
javipolo
fuente
3

Aquí hay un método rápido y sucio. Básicamente, desea dividir el taily el watch wcen partes separadas, y hacer algo como:

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

en ese momento, puede hacer cálculos matemáticos para obtener un número de errores / seg. Pero, si solo está haciendo esto para un examen único de su tasa de error, rápido y sucio podría ser lo suficientemente bueno.

cjc
fuente
3

En caso de que pv no esté disponible, se puede hacer con perl:

Cada segundo:

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

Cada 10 segundos

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

Salida de muestra:

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

Podrías probar algo como esto:

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

Imprime el número de línea delante de cada línea.

finlandés
fuente
1) Eso no es lo que está buscando el OP y 2) nllo hará, sin requerir la llamada a Perl.
EEAA