GuiguiAbloc

Remontée d’alerte par SMS avec les API SFR

par guiguiabloc le 03.déc, 2009, sous architecture, geekerie, linux

Comme tout bon sysadmin qui se respecte, vous surveillez scrupuleusement vos serveurs, vos équipements ou que sais-je encore via des outils de monitoring divers et variés.

Votre infrastructure chérie est tellement scrutée que cela rendrais jalouse n’importe quelle jeune maman devant surveiller son bambin.

D’ailleurs, je me suis toujours demander pourquoi on ne passait pas les bébés sous Nagios…

Cela donnerait des résultats intéressants :

AH AH AH  :D  :D

Bref…

Les remontées d’alertes “critique” doivent pouvoir avertir en temps réel le sysadmin et comme vous le savez, c’est toujours quand on est loin de son écran que la panne intervient.

L’idéal étant de pouvoir ajouter aux diverses méthodes d’alertes (mails, alarme Nagios, etc…) l’envoi d’un SMS sur votre portable.

Si votre opérateur téléphonique est SFR, vous avez la première solution de vous créer une adresse mail en @sfr.fr.

En activant sur www.sfr.fr, rubrique Messagerie, l’alerte SMS, vous recevez un texto a chaque mail reçu sur cette BAL.

Il vous suffit donc de donner un Sujet de mail lié a l’alerte pour voir s’afficher succinctement sur votre téléphone l’alerte en question.

Le concept est intéressant, malheureusement, le SMS arrive assez aléatoirement, entre une dizaine de minutes à… plusieurs heures.

Forcément, côté remontée d’alerte en temps réel, on fait mieux…

La deuxième solution est beaucoup plus fun et plus efficace.

Je vous propose tout simplement d’utiliser les API de SFR et de contacter directement leur Webservice en SOAP, comme on peut le faire avec OVH.

Classe, non ?

Car chose que vous ne savez peut-être pas, mais les opérateurs téléphoniques proposent discrètement des kits des développement (SDK) permettant de communiquer avec leur infrastructure via la plupart du temps un webservice accessible depuis le nain ternet.

C’est le cas chez Orange  sur http://www.orangepartner.com/site/frfr/home/p_home.jsp et également chez SFR.

Client SFR, c’est donc chez eux que je vais utiliser  les API.

L’atelier de développement SFR, appelé RED, est accessible sur http://red.sfr.fr/dev-zone/index.php.

L’inscription est gratuite et vous donne accès aux téléchargements des SDK (Php, JAVA et PUB (Market Place SFR).

Egalement avec la mise a disposition des SDK, vous disposez d’un “compte” lié a une application  (le red101) qui vous crédite d’un nombre de points vous permettant de tester le service et vos développements (100 SMS pour le mois par exemple)

Les API disponibles sont nombreuses et franchement intéressantes (envoi et réception de SMS, de MMS, géolocalisation de portable, gestion d’évenement, utilisation de carnet d’adresses unifié, etc…)

D’ailleurs, certaines applications développées par la communauté mérite le coup d’oeil ;-)

Sachez également que vous avez la possiblité d’acheter des packs de jetons. Exemple pour une vingtaine d’euros vous avec 350 utilisations de l’API SMS ou 267 utilisations de l’API Loc.

Le solde offert est largement suffisant pour couvrir ce que nous voulons faire, une remontée d’alerte critique par SMS sur notre portable.

N’étant pas développeur, j’ai donc choisi forcément le kit PHP, langage qui s’adaptera parfaitement à mon niveau :-)

Les prérequis sur votre serveur sont le module soap et les librairies openssl

Sous Debian :

apt-get install php-soap openssl libssl0.9.8

Tout d’abord, téléchargement du SFR-Red_PHP_SDK_v1.1.

Avec le SDK, vous recevrez également par mail vos certificats SSL a utiliser avec l’API.

Première chose a faire, changer le mot de passe par défaut du certificat (fourni dans le mail) :

openssl rsa -des3 -in guiguiabloc.pem -out guiguiabloc.pem
Enter pass phrase for Guiguiabloc.pem:
writing RSA key
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:

L’arborescence se présente ainsi (j’ai copié mes certificats dans le répertoire pour des raisons de facilité) :

docs/      config.php    examples/  wsdl/     Guiguiabloc.crt  Guiguiabloc.p12  lib/
config.php   Guiguiabloc.jks  Guiguiabloc.pem

On renseigne le fichier config.php

<?php
/**** Configuration ****/
//Emplacement de la racine du WebService
$red_ws_root_endpoint = "https://ws.red.sfr.fr/red-ws/";
//Authentification HTTPS Certificat
$red_partner_cert_filepath = "/opt/sfr/Guiguiabloc.pem";
$red_partner_cert_password = "lemotdepaseSSL";
//Authentification Basic Auth
$red_partner_name = "Guiguiabloc";
$red_service_name = "red101";
$red_service_password = "lemotdepassequivousaetecommunique";
?>

Et c’est tout :-D

A vous maintenant d’écrire le script PHP utilisant la méthode SendSMS par exemple :

alerte-sms_bascule-IpFO.php
<?php
//Chargement de la configuration RED
include("/opt/sfr/lib/sfr_red_sdk.v1.1.php");
$REDClientSMS = new SMSService();
$retour = $REDClientSMS->sendSMS(new
UserIdentifier("0612345678","PhoneNumber"),"ALERTE Bascule IPFailOver");
?>

On appelle le script : php alerte-sms_bascule-IpFO.php

et hop; magique, un SMS du  6011 :-D :-D

