Nagios et la notification Twitter

Publié le 18 mai 2009 par Nicolargo

Twitter est un formidable outil de veille pour les geeks que nous sommes. Nous allons dans ce billet voir comment configurer Nagios (l'outil de supervision open-source) pour envoyer des alertes sur un compte Twitter. Il annule et remplace l'ancien billet que j'avais écris sur le sujet.

Avant de commencer

Je vous conseille fortement de créer un compte Twitter dédié à ce besoin. C'est sur ce dernier que les alertes seront envoyé. Il suffira ensuite aux administateurs de suivre (follow) ce compte Twitter pour être informé au plus vite des anomalies survenues sur le réseau.

Pour créer notre compte Twitter special Nagios, on va à l'adresse suivante:

Il faut bien retenir votre "username" (nagiosnicolargo dans mon cas) et "password".

Il faut ensuite se rendre dans les "Settings" et cliquer sur le bouton "Protect my updates" pour forcer l'approbation des utilisateurs qui vont pouvoir suivre ce compte Twitter. Quand un des administrateurs fera une demande pour suivre ce compte Twitter, il faudra l'approuver:

Configuration du serveur Nagios

Maintenant que le compte Twitter est opérationnel, il faut configurer le serveur Nagios pour qu'il puisse y envoyer ces alertes. Pour envoyer les messages sur le compte Twitter nous allons utiliser la commande Curl avec la syntaxe suivante:

curl --connect-timeout 30 --max-time 60 -u nagiosnicolargo:monpw -d status="Petit test depuis de Twist depuis Curl" http://twitter.com/statuses/update.xml

Si Curl n'est pas présent sur votre système, il faut l'installer (exemple pour un système Ubuntu):

sudo apt-get install curl

Passons maintenant aux fichiers de configuration de Nagios. Je pars sur le principe que vous avez un serveur Nagios en état de marche (en clair que vous avez suivi à la lettre les tutos PART 1 - Installation de Linux et des pré-requis système et PART 2 - Installation et configuration de Nagios 3). On commence par ajouter la commande twitit qui va permettre d'envoyer un message à notre compte Twitter via Curl:

# vi /usr/local/nagios/etc/objects/commands.cfg
define command{
   command_name   notify-host-by-twitter
   command_line   /usr/bin/curl --connect-timeout 30 --max-time 60 -u nagiosnicolargo:monpw -d status="$HOSTNAME$ is $HOSTSTATE$" http://twitter.com/statuses/update.xml
   }
define command{
   command_name   notify-service-by-twitter
   command_line   /usr/bin/curl --connect-timeout 30 --max-time 60 -u nagiosnicolargo:monpw -d status="$SERVICEDESC$@$HOSTNAME$ is $SERVICESTATE$ ** $SERVICEOUTPUT$" http://twitter.com/statuses/update.xml
   }

Ensuite on défini le contact (ou le groupe à vous de voir):

# vi /usr/local/nagios/etc/objects/templates.cfg
define contact{
   name  nicolargoadmin
   alias Admin Nicolargo
   service_notification_period   24x7  
   host_notification_period   24x7  
   service_notification_options   w,u,c,r,f,s  
   host_notification_options   d,u,r,f,s  
   service_notification_commands   notify-service-by-twitter
host_notification_commands   notify-host-by-twitter
   }

Puis enfin on associe le contact avec le service à surveiller (par exemple que mon serveur Web tourne bien...):

define host{
   use   linux-host
   host_name   iwebwebserveur
   alias   Serveur WEB iWeb
   address   blog.nicolargo.com
   parents   monrouteur
   hostgroups   prj-perso
   contacts   nicolargoadmin
   }
define service{
   use   generic-service
   host_name   iwebwebserveur
   service_description   HTTP
   check_command   check_http
   contacts   nicolargoadmin
}

Et voili...