Astuces de Webmaster

Tag: sms

Recevoir un e-mail ou SMS si votre serveur est down/tombé (plus de ping) – Debian

by Rom's on 09 mai 2011, under Architecture

Qui n’a pas eu son serveur down alors qu’il était chez IKEA… je viens de mettre en place un simple script qui me permettra de recevoir un e-mail ou un SMS en cas de problème.

Cela nécessite d’avoir deux serveurs, puisque l’un doit faire un « ping » sur l’autre qui doit répondre (« pong »). Appelons le serveur à tester Frodon et celui qui le teste Gandalf.

Sur Gandalf, créez un script sh :
touch /home/checkFrodon.sh
chown u+rwx /home/checkFrodon.sh

Editez ensuite checkFrodon.sh (apt-get install nano si nano n’est pas installé) :
nano /home/checkFrodon.sh

Mettez-y ceci :

ping -c 1 "monsiteatester.fr" > /dev/null 2>&1
if [ $? -eq 0 ] ; then
echo "=> running"
else
echo "=> not running"
mutt -s "[MONSITE] Ping monsisteatester.fr nok - serveur down ?" monemail@gmail.com < /home/checkFrodon.sh
fi

Testez le script en question :
/home/checkFrodon.sh
Cela vous affichera dans le shell suivant les cas "=> running" ou "=> not running". Et si ça vous affiche not running, ça vous enverra un e-mail contenant le contenu du script SHELL pour rappel.

Pour l'automatiser, il vous suffit de créer un cron faisant appel au script en question toutes les minutes, toutes les 5 minutes, toutes les heures, comme vous voulez.

Enjoy !

Surtout, si vous avez mieux, n'hésitez pas !

Oh, je parlais de SMS également, parce qu'il suffit dans la condition de faire appel grâce à la commande wget à la requête explicitée ici : http://api.orange.com/fr/api/sms-api/imprimer

wget http://run.orangeapi.com/sms/sendSMS.xml?id=[votre API Access Key]&from=[numéro court d'émission]&to=[numéro de téléphone]&content=[votre message à envoyer]&long_text=[activer ou non le SMS long]&max_sms=[nombre maximum de "parties" d'un SMS long]&ack=[activer ou non l'accusé de réception]

8,36€ le crédit de 1000 SMS... ça se regarde ! (Cf grille tarifaire Orange)

Bonus : si vous voulez tester qu'une chaine apparaît bien sur une page web (car auparavant, on ne teste que le ping, et un serveur ping même si le serveur web est tombé, il vaut donc mieux tester que le rendu Web se fait bien). Ici, on teste que l'identifiant Google Analytics existe bien dans le code source de la page, mais ça pourrait être autre chose :

cd /tmp/
rm -f /tmp/index.html*
wget monsite.fr
if [ "$(cat /tmp/index.html | grep "UA-XXXXXX-1" )" = "" ] ; then
mutt -s "[MONSITE] apache or mysql down ?" monadresse@gmail.com < /home/checkFrodon.sh
echo "monsite.fr web not running"
else
echo "monsite.fr web running"
fi

2 Comments :, , , , , , Lien Permanent

Monitoring SMS (script PHP) : mettre en place en 20 minutes un système de suivi efficace

by Rom's on 01 mai 2009, under Architecture, DSI

Voici le système que j’utilise aujourd’hui pour le suivi de mes serveurs dédiés. Il s’agit d’un système très simple composé des briques suivantes :
- Dernière version de PHPWatch (voir le site)
- API SMS – Bêta – By Orange (Accéder à l’API Manager – voir notamment le lien dans le menu de gauche API SMS)
- Quelques modifications sur le cron pour l’envoi d’e-mails.

De base, cela ne monitore que si les services Apache (si on regarde le port 80 / http) sont up ou down et non si les pages sont fonctionnelles (on ne verra pas les erreurs PHP mais on va pouvoir trouver des solutions pour cela.. bientôt)

Chaque SMS envoyé coûtera 10 centimes débités sur le compte. Soit le prix d’un SMS que vous envoyez avec n’importe quel mobile.

0. Allez sur l’interface API SMS d’Orange, inscrivez-vous, créditez votre compte de 10€ pour le test (cochez éventuellement la case renouvellement automatique) et dans l’onglet « key », notez bien votre clé API.
1. Mettez en ligne le script (cliquez ici pour télécharger) sur un serveur autre que celui que vous souhaitez monitorer et allez à son adresse en ajoutant /install/ à la fin et suivez les instructions (attention, il n’y a pas d’espaces de nom sur les tables…)
2. Allez dans la table « logs » et ajoutez une colonne « message ». Elle servira à reccueillir lors d’un problème un arrêté de l’e-mail envoyé. Cela peut toujours servir.
3. Ouvrez le fichier cron.php qui se trouve à la racine du répertoire PHPWatch et insérez le code suivant en lieu et place de l’existant :

