Surveillance par scénario comportemental avec Grandma

Comme tout bon sysadmin, la supervision de vos serveurs et services est pour vous primordiale.

Je ne ferais pas le tour des différentes solutions existantes, la plus réputée étant Nagios.

Nous allons nous focaliser sur la surveillance d’un service bien connu : un site web.

Dans la majorité des cas, les différents éléments que vous scrutez sont les charges du serveur, les différents process Apache, etc,  et bien sur, que le site Web retourne un beau code 200, tout va bien.

Mais si la page d’accueil est « défacée » , ou si un formulaire ne retourne pas la valeur escomptée, ce genre de problème reste transparent.

En lecteur assidu de ce blog, vous avez peut-être mis en place SEC ( http://blog.guiguiabloc.fr/index.php/2009/03/18/interception-des-erreurs-applicatives-dans-nagios-avec-sec-et-prelude-lml ) mais l’idéal serait  de pouvoir simuler les actions d’un utilisateur sur le site web par un scénario défini et de remonter une erreur dans Nagios en cas de comportement anormal.

Ce serait bien hein ?

Alors bien sûr, ce genre de produit existe dans le monde propriétaire (Newtest par exemple) mais en OpenSource, c’était plutôt rare.

Heureusement, mon pote Antoine, le Geek au « garage magique », nous offre une solution efficace : Grandma

Pour reprendre la présentation de l’application :

  • Grandma est une sonde robotisée, elle exécute à intervalles réguliers des scénarii permettant de simuler l’action d’un utilisateur sur une application. Chaque étape du scénario fait l’objet d’une vérification pour valider que la réponse de l’application est satisfaisante.
  • Grandma permet de simuler ces actions sur toute application web, 3270, OpenVMS et Unix (tout ce qui n’est pas client lourd en fait). Elle utilise pour cela les outils GNU : cUrl, c3270, Expect et est écrite en Bash.
  • Grandma prend en charge un calendrier et des profils de scénarii afin de gérer les plages de maintenance et adapter les contrôles aux plages d’activité des applications.
  • Grandma fait office de collecteur/ordonnanceur. Une fois les résultats (scénario terminé avec succès, temps d’exécution) récupérés, l’information est remontée vers Nagios à l’aide du client Nsca.

La classe non ?

Suffit les palabres, on se dérouille les doigts, on ferme tout ce qui pourrait nous déconcentrer (oui, oui, ça aussi…), et on se lance (« pas trop fort », oui je sais, elle est pourrie cette blague… (mais elle est quand même moins lourde que « lot du lac« …))

Je considère déjà que vous avez un Nagios actif et que vous savez configurer des remontées d’alertes par NSCA (sinon, un tour ICI )

Téléchargez les sources de Grandma et décompressez le tout dans /opt

Vous trouverez l’arborescence suivante:

/opt/grandma/arch : répertoire de stockage des archives des scénarios en erreur

/opt/grandma/cfg : répertoire de configuration

/opt/grandma/cfg/grandma.cfg : configuration générale de l’application

/opt/grandma/cfg/Grandma.cfg : configuration spécifique à chaque sonde

/opt/grandma/cfg/send_nsca*.cfg : configuration des envois d’informations vers Nagios

/opt/grandma/checks_available : répertoire de stockage des scénarios

/opt/grandma/checks_enabled : répertoire des scripts activés sur la sonde (lien symbolique vers available)

/opt/grandma/lib : répertoire des scripts communs de l’application

/opt/grandma/web : répertoire des fichiers web (interface d’administration de grandma)

Un « petit » tuto d’installation est disponible ici : http://code.google.com/p/grandma/wiki/HowtoInstallationGrandma

La première chose à faire est de créer un utilisateur spécifique  « grandma » puis de donner les droits sur /opt/grandma.

Ensuite, partie paramétrage :

serveur:# echo "export GRANDMAHOME=/opt/grandma" >> /etc/profile
 
serveur:/opt/grandma/lib# ln -s /opt/grandma/lib/grandma /etc/init.d/grandma
  • Vérifier les différents chemins dans le fichier /opt/grandma/cfg/Grandma.cfg

(par exemple /bin/basename qui sous Debian est /usr/bin/basename).

  • Définition du serveur Nagios : nscaserver= »nagios.guiguiabloc.fr »

Préparons notre premier scénario qui devra vérifier que le texte « Bienvenue sur GuiguiAbloc! » s’affiche sur la page d’accueil du blog.

Un scénario exemple et présent dans /opt/grandma/checks_available.

serveur:/opt/grandma/checks_available$ cat check_site_guiguiabloc
 
#!/bin/bash
#Copyright 2002,2010 - Antoine Theuret
# Affectation des variables et fonction communes
. /etc/profile
. $GRANDMAHOME/cfg/grandma.cfg
 
# Creation des repertoires temporaires et des timestamps
$GRANDMAHOME/lib/creation_rep_travail.sh ; if [ $? -ne 0 ]; then UNKNOWN "KO : Probleme lors de la creation des repertoires temporaires"; fi
 
# Bridage des scenarios en cas de surcharge de la sonde
$GRANDMAHOME/lib/controle_surcharge.sh ; if [ $? -ne 0 ]; then UNKNOWN "KO : La sonde $nomsonde est surchargee, l'execution des scenarios est bridee" ; fi
 
# Controle des plages horaires et jours d'execution
$GRANDMAHOME/lib/verif_heure_exception.sh FTN $1 ; if [ $? -eq 1 ]; then OKOUT "OK : pas de contrôle a faire sur cette periode"; fi
 
# Recuperation des mots de passe
source $GRANDMAHOME/lib/gestion_motdepasse.sh 123456 ; if [ $? -eq 3 ]; then UNKNOWN "KO : Probleme lors de la recuperation des mots de passe"; fi
 
# Test de la page d'accueil
$curl $curl_opts "http://blog.guiguiabloc.fr/" >; $tmpdir/page.html 2>&1
TESTRET ; COUNT "Bienvenue sur GuiguiAbloc!"
if [ "$count" -ne 1 ];then FATAL "KO : Pas de page d'accueil"; fi
 
OK "OK : Scenario Blog Guiguiabloc nominal"
 
serveur:/opt/grandma/checks_enabled$ ln -s ../checks_available/check_site_guiguiabloc check_site_guiguiabloc

Premier test :

serveur:/opt/grandma/checks_enabled$ ./check_site_guiguiabloc
OK : Scenario Blog Guiguiabloc nominal - Scenario execute en 1.236361391 s | ok=1.236361391

Changeons le texte sur la page et retestons :

serveur:/opt/grandma/checks_available$ ./check_site_guiguiabloc
KO : Pas de page d'accueil - Scenario execute en 1.076389951 s - <A href=http://dummy:8080/arch/check_site_guiguiabloc/20100323-155230 target=_blank>ERREUR> | ko=1.076389951

Deuxième test, on vérifie le moteur de recherche ainsi que le résultat obtenu :

# test du moteur de recherche
$curl $curl_opts "http://blog.guiguiabloc.fr/?s=tux+droid" > $tmpdir/page.html 2>&1
TESTRET ; COUNT "GuiguiAbloc search results: tux droid"
if [ "$count" -ne 1 ];then FATAL "KO : Impossible d'effectuer une recherche" ; fi
 
$curl $curl_opts "http://blog.guiguiabloc.fr/?s=tux+droid" > $tmpdir/page.html 2>&1
TESTRET ; COUNT "Les Geeks sont de grands enfants"
if [ "$count" -ne 3 ];then FATAL "KO : Retour résulat recherche incorrect" ; fi
 
serveur:/opt/grandma/checks_available$ ./check_site_guiguiabloc
OK : Scenario Blog Guiguiabloc nominal - Scenario execute en 2.043520474 s | ok=2.043520474

Les possibilités sont presque infinies, la phase la plus longue étant d’écrire les scénarios pour les rendre compatibles avec Curl.

Une fois tout en place, il ne vous reste qu’a lancer le démon Grandma sous root :

serveur:~# /opt/grandma/lib/grandma start
Lancement de grandma : [OK]

Dans Nagios, les traps Nsca  :

Mar 25 14:10:50 nagios: EXTERNAL COMMAND: PROCESS_SERVICE_CHECK_RESULT;Grandma;check_site_guiguiabloc;2;KO : Pas de page d'accueil - Scenario execute en 0.625854926 s - <A href=http://dummy:8080/arch/check_site_guiguiabloc/20100325-141051 target=_blank>ERREUR< | ko=0.625854926

Et cela vous donne un « zoli » service Nagios supplémentaire :

Il existe également une interface Web, facile à mettre en place, qui vous permettra d’un coup d’oeil d’avoir accès aux résultats des divers scénarios.

Bilan, un excellent outil composé de simples scripts shell qui semble basique,  mais redoutablement efficace pour aller plus loin dans la supervision de vos sites internet.

Amusez vous bien :-)

Ce billet a été posté dans linux, sécurité et taggé , . Bookmark ce permalink.

4 commentaires sur “Surveillance par scénario comportemental avec Grandma

  1. Petite précision du « papa » de « mémé » : l’outil miracle pour aider à la rédaction d’un scénario : « live http headers » sous FireFox :D

    Je crois que je vais devoir créer une nouvelle doc pour la rédaction des scénarios. A force d’avoir le nez dans le guidon j’ai « oublié » que c’est encore loin d’être intuitif …

    Au boulot Antoine :)

    Et merci bcp au « Geek au dessous d’évier » magique pour ce billet élogieux !

    Antoine

  2. Bonjour,

    Je souhaiterais utiliser grandma pour faire des TBF sur des appli 3270.

    Comment fait on ?

    Merci pour votre aide.