[Asterisk] Superviser son service
10/06/2018
Un service Asterisk qui tombe, ça peut arriver. C'est la panne et il faut le relancer.
Nous proposons un script shell qui s'occupe de vérifier à intervalle régulier l'état du service Asterisk. Si le service est DOWN, celui-ci est relancé et un e-mail d'alerte est envoyé.
Une première solution peut consister à s'assurer que le service soit bien lancé. Cela s'opère depuis la commande suivante :
Si le service Asterisk tourne, il nous est retourné quelque chose comme :
De notre expérience, cette vérification ne suffit pas : nous avons déjà rencontré des services Asterisk qui était lancé (service UP), mais qui était en défaut de fonctionnement (impossible de connecter à la console, impossible d'enregistrer un peer, etc.).
Pour cette raison, nous préférons utiliser la commande suivante qui a pour intérêt de se connecter à la console Asterisk :
Si le service Asterisk est démarré et pleinement fonctionnel, le message suivant est retourné :
Si le service est arrêté ou qu'il ne répond plus, nous recevrons le message suivant :
On crée un script shell qui vérifie si le service Asterisk est OK ou KO :
Ce script pose néanmoins deux problèmes :
On améliore donc tout ça...
On ajoute la possibilité que le message retourné puisse être autre chose que ceux prévus. On alerte par e-mail :
On automatise l'exécution de ce script
On édite le fichier /etc/crontab pour y ajouter les lignes suivantes :
Vous avez aimé cet article ? Vous cherchez un support professionnel ? Alors contactez-nous
Nous proposons un script shell qui s'occupe de vérifier à intervalle régulier l'état du service Asterisk. Si le service est DOWN, celui-ci est relancé et un e-mail d'alerte est envoyé.
Vérifier l'état du service
Une première solution peut consister à s'assurer que le service soit bien lancé. Cela s'opère depuis la commande suivante :
myserver# ps ax | grep 'asterisk
Si le service Asterisk tourne, il nous est retourné quelque chose comme :
12039 ? Ssl 7:13 /usr/sbin/asterisk
De notre expérience, cette vérification ne suffit pas : nous avons déjà rencontré des services Asterisk qui était lancé (service UP), mais qui était en défaut de fonctionnement (impossible de connecter à la console, impossible d'enregistrer un peer, etc.).
Pour cette raison, nous préférons utiliser la commande suivante qui a pour intérêt de se connecter à la console Asterisk :
asterisk -rx 'test'
Si le service Asterisk est démarré et pleinement fonctionnel, le message suivant est retourné :
No such command 'test' (type 'core show help test' for other possible commands)
Si le service est arrêté ou qu'il ne répond plus, nous recevrons le message suivant :
Unable to connect to remote asterisk (does /var/run/asterisk/asterisk.ctl exist?)
On script !
On crée un script shell qui vérifie si le service Asterisk est OK ou KO :
#!/bin/bash
#
# Commande Asterisk
testAsterisk=$(asterisk -rx 'test')
# On compte le nombre de caractères retournés
nombre=${#testAsterisk}
case $nombre in
81)
#Asterisk OUT, on le redémarre
/etc/init.d/asterisk restart
;;
79)
#Asterisk est OK
;;
esac
Ce script pose néanmoins deux problèmes :
- Que se passe-t-il si Asterisk retourne autre chose que l'un des deux messages prévus ?
- Il peut être intéressant d'être prévenu par e-mail !
On améliore donc tout ça...
Script final
On ajoute la possibilité que le message retourné puisse être autre chose que ceux prévus. On alerte par e-mail :
#!/bin/bash
#
# Fonctionnement :
# Vérification de l'état du service Asterisk - toutes les minutes (job cron)
# 1) Asterisk est KO : on redémarre et on envoie un e-mail au support
# 2) Asterisk est OK : on ne fait rien...
# 3) On ne sait pas : on envoie un e-mail au support
# Commande Asterisk
testAsterisk=$(asterisk -rx 'test')
# On compte le nombre de caractères retournés
nombre=${#testAsterisk}
case $nombre in
81)
#Asterisk OUT, on le redémarre
/etc/init.d/asterisk restart
SUBJECT="[URGENT] Serveur Asterisk KO"
EMAIL="support@example.com, john.doe@example.com, paul.smith@example.com"
EMAILMESSAGE="/tmp/emailmessage.txt"
echo "Le service Asterisk est KO" > $EMAILMESSAGE
echo "Il vient d'être redémarré automatiquement..." >> $EMAILMESSAGE
echo "Merci de vérifier !" >> $EMAILMESSAGE
echo "Bonne journée" >> $EMAILMESSAGE
echo "--" >> $EMAILMESSAGE
echo "La commande asterisk -rx 'test' a renvoyée le message suivant :" >> $EMAILMESSAGE
echo $testAsterisk >> $EMAILMESSAGE
mail -s "$SUBJECT" "$EMAIL" < $EMAILMESSAGE
;;
79)
#Asterisk est OK
;;
*)
#Retour inattendu
SUBJECT="Serveur Asterisk -> État inconnu"
EMAIL="support@example.com"
EMAILMESSAGE="/tmp/emailmessage.txt"
echo "L'état du service Asterisk n'est pas connu." > $EMAILMESSAGE
echo "La commande asterisk -rx 'test' a renvoyée le message suivant :" >> $EMAILMESSAGE
echo $testAsterisk >> $EMAILMESSAGE
echo "Bonne journée" >> $EMAILMESSAGE
mail -s "$SUBJECT" "$EMAIL" < $EMAILMESSAGE
;;
esac
On automatise l'exécution de ce script
On édite le fichier /etc/crontab pour y ajouter les lignes suivantes :
# Verifie que le service Asterisk soit bien OK - toutes les minutes * * * * * root /home/supervision/verifAsteriskStart.sh > /dev/null 2> /dev/null
Vous avez aimé cet article ? Vous cherchez un support professionnel ? Alors contactez-nous
3 commentaires
stephane Thomas - 17/09/2014 à 18:27:53
Merci très beaucoup pour cet exposé. Continuez.
super boulot! rien à dire
Mireille - 17/09/2014 à 18:28:33
On en veut davantage traité de cette manière. Sympa.
excellent travail
Monel - 08/06/2015 à 15:53:45
Peu au fait du sujet, je vérifie assez peu mes services donc merci pour ce script très ingénieux.
Flux RSS des commentaires de cet article
Les commentaires sont fermés pour cet article