Si vous avez un forfait Free (il est probablement proposé la même chose chez les autres FAI ?), vous avez accès à l’option Notification par SMS (gratuitement pour le moment) dans votre espace client.
Celui-ci permet de s’auto-envoyer un sms via une simple requête POST ou GET. Pour quoi faire ? Les usages sont multiples :
Me concernant, j’ai été intéressé par la troisième option : je gère plusieurs machines sans avoir nécessairement d’accès au réseau pour pouvoir les surveiller.
J’ai donc rédigé un script m’envoyant un sms pour m’avertir lors de la défaillance de certains services. Il est en bash, c’ets relativement compréhensible :
#!/bin/bash
# Script to send sms using Free API
# Example : monit notifications, backups, alerts...
## VARIABLES
CURL=/usr/bin/curl
URL=https://smsapi.free-mobile.fr/sendmsg
PASS=La_Clé_Fournie
USER=Login_Free
MESSAGE=""
TYPE=""
# FUNCTIONS
help() {
echo "=================================== Help :"
echo "sh sms.sh SERVER SERVICE_NAME [Parameter]"
echo "Send a sms using the following pattern :"
echo ""
echo "Server SERVER service SERVICE_NAME alert [: Parameter]."
echo ""
echo "The sms is sent to the phone number corresponding to the USER variable."
exit 1
}
test_params() {
if [ ! $1 = "" ] && [ ! $2 = "" ]
then
SERVER=$1
SERVICE_NAME=$2
if test -n $3
then
TYPE=$3
fi
else
help
exit 1
fi
}
main() {
test_params $1 $2 $3
if [ ! $TYPE = "" ]
then
MESSAGE="Server : $SERVER Alert $SERVICE_NAME : $TYPE"
else
MESSAGE="Server $SERVER Alert $SERVICE_NAME"
fi
$CURL -k -X POST "https://smsapi.free-mobile.fr/sendmsg?user=$USER&pass=$PASS&msg=$MESSAGE"
}
# MAIN PROG
main $*
exit 0
Le script prend donc deux paramètres obligatoires :
Un troisième paramètres est facultatif, et permet d’ajouter des précisions quant à la défaillance.
J’utilise une requête POST afin de ne pas avoir à me préoccuper du formatage du message.
Comme je le disais précédemment, mon intérêt est ici d’être averti en cas de défaillance d’un service sur une machine.
Sur chacune d’entre elles Monit est installé. Par conséquent, il suffit d’intégrer le script dans le monitrc de cette façon :
if failed unixsocket /var/run/php5-fpm.sock then exec "/bin/sh /etc/sms.sh main php-fpm.sock fail"
Ce qui aura donc comme effet d’envoyer un sms de la forme :
Server main service php-fpm.sock alert : fail
Il est alors aisé de l’adapter aux autres services selon vos besoins.
N’hésitez pas à partager vos propres implémentations et à m’envoyer vos suggestions :)