Speak English? Click here to read my English blog!

Monitoring de site avec alerte mail et SMS

Posté par le 31 mai 2009 dans PHP19 commentaires
Protected by Copyscape Duplicate Content Check
 

En cette période de longs week-end il est toujours intéressant d'être alerté automatiquement en cas de soucis sur son ou ses sites.

Voici un code PHP pour surveiller que son site web répond (monitoring de site).

Il pourra ainsi détecter si le site ne répond pas ou si la page d'accueil contient bien le mot clé indiqué. C'est toujours utile de vérifier le contenu, dans le cas par exemple où on se fait hacker et que le hacker met juste sa signature en page d'accueil, ou plus classique le site web répond mais affiche juste un message d'erreur.

Ce programme de monitoring de site doit être placé sur un autre serveur que le site à surveiller afin justement de ne pas risquer d'être down en même temps. Un hébergement php gratuit fera très bien l'affaire.

En cas de problème ce monitoring de site envoie un mail ou une alerte SMS.

On crée une page PHP et on y met son include de connexion à la base de données.

La première chose à écrire est la fonction de monitoring de site (surveillance).

On regarde si le site (host) répond et si on a bien la chaine de caractères désirée (find).
Retourne True si tout est ok, sinon retourne False.

function check($host, $find) {
 $fp = fsockopen($host, 80, $errno, $errstr, 10);
 if (!$fp) {
  echo "$errstr ($errno)\n";
 } else {
  $header = "GET / HTTP/1.1\r\n";
  $header .= "Host: $host\r\n";
  $header .= "Connection: close\r\n\r\n";
  fputs($fp, $header);
  while (!feof($fp)) {
   $str .= fgets($fp, 1024);
  }
  fclose($fp);
  return (strpos($str, $find) !== false);
 }
}

On va maintenant écrire la fonction qui envoie le mail d'alerte et le SMS.
On utilise ici le service d'envoi de sms : smsbox.fr.

function alert($host) {
 global $ConnString2;
 $conn = mysql_connect($ConnString2['ip'],$ConnString2['uid'],$ConnString2['pwd']) or die('impossible de se connecter');
 mysql_select_db($ConnString2['db'], $conn) or die('erreur bdd'); 

 // on purge la table des vieux enregistrements
 $sql = 'delete from monitoring where date_add(date, interval 12 hour) < NOW()';
 mysql_query($sql) or erreurbdd (mysql_error(),$sql);

 // on historise l'alerte
 $sql = 'insert into monitoring (host, date) values (\''.$host.'\', now())';
 mysql_query($sql) or erreurbdd (mysql_error(),$sql);

 // on compte le nombre d'échecs
 $sql = 'select count(*) as tot from monitoring where host=\''.$host.'\'';
 $rs = mysql_query($sql) or erreurbdd (mysql_error(),$sql);
 $row = mysql_fetch_array($rs);

 // on envoi le sms au deuxième échec
 if ($row['tot'] == 2) {
  mail('monmail@gmail.com', 'Monitoring', $host.' down');
  mail('sms@smsbox.fr', 'login=****&pass=****&dest=**********&mode=Expert&notif=1', $host.' down');
 }
 mysql_close();
}

C'est presque terminé il faut juste écrire les appels du monitoring :

$host = 'www.lyxia.org';
$find = 'Theme par JBJ';
if (!check($host, $find)) alert($host);

Et dans la base de données on crée la table monitoring

CREATE TABLE `monitoring` (
  `host` varchar(25) NOT NULL,
  `date` datetime NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1

Voilà on peut partir en week-end rassuré, on sera alerté en cas de soucis, et il suffira d'agir en conséquence : appel à l'hébergeur, reboot du serveur etc.


Autres articles dans la catégorie PHP



19 commentaires

» Flux RSS des commentaires
  1. Très pratique, mais limité, car il faut un autre serveur… Ce que tout le monde n’a pas.

  2. Je découvre a travers ton poste smsbox.
    Je m’en servirai pour d’autres appli je pense.

  3. à noter que smsbox propose une API simple d’utilisation, je n’en ai pas parlé dans cet article car ce n’est pas son but. Si certains veulent mettre en place un site/plateforme d’envoi de SMS gratuits (rémunérés par la pub) il y a moyen de faire quelques chose rapidement ;-)

  4. il y a un service gratuit qui peut faire ça ici : http://mail2sms.fr.nf/fr/help.php

  5. Salut,
    tu as testé ? ca fonctionne ? c’est vraiment gratuit ? l’envoi de sms est immédiat ou il y a un temps d’attente ?

  6. J’ai testé, c’est vraiment gratuit, le sms arrive en moins 5 minutes.

  7. Très intéressant comme solution, et surtout très simple par rapport à des solutions gratuites que l’on peut trouver sur le net (qui sont le plus souvent des machine à gaz).

  8. Bonjour,
    Merci pour ce billet, je ne connaissais pas non plus smsbox.

    Est-ce que vous ne connaitriez pas un service en ligne qui propose ce genre de service ? Pour monitorer mes sites, j’utilise ozmonitor qui est sensé proposer l’alerte par SMS, mais qui visiblement n’a jamais fini d’implémenter ce service… J’aimerais bien ne pas avoir à louer un nouveau serveur juste pour le monitoring…

  9. On peut très bien mettre ce petit script sur un hébergement php gratuit.

  10. Mais comment se lance la fonction? Il faut bien appeler tout ça quelque part?
    Merci d’avance pour ta réponse!

  11. Bonjour, on planifie l’appel de la page PHP toutes les x minutes. On peut par exemple le faire par un cron job sous linux, ou un cron en ligne gratuit, faire une recherche sur Google sur « cron en ligne » pour en trouver.

  12. Ok, merci =). Je pensais bien au cron, mais vu que les hébergements gratuits ne proposent pas les taches cron, je comprenais pas. Et je savais pas qu’il existait des sites de « cron gratuit ».

    Merci du renseignement!

  13. J’ai du mal a croire que l’envoi de sms soit gratuit ?? ya vraiment rien a payer, il y a forcement une limite dans le nombre quand même?

  14. Salut,

    Mon site est maintenant fonctionnel et c’est un peu grâce à toi, j’ai donc rajouté ton lien dans mes favoris.
    Merci encore pour tes trucs et astuces.

    Bonne Année

  15. Post intéressant mais il faut une plateforme d’envoi SMS.
    Quelle plateforme conseillez-vous ?

    Personnellement, je préfère utiliser le Google Agenda avec RDV et rappel par SMS, en plus c’est gratuit.

    Romain

  16. [...] également souscrire à l’un des services gratuits de monitoring sur internet ou développer votre service de monitoring avec alerte mail et [...]

  17. Tiens on croirait pas que ce genre de service pour son site est à la portée de tout le monde de cette façon, va falloir que je me penche dessus pour le lancement d’un site que je suis sur le point de faire ^^ merci pour les infos

  18. Très interessant comme solution! Quelqu’un a trouver un « cron en ligne gratuit »?

  19. C’est une bonne idée que de ne pas envoyer au premier échec mais d’attendre le second. Cela évite de manger son quota de SMS sur les fausses alertes.