Envois de notifications nagios par SMS avec free

Freesms propose un service de notification par SMS (envoi de SMS vers votre mobile free depuis le web), l’idée est de l’utiliser afin de recevoir les alertes nagios par SMS, plutôt (ou en plus) que par email.

Étape 1 : Activer l’option

Il suffit de vous connecter sur l’interface de gestion de votre compte freemobile et d’activer l’option « Notification par SMS » depuis « Gérer mon compte » -> « Mes options ».

N’oubliez pas de récupérer:
– votre identifiant free
– la clé d’identification au service.

free sms

Étape 2 : installation et adaptation du script de notification par SMS

Récupérez ensuite le script send-notification.sh (que j’ai sans vergogne repompé sur la version d’Anvil depuis github  et adaptez-le:

Renseignez les variables USER_LOGIN et API_KEY par votre identifiant freemobile et la clé fournie dans la page d’option, respectivement.

Étape 3 : Configurer nagios

Copiez le script dans un répertoire lisible par l’utilisateur nagios, et rendez le script exécutable par cet utilisateur.

Définissez 2 nouvelles commandes nagios:

define command{
  command_name notify-host-by-sms
  command_line /usr/bin/printf "%b\n" "Nagios $NOTIFICATIONTYPE$ Host: $HOSTNAME$ $HOSTSTATE$ Date/Time: $LONGDATETIME$" | /etc/nagios/Opendoor/Plugins/send-notification.sh
}
define command{
  command_name notify-service-by-sms
  command_line /usr/bin/printf "%b\n" "Nagios $NOTIFICATIONTYPE$ Service: $SERVICEDESC$ $SERVICESTATE on $HOSTALIAS$\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /etc/nagios/Opendoor/Plugins/send-notification.sh
}

Assurez-vous de terminer la chaîne envoyée par printf par un \n.

Adaptez le chemin vers le script send-notification.sh à votre configuration.

Modifiez la définition de votre contact ou groupe de contacts afin qu’ils soient notifiés par sms (personnellement, je conserve également la notification par email, mieux vaut trop que trop peu).

define contact{
 contact_name tconstans
 alias thomas
 service_notification_period 24x7
 host_notification_period 24x7
 service_notification_options w,u,c,r
 host_notification_options d,r
 service_notification_commands notify-service-by-sms,notify-service-by-email
 host_notification_commands notify-host-by-sms,notify-host-by-email
 email thomas@opendoor.fr
}

Relancez ensuite nagios après avoir vérifié la validité des modifications de configuration apportées:

nagios -v /etc/nagios/nagios.cfg && service nagios restart

Conclusion

Et voilà un système de notification un peu plus robuste qui fonctionnera même en cas de couverture réseau réduite (comme ça vous saurez que vos serveurs sont tombés, mais vous n’aurez peut-être pas la connectivité nécessaire pour intervenir).

La partie la plus délicate réside dans la mise au point des commandes notification-{host,service}-by-sms. Prenez garde aux typos dans le message envoyé par printf, qui peut provoquer un échec de l’envoi du SMS.

Si vous ne recevez rien, cherchez dans les logs la chaîne « nagios SMS notif » (grep SMS /var/log/messages). Le code de retour obtenu vous informera de la cause de la non émission.

12 pensées sur “Envois de notifications nagios par SMS avec free”

  1. Bonjour, j’ai essayé le tuto et j’arrive à envoyer des sms via centreon vers mon GSM mais le problème est que je reçois un sms vide ( pas d’objet) ….y a t il une solution à ça ??Merci

    1. Bonjour,

      Vous pouvez tester la commande de notification manuellement :

      printf "%b\n" "test" | /path/to/send-notification.sh

      Si vous recevez le sms, c’est un pb de syntaxe dans la définition des commandes notify-service-by-sms et notify-host-by-sms (notamment des guillements % manquantes ou en trop)

      1. Bonjour, oui je reçoi bien l’ SMS en ligne de commande mais avec Centreon je reçoi toujours un SMS vide :/….je ne sais pas mais est ce que ça peut etre un probleme de path?? parce que mon pluguin sous /usr/local/nagios/libexec et non pas sous /usr/bin?? si c’est le probleme comment je peux changer son emplacement …et merci

        1. C’est probablement un problème de syntaxe dans la définition de la commande (une guillement mal placée par ex)

  2. Salut,

    Déjà merci pour ce travail je l’utilise pourmon nagios et c’est top§
    Je fais un relevé d’info températures et envoie des alertes en fonctions de seuils.

    La sonde nagios remonte bien le symbole °, mais le sms que je reçois n’affiche pas le symbole

    J’ai déjà ajouté cette ligne pour la gestion des espaces :
    FINAL_MESSAGE_TO_SEND=${FINAL_MESSAGE_TO_SEND// /%20}

    J’ai donc tenté cette ligne :
    FINAL_MESSAGE_TO_SEND=${FINAL_MESSAGE_TO_SEND//°/\&deg\;}

    mais les sms ne partent pas…

    As-tu une idée de comment gérer ce symbole ?

    merci

    1. Bonjour

      Si tu fais un « echo foo° » | send-notification.sh en ligne de commande, tu reçois un sms correct ?

      1. La commande passe et le sms est ok.
        C’est uniquement les alertes automatiques nagios qui ont pas le bon format, comme si le $SERVICEOUTPUT$ était mal interprété juste pour ce caractère

        1. À ta place j’essaierai de capturer le message généré par nagios en rajoutant un « logger $FINAL_MESSAGE_TO_SEND » ou un echo « $FINAL_MESSAGE_TO_SEND » >> /tmp.log

          Ça sent le problème d’encodage.

          1. J’ai essayé de remplacer ° par °
            Nagios PROBLEM Service: Temperature du placard WARNING on Raspberry PI%0ADate/Time: 02-12-2015 16:43:02%0A%0ATemperature alerte FROID : 17.12°C%0A

            mais le sms s’arrête à la valeur de la température (ici 17.12)

          2. évidemment la page web a interprété $deg ; (sans espace)

            il faut donc lire :
            J’ai essayé de remplacer ° par &deg ; (sans espace entre deg et 😉

            et
            Nagios PROBLEM Service: Temperature du placard WARNING on Raspberry PI%0ADate/Time: 02-12-2015 16:43:02%0A%0ATemperature alerte FROID : 17.12&deg ;C%0A (sans espace entre deg et 😉

          3. Quand j’envoie « ° » en console via le script send-notification, je vois que la requète vers l’api free encode le caractère en « \302\260 », du coup il s’affiche bien sur le tel.

            Il faudrait que le script / la commande interne encode le caractère de cette manière.

            Mais là, je n’ai pas trop le temps ;p

  3. Le caractère est bien conservé :

    Nagios CUSTOM Service: Temperature WARNING on Raspberry PI%0ADate/Time: Wed Dec 2 14:57:17 CET 2015%0A%0ATemperature alerte FROID : 15°C%0A

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *