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

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

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

 

Et c’est tout 😀

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

alerte-sms_bascule-IpFO.php
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 😀 😀

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 😀 )

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 😀

Ce billet a été posté dans architecture, geekerie, linux et taggé , , , . Bookmark ce permalink.

27 commentaires sur “Remontée d’alerte par SMS avec les API SFR

  1. Bonjour,

    Pas mal le post.

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

  2. 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. 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. 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. 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. la réponse est dans le message d’erreur…
    vérifier les droits, le chemin, etc…

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

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

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

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

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

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

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

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

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

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

  17. Salut et merci beaucoup pour ton tuto, vraiment efficace.
    J’ai un soucis malgré tout, lorsque je charge une page utilisant le toolkit, j’ai systématiquement une erreur :

    Erreur lors de l’accès SMS.GetVersion : SOAP-ERROR: Parsing WSDL: Couldn’t load from ‘http://ws.red.sfr.fr:80/red-ws/SMSService-v1?wsdl=2’ : Extra content at the end of the document

    Voici mon config.php
    //Proxy (optionnel)
    $red_ws_proxy_host = «  »;
    $red_ws_proxy_port = 80;
    $red_ws_proxy_login = «  »;
    $red_ws_proxy_password = «  »;

    //Emplacement de la racine du WebService
    $red_ws_root_endpoint = « https://ws.red.sfr.fr/red-ws/ »;

    //Localisation des wsdls (optionnel)
    //$red_ws_wsdl_dir = « /ABSOLUTE_PATH//wsdl »;

    //Authentification HTTPS Certificat
    $red_partner_cert_filepath = « C:\…\…\…\certif\monnom.pem »;
    $red_partner_cert_password = « monpassssl »;

    //Authentification Basic Auth
    $red_partner_name = « monnom »;
    $red_service_name = « red101 »;
    $red_service_password = « monpass »;

    Je suis sur easyphp ..?

    Merci par avance.
    Julien

  18. j’ai du mal a comprendre pourquoi tu génère une erreur de type « http://ws.red.sfr.fr:80/red-ws/SMSService-v1?wsdl=2 » alors que l’url soap est https://ws.red.sfr.fr/red-ws

    Maintenant, red101 étant un service de démo, je te conseille au plus vite créer ton propre service (chez redsfr) car j’ai eu aussi des bugs avec red101…

  19. Merci pour ta réponse, je comprends pas moi non plus très bien le fonctionnement et je n’ai pas de retour de leur part …
    Je vais à présent suivre ton conseil et créer mon propre service.

  20. Bonjour,
    je viens d’implémenter l’api SFR, et j’ai crée mon propre service sur mon compte dev. Malheureusement, ce service n’est pas activé et je ne vois pas comment l’activer !! Si vous avez une idée ???

    Merci
    Jerome

  21. Il faut envoyer un email a l’équipe (support.red[chez]sfr.com) en demandant d’activer le service.

  22. Moi ce qui m’etonne c’est de passer par des API d’operateurs. Nous nous plaignons toujours du manque de concurrence en France chez les operateurs mobiles, donc ce n’est pas a la peine de renforcer ceci, surtout quand des fournisseurs de services sont tres bons et surtout beaucoup moins chers :). Nous utilisons http://www.redoxygen.fr et leur API SMS est sur http://redoxygen.fr/micro_sites/red_api/ il y a bien sur d’autres fournisseurs de services, ca ne manque pas, mais nous avons un bon service chez red oxygen. Cdt

  23. euh moins cher ?.. a gros volume sûrement, a comparaison, pour 89 euros chez SFR le sms me coute 0,068 et je peux en envoyer 1311 contre 0,070 pour 70 euros chez Redoxygen, et j’ai le droit a 1000 sms.
    Au dessus oui, ca peut devenir intéressant.
    Maintenant l’atelier SFR te donne tes sms gratuits tout les ans… (je n’ai pas acheter 1 seul pack depuis 3 ans avec tout les cadeaux qu’il donne :p).
    Mais effectivement, cela semble une très bonne offre que je ne connaissais pas, merci pour ton lien.

  24. Hey,

    Je viens enfin de reussir l’envoi avec l’api de sfr, mais en HTTP et non en HTTPS;

    Je pense qu’il y a un probleme avec SOAP et HTTPs mais je ne trouve pas comment le corriger.

    Sinon j’ai essayer redoxygen suite au commentaire de Hervé, ca marche très bien.

    Reste à voir si je me décide a jeter des tunes la dedans.