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.)
timeout -s15 5 queue -f /mnt/log/nginx/nginx-access.log | grep '/ javascripts' | wc -l – diyism