Sections
Envoi de notifications (mails, sms, jabber) lors d'un problème détecté
Cette partie regroupe les méthodes de notifications utilisables par Nagios.
Notification par mail
Afin d'être notifié par mail d'un problème détecté par Nagios, il faut modifier le fichier contacts.cfg, puis ajouter son mail dans la partie:
define contact{ contact_name nagiosadmin ; Short name of user use generic-contact ; Inherit default values from generic-contact template (defined above) alias Nagios Admin ; Full name of user email VotreMail@VotreDomaine.fr ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ****** service_notification_commands notify-service-by-email host_notification_commands notify-host-by-email }
Notification par SMS
Si vous êtes abonné chez Free, l'opérateur propose l'envoi de SMS depuis une URL Web. Ceci permet de mettre en place une solution rapide et gratuite. L'envoi ne peut être fait que sur l'URL d'un abonné, mais dans le cadre d'une utilisation domestique, ceci répond parfaitement au besoin.
Pour être notifié par SMS, il faut ajouter deux entrées dans le fichier commands.cfg. Une première pour l'envoi de SMS lorsque l'on détecte un problème de supervision sur un service, la seconde lorsque l'on détecte un problème de supervision sur le serveur (qui ne répond plus, par exemple)
Ajout des lignes dans le fichier commands.cfg
# Notify Service problem by SMS define command{ command_name notify-service-by-sms command_line /yourpathto/send_sms.sh "Service Alert: $HOSTALIAS$/$SERVICEDESC$ nService State: $SERVICESTATE$ nDate/Time: $LONGDATETIME$" } # Notify Host problem by SMS define command{ command_name notify-host-by-sms command_line /yourpathto/send_sms.sh "Host Alert: $HOSTNAME$ State: $HOSTSTATE$ nDate/Time: $LONGDATETIME$" }
Création du script send_sms.sh
Une fois les lignes ajoutées, il faut créer le script send_sms.sh qui contient les lignes suivantes:
#!/bin/bash ### Send an SMS, using Free platform CURL=/usr/bin/curl URL=https://smsapi.free-mobile.fr/sendmsg PASS={EntrezICIVotreMotDePasseFree} USER={EntrezICIVotreIdentifiantFree} # Getting Text SMSData="$*" # Sending SMS $CURL -k -X POST "https://smsapi.free-mobile.fr/sendmsg?user=$USER&pass=$PASS&msg=$SMSData" ### End of script
Ajout de la méthode de notification dans les contacts
Il suffit maintenant de rajouter l'appel aux notifications depuis l'entrée contact du fichier contacts.cfg (vu en début de cet article):
service_notification_commands notify-service-by-email,notify-service-by-sms host_notification_commands notify-host-by-email,notify-host-by-sms
On relance Nagios, et les notifications arriveront désormais par SMS.
Notifications par Jabber
Pour recevoir des notifications par Jabber, les manipulations seront identiques à celles des SMS, c'est à dire qu'il faut déclarer les deux commandes dans le fichier commands.cfg, créer le script de notification, et ajouter la méthode de contact dans le fichier contacts.cfg
Ajout des lignes dans le fichier commands.cfg
# To notify problems by Jabber define command{ command_name host-notify-by-jabber command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$ \nState: $HOSTSTATE$\n Address: $HOSTADDRESS$\nInfo: $HOST OUTPU T$\n\nDate/Time: $LONGDATETIME$\n" | /yourpathto/nagios_notify_via_jabber.pl $CONTACTPAGER$ "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" } define command{ command_name notify-by-jabber command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$ \nState: $HOSTSTATE$\n Address: $HOSTADDRESS$\nInfo: $HOST OUTPU T$\n\nDate/Time: $LONGDATETIME$\n" | /yourpathto/nagios_notify_via_jabber.pl $CONTACTPAGER$ "** $NOTIFICATIONTYPE$ Service Alert: $SERVICEDESC$ on $HOSTNAME$ State: $SERVIC ESTATE$ Additional Info: $SERVICEOUTPUT$ **" }
Le script nagios_notify_via_jabber.pl
#!/usr/bin/perl -w # # script for nagios notify via Jabber / Google Talk Instant Messaging # using XMPP protocol and SASL PLAIN authentication. # # author: Andrew Elwell <A.Elwell@physics.gla.ac.uk> # based on work by Thus0 <Thus0@free.fr> and David Cox # # released under the terms of the GNU General Public License v2 # Copyright 2007 Andrew Elwell. use strict; use Net::XMPP; ## Configuration my $username = "nagios"; my $password = "VotreMotDePasseJabber"; my $resource = "nagios"; ## End of configuration my $len = scalar @ARGV; if ($len ne 2) { die "Usage...\n $0 [jabberid] [message]\n"; } my @field=split(/,/,$ARGV[0]); #------------------------------------ # Google Talk & Jabber parameters : my $hostname = 'AdresseIPDuServeurJabber'; my $port = 5222; my $componentname = 'DomaineDuServeurNagios'; my $connectiontype = 'tcpip'; my $tls = 0; #------------------------------------ my $Connection = new Net::XMPP::Client(); # Connect to talk.google.com my $status = $Connection->Connect( hostname => $hostname, port => $port, componentname => $componentname, connectiontype => $connectiontype, tls => $tls); if (!(defined($status))) { print "ERROR: XMPP connection failed.\n"; print " ($!)\n"; exit(0); } # Change hostname my $sid = $Connection->{SESSION}->{id}; $Connection->{STREAM}->{SIDS}->{$sid}->{hostname} = $componentname; # Authenticate my @result = $Connection->AuthSend( username => $username, password => $password, resource => $resource); if ($result[0] ne "ok") { print "ERROR: Authorization failed: $result[0] - $result[1]\n"; exit(0); } # Send messages foreach ( @field ) { $Connection->MessageSend( to => "$_\@$componentname", resource => $resource, subject => "Notification", type => "chat", body => $ARGV[1]); }
Ajout de la méthode de notification dans les contacts
Il suffit maintenant de rajouter l'appel aux notifications depuis l'entrée contact du fichier contacts.cfg (vu en début de cet article):
service_notification_commands notify-service-by-email,notify-service-by-jabber host_notification_commands notify-host-by-email,notify-host-by-jabber
On relance Nagios, et les notifications arriveront désormais par Jabber (XMPP).