Si vous utilisez heartbeat pour vos bascules d’IP FailOver (suite à la lecture de cet excellent billet ), il vous suffit de rajouter l’appel a ce script dans /etc/ha.d/ressource.d/IPaddrFO.

case $2 in
  start)        /etc/ha.d/ns11111-failoverupdate.py
                php /opt/sfr/alerte-sms_bascule-IpFO.php
                ip_start $1;;
  stop)         ip_stop $1;;
  status)       ip_status $1;;
  monitor)      ip_monitor $1;;
  *)            usage
                exit 1
                ;;
esac

Côté Nagios, je suppose que vous gérez déjà les niveaux d’escalades (lire cet excellent Wifi : http://wiki.nagios-fr.org/nagios/objects-reference )

Nagios envoi un mail à la BAL d’escalade et vous executer le script a réception de mail :

dans /etc/aliases

nagiossms: "|php /opt/sfr/alerte-nagios.php"

(par exemple hein, je vous laisse à votre imagination débordante :-D )

Voilà donc une solution simple pour remonter vos alertes en temps réels, que ce soit vos états critiques Nagios, vos bascules d’IP failover ou la coupure EDF sur votre Onduleur :-)

Amusez-vous bien :-D

:, , ,
19 commentaires pour ce billet:
  1. sytrace68

    Bonjour,

    Pas mal le post.

    Juste si tu perd l’accès internet plus de SMS ;-(

  2. guiguiabloc

    lol, si ton serveur perd l’accès internet, en même temps, tout les services sont down…
    Si perd ton accès internet, tu n’as plus de nagios non plus…

  3. fixmybano

    ouais pas mal l’article.
    Je suis actuellement chez orange et nagios m’envoie un mail à mon_num_de_portable@orange.fr et orange m’envoie dans des délais pour le moment acceptable un SMS avec, et c’est important, juste le sujet du mail. A moi de construire les sujets des mails pour que le SMS contienne l’info importante (pour nagios pas de probleme, c’est le nom du serveur, puis le service et l’info sur l’état).
    Bref je vais résilier mon abo et j’hésite à aller voir ailleurs précisement à cause de ca (le sujet du mail est le contenu du SMS) car dans ton cas j’ai l’impression que c’est toi qui construit le SMS et tu dois donc créer un texte pour chaque alerte (dans ton exemple: “Bascule Extranet”). A partir d’un certains nombre de serveur ca devient vite fastidieux..

  4. guiguiabloc

    je construit mes sujets sms a partir de template en expect tout con avec nagios, ca me prend, allez 2 secondes pour 1000 serveurs…

  5. Benzin

    Bonjour moi j’ai un problème quand je fais openssl il me renvoi une erreur :
    “Error opening Privat Key”
    Peut tu m’aider?

  6. guiguiabloc

    la réponse est dans le message d’erreur…
    vérifier les droits, le chemin, etc…

  7. Benzin

    Est-il possible de faire la même chose en perl?

  8. guiguiabloc

    “L’inscription est gratuite et vous donne accès aux téléchargements des SDK (Php, JAVA et PUB (Market Place SFR).”

    Nativement non, comme dit dans ce billet.

    Après rien n’empeche d’interfacer du perl avec un des SDK (java ou php)

  9. Benzin

    A ton avis c’est dur ou pas ?

  10. atlas95

    Bonjour guigui, merci pour tes super tuto, dis moi, j’ai une erreur lorsque je tente de faire l’envoi du sms, as tu eu cette erreur, as tu une idée pour m’aider …, je tourne sous une lenny.

    Fatal error: Uncaught SoapFault exception: [HTTP] Could not connect to host in /opt/sfr/lib/sfr_red_sdk.v1.1.php:889
    Stack trace:
    #0 [internal function]: SoapClient->__doRequest(’__call(’sendSMS’, Array)
    #2 /opt/sfr/lib/sfr_red_sdk.v1.1.php(889): RedSoapClient->sendSMS(Array)
    #3 /opt/sfr/alerte-sms_bascule-IpFO.php(5): SMSService->sendSMS(Object(UserIdentifier), ‘ALERTE Bascule …’)
    #4 {main}
    thrown in /opt/sfr/lib/sfr_red_sdk.v1.1.php on line 889

  11. guiguiabloc

    Je suis sous Lenny et je n’ai pas d’erreur de ce genre.
    Ton service est activé chez RedSfr ?

  12. atlas95

    Comment dois-je l’activé ? Je le vois dans mes services, j’ai quelquechose en plus a faire ?

  13. atlas95

    J’ai bien ça dans la gestion des jetons:
    Solde de mes services :
    Nom : red101 - Jetons : 7500

  14. guiguiabloc

    Donc c’est OK.
    Probleme au niveau du fichier de configuration peut-etre (config.php)

  15. atlas95

    Bah je ne vois pas où je me serais gourer .. :/
    As tu du toi aussi faire un dos2unix sur le fichier config par contre ?

  16. guiguiabloc

    Je ne m’en rappelle pas mais bon, je fais toujours un sed dans Vi quand j’ai des ctrlM par défaut.

  17. atlas95

    Wai enfin ca change rien, le probleme ne vient pas de là, mes login / pass sont bon, pass de la clé égalament, le chemin de la clé aussi, je vois pas

  18. guiguiabloc

    le certificat aussi ? J’ai jamais eu ce genre d’erreur depuis que j’utilise les api

Laisser un Commentaire

Vous cherchez quelque chose ?

Utilisez le formulaire ci-dessous:

Vous ne trouvez pas ce que vous voulez ? Laisser un Commentaire sur un Billet !

Special Copinage!

Quelques sites amis ou recommandés...