Aller au contenu

Surveiller un fichier de log


Messages recommandés

Bonjour,

Je cherche une application pour Centos 5.5 qui permet de surveiller un fichier de log et de réaliser une action si il voit passer un mot-clé/phrase-clé entré sous regex.

J'ai trouvé quelques pistes sans résultats (LogWatch, logcheck, swatch)

On m'a aussi proposé de créer un script en partant de cette commande : "tail -f file.log | grep keyword" mais cela ne gère pas les regex et j'aurai préféré une application.

Je suis étonné de ne rien trouvé sur le net car cela me semble assez basique.

En gros ce que je cherche à faire :

Si message "WARNING ......" dans les logs

Faire : service ..... restart

D'avance merci !

Lien vers le commentaire
Partager sur d’autres sites

Pour le grep c'est réglé, il suffit de faire grep -E ou bien egrep et les expressions régulières sont prisent en compte.

J'aurai préféré trouver une application à installer et à paramétrer pour être sur de ne pas créer un script qui pourrait me planter le serveur si j'oublie une hypothèse, je ne suis pas expert en la matière.

Lien vers le commentaire
Partager sur d’autres sites

C'est un serveur Asterisk sous Centos qui est connecté avec plusieurs gateway téléphonique. Je perds de façon aléatoire la liaison sur une des gateway et cela coupe les appels d'un de mes client.

La seule façon que j'ai trouvé de relancer la liaisons, afin que mon client puisse passer à nouveau des appels, est d'exécuter la commande : asterisk -rx 'sip reload' (reload du service sip d'asterisk).

La liaison remonte instantanément et mon client peut passer des appels sans que le reste de la production ne soit affecté.

Dans les logs, quand la liaison tombe, je n'ai aucune info, par contre dès que le client essaie de passer des appels alors que la liaison est tombée, je reçois dans les logs un "WARNING .......".

Je voudrai scanner des logs avec, dès que le "Warning ......." apparaît, le commande "asterisk -rx 'sip reload'" qui s'exécute.

Lien vers le commentaire
Partager sur d’autres sites

#!/bin/sh
# la regexp à tester
REGEXP=^WARNING*
# le chemin complet vers le log
LOG_TO_WATCH=/chemin/vers/ton/fichier/log
# le nombre de lignes à regarder dans le fichier
NB_ROWS_TO_WATCH=10
# le délai entre 2 vérifs, 10s pour 10 secondes, 10m pour 10 minutes, etc
DELAI=10m

while [ "1" -eq "1" ]; do
   NB_WARN=`tail -$NB_ROWS_TO_WATCH $LOG_TO_WATCH | grep -E '$REGEXP' | wc -l`
   if [ "$NB_WARN" -ne "0" ]; then
       asterisk -rx 'sip reload'
   fi
   sleep $DELAI
done

Après, tu ajoutes le chemin vers le script dans le rc.local histoire qu'il soit lancé à chaque démarrage (avec ou sans le & à la fin, je sais plus), et tu devrais être tranquille.

Problème: si le log ne se remplit pas très régulièrement, tu risques de faire effectuer la commande en continu car le script lit les 10 dernières lignes du fichier. Inversement, s'il se remplit trop vite, ben le script risque de le rater.

Il faudra donc ajuster ce paramètre en fonction de ton log.

Enfin, j'ai testé le grep, mais pas la commande complète, donc je garantis pas le fonctionnement du script. A toi de le tester :francais:

Sinon, tu as pas moyen de faire instancier une connexion au serveur asterisk en ligne de commande (un genre de ping) ?

Ca permettrait de tester plus facilement qu'en surveillant le log :craint:

Lien vers le commentaire
Partager sur d’autres sites

  • 2 mois après...

Je ne sais pas si cela peut te servir, mais il est possible de superviser Asterisk grâce à Nagios en utilisant la suite de checks Nagisk. Nagios peut exécuter des actions automatiques en cas d'état indisponible, comme envoyer un mail ou déclencher un script (de relance, par exemple).

Lien vers le commentaire
Partager sur d’autres sites

utiliser incron

http://inotify.aiken.cz/?section=incron&page=doc〈=en

avec le fichier de conf dans ce genre :

/chemin/vers/ton/fichier.log IN_CLOSE_WRITE /bin/sh /chemin/vers/ton/script

le script sera du genre :

#!/bin/sh

if [ `tail -1 /chemin/vers/ton/fichier.log | grep ^WARNING | wc -l` -eq 1 ]
then
   asterisk -rx 'sip reload'
fi

A chaque fois qu'Asterisk ecrira dans le log, le script vérifiera que la derniere ligne du log ne contiennent pas WARNING. Faut esperer que le log n'est pas trop verbeux aussi :)

Par contre, ca suppose qu'Asterisk ecrive dans le log ligne par ligne et donc envoie l'evenement IN_CLOSE_WRITE, ligne par ligne. Sinon il faut faire un tail avec une fenetre de plusieurs lignes comme ce que propose Barth

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...