2009-06-15 7 views
1

Je suis en train d'ajouter quelques alertes nagios à notre système - dont certaines surveilleront le taux de certains événements touchant les logs nginx/apache (ou les valeurs d'analyse de ces logs). La façon dont j'ai abordé le problème jusqu'à présent est avec un script shell simple qui envoie le journal pendant 25 secondes environ dans un fichier temporaire, ce qui tue le processus, puis exécute awk, etc. sur le fichier temporaire. Le but étant ici d'obtenir un "échantillon" de log sur 25 secondes et d'effectuer ensuite une analyse. Ceci est loin d'être idéal en raison de l'augmentation de l'E/S du disque due à ces fichiers temporaires - ce que je voudrais vraiment, c'est une queue "améliorée" qui terminerait le tube proprement après un certain nombre de secondes. Par exemple:Comment faire pour tail -f un fichier (ou similaire) pour un intervalle spécifié?

queue -f --interval '5 secondes' | grep "/ serve"

Soumettreait le journal à la ligne pendant 5 secondes et me montrerait toutes les lignes qui ont "/ serve". J'imagine que je pourrais monter un script ruby ​​pour le faire assez rapidement, mais je voulais m'assurer qu'il n'y avait pas un moyen unixy pour y parvenir. À un niveau élevé, existe-t-il un meilleur moyen de prendre des échantillons d'un journal des N dernières secondes (et non, je préfère ne pas être l'analyse des horodateurs, etc.)

Répondre

0

Une approche légèrement différente:

(tail -f /var/log/messages & P=$! ; sleep 5; kill -9 $P) | grep /serve 
2

Trouvé la solution. "apt-get install timeout" :)

Editer: En fait, cela tue la queue, ne la fait pas sortir gracieusement, donc nous perdons tout le tuyau. Ce que je veux travailler est:

timeout -15 5 queue -f /mnt/log/nginx/nginx-access.log | grep '/ javascripts' | wc -l

Pour me dire combien de fichiers javascript servis dans les 5 dernières secondes, etc.

+0

timeout -s15 5 queue -f /mnt/log/nginx/nginx-access.log | grep '/ javascripts' | wc -l – diyism

0

Je pense que, moi-même en tant qu'utilisateur Nagiios, vous ne voulez pas que les processus de sonde s'arrêtent pour des durées arbitraires. Cela va, dans le pire des cas, faire en sorte que Nagios vérifie d'autres choses moins souvent, ou «masse» les chèques.

Qu'en est-il d'un script qui s'exécute rapidement (instantanément) et analyse les dernières lignes du fichier, ne renvoyant que des choses intéressantes avec un horodatage plus tard que le temps imparti?

Questions connexes