Je vous propose maintenant d’aller encore un peu plus loin dans l’exploitation de ce plugin. Pour ce faire, nous allons notamment utiliser check_http
comme un watchdog applicatif capable de vérifier le contenu des requêtes qu'il supervise. Puis nous apprendrons à configurer des seuils CRITICAL et WARNING, pour ajouter des seuils d’alerte aux variables à superviser (par exemple, le temps de réponse d’un site).
Utilisez check_http comme un watchdog applicatif
Vous vous souvenez de la page d’accueil (frame main.php
) du site d’administration de Nagios ?
Imaginez maintenant que vous souhaitez vous assurer que votre serveur Nagios est bien à la version 4.4.2 que nous utilisons pour ce cours. Vous remarquerez que la version de Nagios est affichée directement sur la frame principale main.php
:
Il serait intéressant de pouvoir demander au plugin check_http
de regarder si la requête HTTP contient bien ce numéro de version. Eh bien, cela est possible grâce à l’option -s :
-s, --string=STRING Chaîne de caractères attendue dans le contenu
Relancez votre sonde HTTP en indiquant le numéro de version du serveur Nagios dans l’option -s :
nagios@NagiosDebian:/usr/local/nagios/libexec$ ./check_http -H localhost -u /nagios/main.php -a nagiosadmin:pass -s "4.4.2"
Le résultat de cette commande devrait correspondre à :
HTTP OK: HTTP/1.1 200 OK - 8221 octets en 0,004 secondes de temps de réponse |time=0,003534s;;;0,000000 size=8221B;;;0
Pour valider définitivement cette option, relancez la sonde en faux positif, en cherchant une chaine que vous êtes sûr de ne pas trouver dans la réponse http, comme par exemple :
nagios@NagiosDebian:/usr/local/nagios/libexec$ ./check_http -H localhost -u /nagios/main.php -a nagiosadmin:pass -s "LinuxRules"
La sortie de cette commande doit ressembler à :
HTTP CRITICAL: HTTP/1.1 200 OK - string 'LinuxRules' not found on 'http://localhost:80/nagios/main.php' - 8221 octets en 0,002 secondes de temps de réponse |time=0,002236s;;;0,000000 size=8221B;;;0
Malgré le code de sortie 200 du serveur HTTP, vous pouvez vérifier le code de sortie du plugin avec la commande suivante :
nagios@NagiosDebian:/usr/local/nagios/libexec$ echo $?
2
Le plugin renvoie bien un résultat CRITICAL parce qu’il ne trouve pas la chaîne recherchée dans le résultat de la requête HTTP.
Vous pouvez désormais constituer une page spécifique sur vos applications rassemblant, par exemple, un certain nombre de résultats de tests unitaires (souvent nommés « pages Watchdog »). Vous pouvez aussi scanner ces pages avec le plugin check_http
à la recherche d’un résultat négatif (ou d’une syntaxe indiquant que l’un des résultats est négatif). Ainsi, vous vérifiez que le service HTTP répond et vous ajoutez de l’intelligence applicative à ce test.
Et vous pouvez aller très loin avec cette fonctionnalité. Par exemple, vous pouvez observer la fonction des options -r et -R :
-r, --regex, --ereg=STRING Search page for regex STRING -R, --eregi=STRING Search page for case-insensitive regex STRING
Maîtrisez la syntaxe des seuils Nagios
Dans cette section, nous allons nous pencher plus particulièrement sur l’aspect réseau des sondes utilisant check_http
.
Dans un premier temps, saisissez la syntaxe suivante dans un fichier/usr/local/nagios/share/pageTest.php
:
<?php $random=rand(50,500); for ($i=0;$i<$random;$i++) { echo "TEST DATA\n"; usleep($random); } ?>
L’objectif de cette page est de générer un contenu de taille aléatoire dans un temps de réponse aléatoire également, ces deux composantes étant comprises dans une fourchette minimale et maximale. Appelez cette page une première fois dans un navigateur offrant la fonctionnalité d’analyse réseau (Firefox, Chrome, Opera, etc.) :
Rafraîchissez la page. Vous constatez que la taille et le temps de génération de cette page varie.
Cette page étant sous l’arborescence Nagios, le plugin va devoir s’authentifier. Lancez maintenant votre plugin check_http
sur cette page avec la commande suivante :
nagios@NagiosDebian:/usr/local/nagios/libexec$ ./check_http -H localhost -u /nagios/pageTest.php -a nagiosadmin:pass
Le plugin va renvoyer un résultat qui devrait ressembler à :
HTTP OK: HTTP/1.1 200 OK - 5082 octets en 0,370 secondes de temps de réponse |time=0,369877s;;;0,000000 size=5082B;;;0
Vous pouvez déjà constater que le temps de réponse est une centaine de fois supérieur à celui de la page contenant la frame principale de l’interface d’administration. C’est exactement l’objectif recherché.
Le plugin check_http
offre justement la possibilité de rajouter des seuils WARNING et CRITICAL sur ce temps de réponse. Les seuils des plugins Nagios sont normalisés avec une syntaxe un peu particulière, qu’il est nécessaire d’appréhender.
Vous trouverez un résumé de cette syntaxe à cette adresse.
Comment lire ce tableau ? Rien de plus facile :
la première ligne indique qu’un chiffre simple (10) déclenchera l’alerte si le résultat du seuil est strictement inférieur à 0 et strictement supérieur à ce chiffre (10) ;
la seconde ligne indique qu’un chiffre suivi de deux points (10) déclenchera l’alerte si le résultat du seuil est strictement inférieur à ce chiffre (10), etc. Une autre façon de lire ce tableau est d’utiliser des commandes. Par exemple :
check_quelquechose -w 10 -c 20
renvoie CRITICAL si> 20, sinon WARNING si> 10check_quelquechose -w 10: -c 20
renvoie CRITICAL si> 20, sinon WARNING si< 10check_quelquechose -w 10:20
renvoie WARNING si< 10 ou> 20
Place à la pratique !
Le plugin check_http
offre deux options, -w et -c, permettant d’ajouter des seuils sur le temps de réponse :
-w, --warning=DOUBLE Temps de réponse résultant en un état d'avertissement (secondes) -c, --critical=DOUBLE Temps de réponse résultant en un état critique (secondes)
Tout d’abord, relancez votre plugin check_http
sur la page de génération de contenu aléatoire, en ajoutant un seuil WARNING si le temps de réponse est supérieur à 0,1 seconde :
nagios@NagiosDebian:/usr/local/nagios/libexec$ ./check_http -H localhost -u /nagios/pageTest.php -a nagiosadmin:pass -w 0,1
Avec un peu de chance, la génération de la page a effectivement mis plus de 0,1 seconde et vous obtenez ce genre de résultat :
HTTP WARNING: HTTP/1.1 200 OK - 3822 octets en 0,224 secondes de temps de réponse |time=0,223551s;0,200000;;0,000000 size=3822B;;;0
Ensuite, modifiez de nouveau votre sonde en ajoutant un seuil CRITICAL au-delà de 0,2 seconde :
nagios@NagiosDebian:/usr/local/nagios/libexec$ ./check_http -H localhost -u /nagios/pageTest.php -a nagiosadmin:pass -w 0,1 -c 0,2
Encore une fois, vous devriez obtenez un résultat comme :
HTTP CRITICAL: HTTP/1.1 200 OK - 4102 octets en 0,253 secondes de temps de réponse |time=0,253043s;0,100000;0,200000;0,000000 size=4102B;;;0
Observez maintenant la fonctionnalité rendue par l’option -m du plugin check_http
:
-m, --pagesize=INTEGER<:INTEGER> Minimum page size required (bytes) : Maximum page size required (bytes)
Il est tout à fait possible de cumuler plusieurs seuils d’alertes sur plusieurs options pour la même exécution de la sonde.
Par exemple, pour lancer la sonde en gardant les mêmes seuils et le même temps de réponse que précédemment, et ajouter une alerte si la taille de la page passe sous les 1 500 octets (soit 1 500 Bytes), exécutez la commande suivante :
nagios@NagiosDebian:/usr/local/nagios/libexec$ ./check_http -H localhost -u /nagios/pageTest.php -a nagiosadmin:pass -w 0,1 -c 0,2 -m 1500
Vous pourriez ainsi obtenir le résultat suivant :
HTTP WARNING: HTTP/1.1 200 OK - la taille de la page est trop petite (1452) - 1452 octets en 0,036 secondes de temps de réponse |time=0,035928s;0,100000;0,200000;0,000000 size=1452B;1500;0;0
En résumé
Et voilà, vous êtes maintenant capables de personnaliser vos sondes pour une supervision plus efficace et offrant plus de fonctionnalités.
Dans le prochain chapitre, je vous propose d'analyser plus en détails l'exécution du plugin check_http
ainsi que de créer une commande Nagios pour ce plugin adaptée à votre besoin.