<?php
// A qui on envoie des SMS en cas de problème ?
$contactsMonitoringSMS=Array(
‘RomainMobile’=>’33679241180′,
‘CollegueMobile’=>’336XXXXXX’,

);
// A qui on envoie un mail en cas de problème ? (en parallèle)
$contactsMonitoringEMAIL=Array(
‘RomainPerso’=>’monemail@gmail.com’
,’ServiceInformatique’=>’monemailpro@maboite.com’
);

define(‘PATH_TO’, ‘./’);
require_once(PATH_TO . ‘common.php’);

$all = ServiceChecker::getReport();

foreach($all as $monitors)
{
foreach($monitors as $monitor)
{
$monitor['derniereFoisOffline']=date(« d/m/Y H:i:s »,$monitor['last_offline']);
// print_r($monitor);
if(!$monitor['online'])
{
$message = $monitor['host'] . ‘ HORS LIGNE. NOTIFICATIONS ENVOYEES. (/!\\ PHASE DE TEST, A VOIR SI C FIABLE)’;
echo $message;

foreach($contactsMonitoringSMS as $prenom=>$numero) {
$phone_number = $numero;
$contactsEmail= »"; foreach($contactsMonitoringEMAIL as $prenom=>$email) $contactsEmail.= » [".$prenom."] « ;
$contactsSMS= »"; foreach($contactsMonitoringSMS as $prenom=>$numero) $contactsSMS.= » [".$prenom."] « ;

// attention, on coupe le message à 155 caractères
$sms=$monitor['host']. » HS – SMS : « .$contactsSMS. » – @ : « .$contactsEmail;
if(strlen($sms)>159) $sms=substr($sms,0,154).’[...]‘;
$text_message = urlencode($sms);
$api_access_key = ‘dexxxx5ac’; // Mettez votre clé API – disponible sur l’API Manager
$url = « http://sms.alpha.orange-api.net/sms/sendSMS.xml?id=$api_access_key&to=$phone_number&content=$text_message »;
$response = file_get_contents($url);
$xml = simplexml_load_string($response);
echo « Status: « ,$xml->status->status_msg;

}
foreach($contactsMonitoringEMAIL as $prenom=>$email) {
$to = $email;
$subject = $message;
ob_start();
echo $message;
echo « \nE-mails envoyes a :\n »;
print_r($contactsMonitoringEMAIL);
echo « \nSMS envoyes a :\n »;
print_r($contactsMonitoringSMS);
echo « \nDetails Erreur :\n »;
print_r($monitor);
$msg=ob_get_contents();
ob_end_clean();
$headers = ‘From: Roms Monitoring ‘. »\r\n »;
//$headers .= ‘Bcc: Moi ; lui ‘. »\r\n »;
$headers .= « \r\n »;
mail($to, $subject, $msg, $headers);
}
NotificationHandler::sendNotifications($monitor);
}

$requete=’INSERT INTO logs (monitor, timestamp, online, message) VALUES
(‘ . $monitor['id'] . ‘, ‘ . time() . ‘, ‘ . ($monitor['online'] ? 1 : 0) . ‘, \ ».addslashes($msg).’\')’;
$GLOBALS['PW_DB']->query($requete);
}
}
?>

4. Créez le cron qui va bien dans le crontab si vous avez un serveur dédié (autre que celui monitoré évidemment – en faisant un wget http://www.monsite.com/repertoirePHPWatch/cron.php).
Si vous avez un mutualisé chez OVH (type 60gp, 90plan,…), vous pouvez aller dans votre manager OVH, rubrique « Mutualisé » > « Hébergement » > Planificateur de tâches et créer une tâche qui lance le fichier cron.php chaque heure.
Si vous n’avez ni l’un ni l’autre, vous avez toujours WebCron.org ou ça..
Ou bien, si vous avez des amis qui ont un dédié, c’est le moment de les solliciter, c’est pas bien méchant un cron..
Réserves : attention, il s’agit d’une première version de développement, tous les composants sont en phase bêta. Vous aurez remarqué également que lorsqu’on dit dans le message envoyé « NOTIFICATIONS ENVOYEES », on n’a pas vérifié que c’était effectivement le cas… Par ailleurs, on peut imaginer monitorer l’état réel d’un script en jouant avec les entêtes renvoyées ou avec des contenus de la page. Pour l’instant, cette version me convient.

Tous retours d’expérience bienvenus pour compléter ce tutoriel.

Laisser un commentaire :, , , Lien Permanent

Vous cherchiez ?

Recherche rapide :

Vous ne trouvez toujours pas ? Laissez un petit commentaire sur un article, qu'on puisse regarder ça de plus près !