Christophe Nowicki

December 9, 2009

Notifications Nagios par Téléphone

J’ai configuré mon instance de Nagios pour recevoir une notification par téléphone en cas d’incident. (déclenchement d’une alarme ou d’un détecteur d’eau / fumée dans mon installation domotique).

Ce billet décrit comment mettre en place un système de la notification par téléphone avec Nagios.

Pré-requis

Vous avez besoin des composants suivants :

  • Une distribution Debian GNU/Linux ;
  • Une installation fonctionnelle de Nagios ;
  • Une PABX IP avec le support du protocole SIP, comme Asterisk ;
  • Un système de Synthèse vocale fonctionnelle, comme eSpeak + MBROLA ;
  • Un client SIP en ligne de commande comme PJSUA.

Installation

Le client SIP en ligne de commande PJSUA n’est pas disponible dans les paquets du projet Debian.
Il est donc nécessaire de l’installer manuellement à l’aide du classique : configure, make, make install.
La procédure est décrite dans ce billet : Un client SIP en ligne de commande.

Pour l’installation du système de synthèse vocale, vous pouvez vous référer à mon précèdent billet sur le sujet : Text-to-Speech avec eSpeak, MBROLA et Speech Dispatcher.

Configuration

Vous devez créer un compte SIP pour Nagios sur votre PABX et tester que l’enregistrement est fonctionnel.

Pour cela vous avez besoin d’un fichier de configuration spécifique à Nagios pour PJSUA, dans /etc/nagios/sip.cfg par exemple :

--id sip:nagios@pabx.csquad.lan
--registrar sip:pabx.csquad.lan
--realm *
--username nagios
--password secret

Vous pouvez ensuite tester l’enregistrement en ligne de commande :
$ pjsua --config-file /etc/nagios/sip.cfg
...
11:17:05.376 pjsua_acc.c sip:nagios@pabx.csquad.lan: registration success, status=200 (OK), will re-register in 300 seconds

Un appel de test :
$ pjsua --config-file /etc/nagios/sip.cfg --null-audio sip:secretariat@pabx.csquad.lan

Ensuite un appel de test audio avec un message :
$ espeak -v mb/mb-fr1 "E.T. téléphone maison" | /usr/local/bin/mbrola /usr/share/mbrola/fr1/fr1 - test.wav
$ pjsua --config-file /etc/nagios/sip.cfg --play-file=test.wav --auto-play --null-audio sip:secretariat@pabx.csquad.lan
$ rm -f test.wav

On met le tout dans un petit script expect pour prendre en charge la déconnections de manière polie :

#!/usr/bin/expect --
set timeout 45
set addr [lindex $argv 0]
set text [lindex $argv 1]
exec /usr/bin/espeak -v mb/mb-fr1 $text | /usr/local/bin/mbrola /usr/share/mbrola/fr1/fr1 - /tmp/phone-call.wav;
spawn /usr/local/bin/pjsua --app-log-level=3 --config-file /etc/nagios/sip.cfg --play-file /tmp/phone-call.wav --auto-play --null-audio --max-calls 1 sip:$addr
expect {
"DISCONNCTD" {
exit
}
timeout {
send "h\n"
exit
}
eof {
exit
}
}

Et voilà ;-)

Il ne nous reste plus qu’à configurer ce type de notification dans Nagios.
Pour cela, il faut modifier le fichier contacts.cfg :
# 'nagios-phone' contact definition
define contact{
contact_name nagios-phone
alias Nagios Admin via Phone
service_notification_period 24x7 ; mouahahahahahaha
host_notification_period 24x7 ; moiahahahahahahah
service_notification_options w,u,c,r
host_notification_options d,u,r
service_notification_commands notify-by-phone
host_notification_commands host-notify-by-phone
email sip:secretariat@pabx.csquad.lan
}

Puis le fichier misccommands.cfg :
# 'notify-by-phone' personnal command definition
define command{
command_name notify-by-phone
command_line /usr/local/bin/phone-call.sh $CONTACTEMAIL$ "$NOTIFICATIONTYPE$ alert - $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$"
}
# 'host-notify-by-phone' personnal command definition
define command{
command_name host-notify-by-phone
command_line /usr/local/bin/phone-call.sh $CONTACTEMAIL$ "Host $HOSTSTATE$ alert for $HOSTNAME$!"
}

Ensuite, vous pouvez définir nagios-phone comme un contact pour des services ou hosts.

Il faut aussi modifier la valeur de la variable notification_timeout dans le fichier de configuration nagios.cfg, pour avoir le temps de décrocher le téléphone et d’en tendre le message.

Conclusion

Vous n’avez plus aucune excuse pour ne pas brancher vos esclaves^Wéquipe d’administrateurs systèmes directement sur le système de surveillance de vos serveurs ;-)

Plus sérieusement, la notification par téléphone est une méthode très intrusive. Il est nécessaire de décrocher le téléphone. Il faut donc l’utiliser avec parcimonie.

Filed under: Debian,Network — Tags:, , , — cscm @ 20:39

2 responses to “Notifications Nagios par Téléphone”

  1. Jan says:

    Très intéressant …. merci pour ce billet !

  2. gdo says:

    Je viens de découvrir ton blog et je te remercie de partager ainsi touts tes travaux.

Powered by WordPress