Nagios et la notification Twitter

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...

Vus : 400
Publié par Nicolargo : 402