{"id":613,"date":"2010-03-25T14:40:34","date_gmt":"2010-03-25T13:40:34","guid":{"rendered":"http:\/\/blog.guiguiabloc.fr\/?p=613"},"modified":"2010-03-25T14:40:34","modified_gmt":"2010-03-25T13:40:34","slug":"surveillance-par-scenario-comportemental-avec-grandma","status":"publish","type":"post","link":"http:\/\/blog.guiguiabloc.fr\/index.php\/2010\/03\/25\/surveillance-par-scenario-comportemental-avec-grandma\/","title":{"rendered":"Surveillance par sc\u00e9nario comportemental avec Grandma"},"content":{"rendered":"<p>Comme tout bon sysadmin, la supervision de vos serveurs et services est pour vous primordiale.<\/p>\n<p>Je ne ferais pas le tour des diff\u00e9rentes solutions existantes, la plus r\u00e9put\u00e9e \u00e9tant Nagios.<\/p>\n<p>Nous allons nous focaliser sur la surveillance d&rsquo;un service bien connu : un site web.<\/p>\n<p>Dans la majorit\u00e9 des cas, les diff\u00e9rents \u00e9l\u00e9ments que vous scrutez sont les charges du serveur, les diff\u00e9rents process Apache, etc,\u00a0 et bien sur, que le site Web retourne un beau code 200, tout va bien.<\/p>\n<p>Mais si la page d&rsquo;accueil est \u00ab\u00a0<a title=\"http:\/\/fr.wikipedia.org\/wiki\/D%C3%A9facement\" href=\"http:\/\/fr.wikipedia.org\/wiki\/D%C3%A9facement\" target=\"_blank\">d\u00e9fac\u00e9e<\/a>\u00a0\u00bb , ou si un formulaire ne retourne pas la valeur escompt\u00e9e, ce genre de probl\u00e8me reste transparent.<\/p>\n<p>En lecteur assidu de ce blog, vous avez peut-\u00eatre mis en place SEC ( <a title=\"SEC et Nagios\" href=\"http:\/\/blog.guiguiabloc.fr\/index.php\/2009\/03\/18\/interception-des-erreurs-applicatives-dans-nagios-avec-sec-et-prelude-lml\/\" target=\"_blank\">http:\/\/blog.guiguiabloc.fr\/index.php\/2009\/03\/18\/interception-des-erreurs-applicatives-dans-nagios-avec-sec-et-prelude-lml <\/a>) mais l&rsquo;id\u00e9al serait\u00a0 de pouvoir simuler les actions d&rsquo;un utilisateur sur le site web par un sc\u00e9nario d\u00e9fini et de remonter une erreur dans Nagios en cas de comportement anormal.<\/p>\n<p>Ce serait bien hein ?<\/p>\n<p>Alors bien s\u00fbr, ce genre de produit existe dans le monde propri\u00e9taire (<a title=\"http:\/\/www.ip-label.fr\/\" href=\"http:\/\/www.ip-label.fr\/\" target=\"_blank\">Newtest<\/a> par exemple) mais en OpenSource, c&rsquo;\u00e9tait plut\u00f4t rare.<\/p>\n<p>Heureusement, mon pote Antoine, le <a title=\"http:\/\/blog.guiguiabloc.fr\/index.php\/2008\/05\/17\/ciscohome-et-pix-cest-tout\/\" href=\"http:\/\/blog.guiguiabloc.fr\/index.php\/2008\/05\/17\/ciscohome-et-pix-cest-tout\/\" target=\"_blank\">Geek au \u00ab\u00a0garage magique\u00a0\u00bb<\/a>, nous offre une solution efficace : <a title=\"Grandma\" href=\"http:\/\/code.google.com\/p\/grandma\/\" target=\"_blank\">Grandma<\/a><\/p>\n<p>Pour reprendre la pr\u00e9sentation de l&rsquo;application :<\/p>\n<ul>\n<li><strong>Grandma<\/strong> est une sonde robotis\u00e9e, elle ex\u00e9cute \u00e0 intervalles r\u00e9guliers des sc\u00e9narii permettant de simuler l&rsquo;action d&rsquo;un utilisateur sur une application. Chaque \u00e9tape du sc\u00e9nario fait l&rsquo;objet d&rsquo;une v\u00e9rification pour valider que la r\u00e9ponse de l&rsquo;application est satisfaisante.<\/li>\n<\/ul>\n<ul>\n<li><strong>Grandma<\/strong> permet de simuler ces actions sur toute application web, 3270, OpenVMS et Unix (tout ce qui n&rsquo;est pas client lourd en fait). Elle utilise pour cela les outils GNU : cUrl, c3270, Expect et est \u00e9crite en Bash.<\/li>\n<\/ul>\n<ul>\n<li><strong>Grandma<\/strong> prend en charge un calendrier et des profils de sc\u00e9narii afin de g\u00e9rer les plages de maintenance et adapter les contr\u00f4les aux plages d&rsquo;activit\u00e9 des applications.<\/li>\n<\/ul>\n<ul>\n<li><strong>Grandma<\/strong> fait office de collecteur\/ordonnanceur. Une fois les r\u00e9sultats (sc\u00e9nario termin\u00e9 avec succ\u00e8s, temps d&rsquo;ex\u00e9cution) r\u00e9cup\u00e9r\u00e9s, l&rsquo;information est remont\u00e9e vers Nagios \u00e0 l&rsquo;aide du client Nsca.<\/li>\n<\/ul>\n<p>La classe non ?<\/p>\n<p>Suffit les palabres, on se d\u00e9rouille les doigts, on ferme tout ce qui pourrait nous d\u00e9concentrer (oui, oui, \u00e7a aussi&#8230;), et on se lance (\u00ab\u00a0pas trop fort\u00a0\u00bb, oui je sais, elle est pourrie cette blague&#8230; (mais elle est quand m\u00eame moins lourde que \u00ab\u00a0<a title=\"http:\/\/fr.wikipedia.org\/wiki\/Lancelot_du_Lac\" href=\"http:\/\/fr.wikipedia.org\/wiki\/Lancelot_du_Lac\" target=\"_blank\">lot du lac<\/a>\u00ab\u00a0&#8230;))<\/p>\n<p>Je consid\u00e8re d\u00e9j\u00e0 que vous avez un Nagios actif et que vous savez configurer des remont\u00e9es d&rsquo;alertes par NSCA (sinon, un tour <a title=\"Tuto NSCA\" href=\"http:\/\/www.packtpub.com\/article\/passive-checks-nsca-nagios-service-check-acceptor\" target=\"_blank\">ICI<\/a> )<\/p>\n<p>T\u00e9l\u00e9chargez <a title=\"http:\/\/grandma.googlecode.com\/files\/grandma.tgz\" href=\"http:\/\/grandma.googlecode.com\/files\/grandma.tgz\" target=\"_blank\">les sources de Grandma<\/a> et d\u00e9compressez le tout dans \/opt<\/p>\n<p>Vous trouverez l&rsquo;arborescence suivante:<\/p>\n<p>\/opt\/grandma\/arch : r\u00e9pertoire de stockage des archives des sc\u00e9narios en erreur<\/p>\n<p>\/opt\/grandma\/cfg : r\u00e9pertoire de configuration<\/p>\n<p>\/opt\/grandma\/cfg\/grandma.cfg : configuration g\u00e9n\u00e9rale de l&rsquo;application<\/p>\n<p>\/opt\/grandma\/cfg\/Grandma.cfg : configuration sp\u00e9cifique \u00e0 chaque sonde<\/p>\n<p>\/opt\/grandma\/cfg\/send_nsca*.cfg : configuration des envois d&rsquo;informations vers Nagios<\/p>\n<p>\/opt\/grandma\/checks_available : r\u00e9pertoire de stockage des sc\u00e9narios<\/p>\n<p>\/opt\/grandma\/checks_enabled : r\u00e9pertoire des scripts activ\u00e9s sur la sonde (lien symbolique vers available)<\/p>\n<p>\/opt\/grandma\/lib : r\u00e9pertoire des scripts communs de l&rsquo;application<\/p>\n<p>\/opt\/grandma\/web : r\u00e9pertoire des fichiers web (interface d&rsquo;administration de grandma)<\/p>\n<p>Un \u00ab\u00a0petit\u00a0\u00bb tuto d&rsquo;installation est disponible ici : <a title=\"http:\/\/code.google.com\/p\/grandma\/wiki\/HowtoInstallationGrandma\" href=\"http:\/\/code.google.com\/p\/grandma\/wiki\/HowtoInstallationGrandma\" target=\"_blank\">http:\/\/code.google.com\/p\/grandma\/wiki\/HowtoInstallationGrandma<\/a><\/p>\n<p>La premi\u00e8re chose \u00e0 faire est de cr\u00e9er un utilisateur sp\u00e9cifique\u00a0 \u00ab\u00a0grandma\u00a0\u00bb puis de donner les droits sur \/opt\/grandma.<\/p>\n<p>Ensuite, partie param\u00e9trage :<\/p>\n<pre lang=\"text\">\r\nserveur:# echo \"export GRANDMAHOME=\/opt\/grandma\" >> \/etc\/profile\r\n\r\nserveur:\/opt\/grandma\/lib# ln -s \/opt\/grandma\/lib\/grandma \/etc\/init.d\/grandma\r\n<\/pre>\n<ul>\n<li>V\u00e9rifier les diff\u00e9rents chemins dans le fichier \/opt\/grandma\/cfg\/Grandma.cfg<\/li>\n<\/ul>\n<p>(par exemple \/bin\/basename qui sous Debian est \/usr\/bin\/basename).<\/p>\n<ul>\n<li>D\u00e9finition du serveur Nagios : nscaserver=\u00a0\u00bbnagios.guiguiabloc.fr\u00a0\u00bb<\/li>\n<\/ul>\n<p>Pr\u00e9parons notre premier sc\u00e9nario qui devra v\u00e9rifier que le texte \u00ab\u00a0Bienvenue sur GuiguiAbloc!\u00a0\u00bb s&rsquo;affiche sur la page d&rsquo;accueil du blog.<\/p>\n<p>Un sc\u00e9nario exemple et pr\u00e9sent dans \/opt\/grandma\/checks_available.<\/p>\n<pre lang=\"text\">\r\nserveur:\/opt\/grandma\/checks_available$ cat check_site_guiguiabloc\r\n\r\n#!\/bin\/bash\r\n#Copyright 2002,2010 - Antoine Theuret\r\n# Affectation des variables et fonction communes\r\n. \/etc\/profile\r\n. $GRANDMAHOME\/cfg\/grandma.cfg\r\n\r\n# Creation des repertoires temporaires et des timestamps\r\n$GRANDMAHOME\/lib\/creation_rep_travail.sh ; if [ $? -ne 0 ]; then UNKNOWN \"KO : Probleme lors de la creation des repertoires temporaires\"; fi\r\n\r\n# Bridage des scenarios en cas de surcharge de la sonde\r\n$GRANDMAHOME\/lib\/controle_surcharge.sh ; if [ $? -ne 0 ]; then UNKNOWN \"KO : La sonde $nomsonde est surchargee, l'execution des scenarios est bridee\" ; fi\r\n\r\n# Controle des plages horaires et jours d'execution\r\n$GRANDMAHOME\/lib\/verif_heure_exception.sh FTN $1 ; if [ $? -eq 1 ]; then OKOUT \"OK : pas de contr\u00f4le a faire sur cette periode\"; fi\r\n\r\n# Recuperation des mots de passe\r\nsource $GRANDMAHOME\/lib\/gestion_motdepasse.sh 123456 ; if [ $? -eq 3 ]; then UNKNOWN \"KO : Probleme lors de la recuperation des mots de passe\"; fi\r\n\r\n# Test de la page d'accueil\r\n$curl $curl_opts \"http:\/\/blog.guiguiabloc.fr\/\" >; $tmpdir\/page.html 2>&1\r\nTESTRET ; COUNT \"Bienvenue sur GuiguiAbloc!\"\r\nif [ \"$count\" -ne 1 ];then FATAL \"KO : Pas de page d'accueil\"; fi\r\n\r\nOK \"OK : Scenario Blog Guiguiabloc nominal\"\r\n\r\nserveur:\/opt\/grandma\/checks_enabled$ ln -s ..\/checks_available\/check_site_guiguiabloc check_site_guiguiabloc\r\n<\/pre>\n<p>Premier test :<\/p>\n<pre lang=\"text\">\r\nserveur:\/opt\/grandma\/checks_enabled$ .\/check_site_guiguiabloc\r\nOK : Scenario Blog Guiguiabloc nominal - Scenario execute en 1.236361391 s | ok=1.236361391\r\n<\/pre>\n<p>Changeons le texte sur la page et retestons :<\/p>\n<pre lang=\"text\">\r\nserveur:\/opt\/grandma\/checks_available$ .\/check_site_guiguiabloc\r\nKO : 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\r\n<\/pre>\n<p>Deuxi\u00e8me test, on v\u00e9rifie le moteur de recherche ainsi que le r\u00e9sultat obtenu :<\/p>\n<pre lang=\"text\">\r\n# test du moteur de recherche\r\n$curl $curl_opts \"http:\/\/blog.guiguiabloc.fr\/?s=tux+droid\" > $tmpdir\/page.html 2>&1\r\nTESTRET ; COUNT \"GuiguiAbloc search results: tux droid\"\r\nif [ \"$count\" -ne 1 ];then FATAL \"KO : Impossible d'effectuer une recherche\" ; fi\r\n\r\n$curl $curl_opts \"http:\/\/blog.guiguiabloc.fr\/?s=tux+droid\" > $tmpdir\/page.html 2>&1\r\nTESTRET ; COUNT \"Les Geeks sont de grands enfants\"\r\nif [ \"$count\" -ne 3 ];then FATAL \"KO : Retour r\u00e9sulat recherche incorrect\" ; fi\r\n\r\nserveur:\/opt\/grandma\/checks_available$ .\/check_site_guiguiabloc\r\nOK : Scenario Blog Guiguiabloc nominal - Scenario execute en 2.043520474 s | ok=2.043520474\r\n<\/pre>\n<p>Les possibilit\u00e9s sont presque infinies, la phase la plus longue \u00e9tant d&rsquo;\u00e9crire les sc\u00e9narios pour les rendre compatibles avec Curl.<\/p>\n<p>Une fois tout en place, il ne vous reste qu&rsquo;a lancer le d\u00e9mon Grandma sous root :<\/p>\n<pre lang=\"text\">\r\nserveur:~# \/opt\/grandma\/lib\/grandma start\r\nLancement de grandma : [OK]\r\n<\/pre>\n<p>Dans Nagios, les traps Nsca\u00a0 :<\/p>\n<pre lang=\"text\">\r\nMar 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\r\n<\/pre>\n<p>Et cela vous donne un \"zoli\" service Nagios suppl\u00e9mentaire :<\/p>\n<p><a href=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/2010\/03\/grandma.png\"><img loading=\"lazy\" class=\"aligncenter size-medium wp-image-621\" title=\"grandma\" src=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/2010\/03\/grandma-300x62.png\" alt=\"\" width=\"300\" height=\"62\" \/><\/a><\/p>\n<p>Il existe \u00e9galement une interface Web, facile \u00e0 mettre en place, qui vous permettra d'un coup d'oeil d'avoir acc\u00e8s aux r\u00e9sultats des divers sc\u00e9narios.<\/p>\n<p>Bilan, un excellent outil compos\u00e9 de simples scripts shell qui semble basique,\u00a0 mais redoutablement efficace pour aller plus loin dans la supervision de vos sites internet.<\/p>\n<p>Amusez vous bien \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Comme tout bon sysadmin, la supervision de vos serveurs et services est pour vous primordiale. Je ne ferais pas le tour des diff\u00e9rentes solutions existantes, la plus r\u00e9put\u00e9e \u00e9tant Nagios. Nous allons nous focaliser sur la surveillance d&rsquo;un service bien &hellip; <a href=\"http:\/\/blog.guiguiabloc.fr\/index.php\/2010\/03\/25\/surveillance-par-scenario-comportemental-avec-grandma\/\">Read More <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[7,8],"tags":[138,107],"_links":{"self":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts\/613"}],"collection":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/comments?post=613"}],"version-history":[{"count":11,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts\/613\/revisions"}],"predecessor-version":[{"id":625,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts\/613\/revisions\/625"}],"wp:attachment":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/media?parent=613"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/categories?post=613"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/tags?post=613"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}