Nagios: vérifier l’existence d’un fichier sur un site Web

Date: 15/11/2010 | Catégories: Gstreamer,Open-source,Planet-libre,Reseau,Web | Tags:

Il y a quelques jours je me suis rendu compte que lors d'une mise à jour de mon blog j'avais oublié de copier le fichier googlexxxxxxxxx.html à la racine de mon site. Ce fichier permet à Google de vérifier que le site est bien associé à mon compte Google Webmaster et au mécanisme de lecture d'un autre fichier important: sitemap.xml. En conséquence, mon site n'était plus référencé dans Google... C'est ici Google Analytics qui m'a servi de serveur de supervision vu que mon trafic a été divisé par 8 :).

Disposant d'un serveur de supervision Nagios pour mes tests, je me suis pencher sur le problème suivant: comment vérifier la présence d'un fichier précis sur un site Web en utilisant le protocole HTTP.

Il n'y a pas de plugin par défaut permettant d'effectuer cette action. Le seul qui se rapproche est check_http. Malheureusement ce dernier permet seulement de vérifier que le serveur Web est opérationnel mais ne fait aucune interprétation sur le contenu du site.

En cherchant un peu on tombe rapidement sur le plugin check_url. Ce dernier, écrit en Perl, utilise Wget pour récupérer le fichier cible et interprète le code d'erreur renvoyé par le serveur Web.

J'ai du un peu modifier le code pour le rendre compatible avec une installation ou le daemon Nagios tourne avec un utilisateur qui n'a pas de "home directory". Le script modifié est disponible ici.

On a les associations code d'erreur Nagios / code d'erreur HTTP suivantes:

OK = ("200");

WARN = ("400", "401", "403", "404", "408");

CRITICAL = ("500", "501", "502", "503", "504");

Pour installer le plugin, il faut le copier dans le répertoire /usr/local/nagios/libexec de votre serveur Nagios puis fixer les bons droits:

cd /usr/local/nagios/libexec

sudo wget https://raw.github.com/nicolargo/nagiosautoinstall/master/check_url.pl

sudo chown nagios:nagios /usr/local/nagios/libexec/check_url.pl

sudo chmod a+x /usr/local/nagios/libexec/check_url.pl

Enfin on configure un nouveau service dans le fichier commands.cfg:

# CheckURL

# $ARG1$: URL a tester (exemple: http://blog.nicolargo.com/sitemap.xml)

define command{

command_name check_url

command_line $USER1$/check_url.pl $ARG1$

}

Puis on définie le service associé au site/fichier à vérifier:

# Define a service to check URL

# http://blog.nicolargo.com/sitemap.xml

define service{

use generic-service

host_name monserveur

service_description URL Sitemap

check_command check_url!http://blog.nicolargo.com/sitemap.xml

}

Une fois Nagios relancé, une alerte sera automatiquement remontée si le fichier sitemap.xml n'est pas accessible !

Il est bien sur possible de faire autant d'alertes que de fichiers à vérifier.

Partager ce billet