Comment surveiller le nombre de nouvelles lignes dans la queue


9

Je veux faire quelque chose comme ça:

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

Il compte de nouvelles lignes de queue chaque seconde

/ Linux, CentOs

Pour être plus clair. J'ai quelque chose comme ça:

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

Je lis des messages d'erreur. Et maintenant je veux les compter. Combien d'erreurs ~ j'ai en une seconde. Donc, une ligne dans un journal est une erreur dans un processus.


Qu'essayez-vous de faire? Si vous voulez regarder des lignes ajoutées, il suffit de les utiliser tail -f /path/to/fileseules. Si vous voulez regarder les lignes de fichiers, vous pouvez utiliser watch wc -l /path/to/file.
Khaled

@Khaled, je dois regarder combien de nouvelles lignes ont été ajoutées
fl00r

J'utilise tail avec regex pour un certain nombre de fichiers, et je veux voir combien de lignes sont ajoutées à tous ces fichiers dans le temps
fl00r

1
Hmpfh. tail -f /var/log/my_process/*.log |grep error > /tmp/error.lines & ; watch wc /tmp/error.lines? Ensuite, faites des maths.
cjc

@cjc ça marche, merci! :) vous devriez y répondre comme une réponse ab
fl00r

Réponses:


24

J'ai récemment découvert le pv, et c'est vraiment cool, vous pourriez faire quelque chose comme

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

  • -i2 = compter toutes les 2 secondes
  • -l = compter les lignes
  • -t = temps d'impression
  • -r = afficher le taux

3

Voici une méthode rapide et sale. Vous voulez essentiellement diviser le tailet le watch wcen parties distinctes et faire quelque chose comme:

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

à ce moment, vous pouvez faire des calculs pour obtenir un nombre d'erreurs / s. Mais, si vous faites juste cela pour un examen ponctuel de votre taux d'erreur, rapide et sale pourrait être suffisant.


3

Si pv n'est pas disponible, cela peut être fait avec perl:

Toutes les secondes:

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

Toutes les 10 secondes

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

Exemple de sortie:

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

Vous pouvez essayer quelque chose comme ceci:

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

Il imprime le numéro de ligne devant chaque ligne.


1) Ce n'est pas ce que l'OP recherche et 2) le nlfera, ne nécessitant pas l'appel à perl.
EEAA
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.