<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Centreon on Zwindler's Reflection</title><link>https://blog.zwindler.fr/tags/centreon/</link><description>Recent content in Centreon on Zwindler's Reflection</description><generator>Hugo -- gohugo.io</generator><language>fr</language><copyright>Licensed under CC BY-SA 4.0</copyright><lastBuildDate>Tue, 08 Jan 2019 12:45:34 +0000</lastBuildDate><atom:link href="https://blog.zwindler.fr/tags/centreon/index.xml" rel="self" type="application/rss+xml"/><item><title>Superviser des appliances HPE StoreVirtual VSA (LeftHand) avec Nagios/Centron/Shinken</title><link>https://blog.zwindler.fr/2019/01/08/superviser-des-appliances-hp-storevirtual-vsa-lefthand-os-avec-nagios-centron-shinken/</link><pubDate>Tue, 08 Jan 2019 12:45:34 +0000</pubDate><guid>https://blog.zwindler.fr/2019/01/08/superviser-des-appliances-hp-storevirtual-vsa-lefthand-os-avec-nagios-centron-shinken/</guid><description>&lt;img src="https://blog.zwindler.fr/2017/02/hp_vsa-1.webp" alt="Featured image of post Superviser des appliances HPE StoreVirtual VSA (LeftHand) avec Nagios/Centron/Shinken" /&gt;&lt;h2 id="superviser-des-lefthand-"&gt;Superviser des Lefthand ?
&lt;/h2&gt;&lt;p&gt;Dans une vie antérieure (article dans mes tiroirs depuis fin 2015 a priori XD), j’ai eu à gérer, &lt;em&gt;on premise&lt;/em&gt;, du stockage hautement disponible HPE VSA pour mes clusters VMware.&lt;/p&gt;
&lt;p&gt;Si vous êtes ici, c’est sûrement parce que vous aussi, vous avez acheté des LeftHand (StoreVirtual P4000) et/ou des HPE VSA, et que vous voulez les superviser.&lt;/p&gt;
&lt;p&gt;La plupart des tâches d’administration se font depuis la CMC (Centralized Management Console), mais clairement ce n’est pas hyper pratique. La section 7 du manuel StoreVirtual traite de la supervision en général : h20628.www2.hp.com/km-ext/kmcsdirect/emr_na-c04581885-1.pdf (lien mort, pas sauvegardé par Internet Archive).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/02/hpvsa_ftp.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Heureusement, la documentation explicite clairement qu’il est possible d’activer SNMP pour externaliser tout ça.&lt;/p&gt;
&lt;p&gt;A noter, je n’ai pas pu m&amp;rsquo;empêcher de glousser en lisant cette petit phrase dans un manuel d’administration un peu plus ancien, qui dit que vous ne pouvez pas changer, ni même supprimer (#Sécurité), les communautés par défaut :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/12/sanmon.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Section 7 du manuel d’administration &lt;a class="link" href="http://www.hp.com/ctg/Manual/c01865545.pdf" target="_blank" rel="noopener"
&gt;http://www.hp.com/ctg/Manual/c01865545.pdf&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="nagios--centreon--shinken"&gt;Nagios / Centreon / Shinken
&lt;/h2&gt;&lt;p&gt;Pour superviser mes machines dans mes DC « on-premise », j’utilisais Centreon. Tout naturellement je me suis tourné vers Nagios Exchange pour voir s’il n’y avait pas déjà des gens qui avaient fait le travail.&lt;/p&gt;
&lt;p&gt;2 plugins ont attirés mon attention :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://exchange.nagios.org/directory/Plugins/Hardware/Storage-Systems/SAN-and-NAS/check_lefthand-2Epl/details" target="_blank" rel="noopener"
&gt;exchange.nagios.org/directory/Plugins/Hardware/Storage-Systems/SAN-and-NAS/check_lefthand-2Epl/details&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://exchange.nagios.org/directory/Plugins/Hardware/Storage-Systems/SAN-and-NAS/check_lhc/details" target="_blank" rel="noopener"
&gt;exchange.nagios.org/directory/Plugins/Hardware/Storage-Systems/SAN-and-NAS/check_lhc/details&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="prérequis"&gt;Prérequis
&lt;/h2&gt;&lt;p&gt;Le plus récent et le plus téléchargé, &lt;strong&gt;check_lhc&lt;/strong&gt;, nécessite le téléchargement de MIB. Je les avaient trouvé sur &lt;strong&gt;circitor&lt;/strong&gt; (ex. &lt;a class="link" href="http://www.circitor.fr/Mibs/Html/L/LEFTHAND-NETWORKS-NUS-COMMON-CLUSTERING-MIB.php" target="_blank" rel="noopener"
&gt;www.circitor.fr/Mibs/Html/L/LEFTHAND-NETWORKS-NUS-COMMON-CLUSTERING-MIB.php&lt;/a&gt;), puis de les déposer dans votre serveur Nagios/Centreon/Shinken&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;/usr/share/snmp/mibs/
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;J’avais également trouvé des ressources sur le site d’HPE, mais comme ils passent leur temps à le refaire les 3 liens que j’avais sauvegardés sont maintenant HS. Voilà voilà.&lt;/p&gt;
&lt;p&gt;En gros, ce que ça disait, c’est que les MIB sont contenues dans l’installeur, celui qui est utilisé pour instancier les VSA la première fois.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2015/11/01_storevirtual.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2015/11/02_storevirtual.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Fallait le savoir&amp;hellip;&lt;/p&gt;
&lt;h2 id="configurer-snmp"&gt;Configurer SNMP
&lt;/h2&gt;&lt;p&gt;Comme les deux plugins utilisent SNMP, on va&amp;hellip; l’activer. &lt;strong&gt;#ThanksCaptainObvious&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Depuis la CMC, on peut donc configurer nos StoreVirtual pour qu’elles acceptent des connexions SNMP et configurer une communauté (voir &lt;a class="link" href="http://h20628.www2.hp.com/km-ext/kmcsdirect/emr_na-c04581885-1.pdf" target="_blank" rel="noopener"
&gt;le manuel d’admin, page 93&lt;/a&gt;). Clairement, ce n’est pas sorcier.&lt;/p&gt;
&lt;p&gt;Dans le &lt;strong&gt;Management Group&lt;/strong&gt;, on a un menu &lt;strong&gt;Event&lt;/strong&gt;, dans lequel on peut configurer un serveur SMTP (pratique pour recevoir les mails qui m’informe que mon cluster est à plat et que mes données sont définitivement corrompues et que je peux aller pointer à &lt;em&gt;Paul Emploi&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;Et, &lt;strong&gt;SNMP&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2015/11/03_storevirtual.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="checker"&gt;Checker
&lt;/h2&gt;&lt;p&gt;Maintenant que vous avez activé SNMP (avec une communauté bien complexe, readonly et des restrictions IP à vos seuls serveurs de supervision, on est d’accord), on peut voir si ça marche.&lt;/p&gt;
&lt;p&gt;Personnellement j’ai préféré &lt;strong&gt;check_lefthand&lt;/strong&gt;, car la doc est plus fournie et les options plus nombreuses .&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;./check_lefthand.pl -H 10.10.10.16 -C hyperdifficultcommunity
Cowardly exiting, not instructed to check anything!
check_lefthand.pl -H -C [-t timeout] [-p port]
Additional Options:
--module-space
report the available space on each &amp;#39;module&amp;#39; within a management group
--module-status
report on the various status elements for each &amp;#39;module&amp;#39; within a management group
--volume-space
report the available space on each volume within a management group
--volume-status
report on the various status elements for each volume within a management group
--cluster-space
report the available space for each cluster within a management group
--cluster-status
report the status of each cluster within a management group
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Les deux alertes que j’ai mises en place sont l’état du clusters, et le status de mes volumes (synchronisés ou pas entre les 2 salles).&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;centreon$ ./check_lefthand.pl -H 10.10.10.16 -C hyperdifficultcommunity --cluster-status
OK - mgmt group: MyAwesomeHPVSA 5/5 Cluster Managers Active.
centreon$ ./check_lefthand.pl -H 10.10.10.16 -C public --volume-status
OK - mgmt group: MyAwesomeHPVSA 4 Volumes with valid replication and Data Protection.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A noter, tout n’est pas parfait. Dans certains cas, j’ai remarqué que l’alerte ne se déclenchait pas quand des nœuds étaient DOWN, car le compteur « total » de nœuds décrémentait en même temps que les nœuds tombaient (ce qui est très bête&amp;hellip;).&lt;/p&gt;
&lt;p&gt;Mais c’est quand même un début :)&lt;/p&gt;
&lt;h2 id="bonus--rage"&gt;Bonus : Rage
&lt;/h2&gt;&lt;p&gt;Ouais, je sais&amp;hellip;HPE VSA (maintenant HPe StoreVirtual VSA), quoi. L’alternative « géniale » de HPE à VSAN.&lt;/p&gt;
&lt;p&gt;Ne me blâmez pas&amp;hellip; A l’époque, on m’avait donné le choix entre 2 appliances physiques NetApps &lt;strong&gt;plus chères&lt;/strong&gt; et &lt;strong&gt;même pas hautement disponibles&lt;/strong&gt; (actif/passif) et donc les fameuses HPE VSA Storevirtual. Et puis sur le papier, ça paraissait robuste. C’est basé sur un produit éprouvé, les Lefthands (appliances physiques) et un OS Linux.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;What could go wrong?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Maintenant que je ne m’en occupe plus, je peux dire que c’est grâce à ce superbe outil que j’aurai fais un week end non-stop quasiment sans dormir au téléphone avec des techs HPE et VMware de tout autour du monde (mais je me suis fait payer plus de 25 heures d’astreinte &lt;strong&gt;#youpi&lt;/strong&gt;) parce que les nœuds tombaient les uns après les autres sans raison apparente.&lt;/p&gt;
&lt;p&gt;Pour les curieux, c’était un problème de hotspare qui se mettait en veille et bloquaient les nodes, les uns après les autres, dès qu’une commande « refresh storage usage » était lancée par l’ESXi (automatique ou manuel).&lt;/p&gt;
&lt;p&gt;C’est aussi mon record personnel &lt;strong&gt;du ticket support le plus longtemps&lt;/strong&gt;, tout constructeur/éditeur confondu. Les chiffres sont impressionnants :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;un mois pour trouver un workaround (désactiver les hotspares, #genious)&lt;/li&gt;
&lt;li&gt;plus de 200 emails&lt;/li&gt;
&lt;li&gt;5 mises à jours (dont 4 inutiles)&lt;/li&gt;
&lt;li&gt;3 interventions le soir sur la prod&lt;/li&gt;
&lt;li&gt;Et last but not least : &lt;strong&gt;2 ans&lt;/strong&gt; pour trouver le fix (alors que le problème était détecté puisqu’on savait qu’il suffisait de désactiver les hotspares).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;&lt;b&gt;DEUX&amp;hellip; ANS&amp;hellip;&lt;/b&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Au final, je ne suis même pas vraiment sûr que le problème soit fixé.&lt;/p&gt;
&lt;p&gt;Je ne suis plus sûr de rien, à part du niveau de compétence de HPE sur le sujet des serveurs et du stockage.&lt;/p&gt;
&lt;p&gt;Mais qui peut les blâmer, ce n’est pas leur cœur de métier après tout. &lt;strong&gt;#ohwait&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Configurer NSCA pour Centreon Engine</title><link>https://blog.zwindler.fr/2017/11/21/configurer-nsca-pour-centreon-engine/</link><pubDate>Tue, 21 Nov 2017 12:45:26 +0000</pubDate><guid>https://blog.zwindler.fr/2017/11/21/configurer-nsca-pour-centreon-engine/</guid><description>&lt;img src="https://blog.zwindler.fr/2017/11/centreon-nsca.webp" alt="Featured image of post Configurer NSCA pour Centreon Engine" /&gt;&lt;h2 id="petit-rappel-de-ce-quest-nsca"&gt;Petit rappel de ce qu’est NSCA
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://exchange.nagios.org/directory/Addons/Passive-Checks/NSCA--2D-Nagios-Service-Check-Acceptor" target="_blank" rel="noopener"
&gt;NSCA&lt;/a&gt;, pour &lt;strong&gt;Nagios Service Check Acceptor&lt;/strong&gt;, est un couple de binaires serveur et client permettant de réaliser les checks passifs avec Nagios. Le check passif est à l’initiative du serveur supervisé, alors qu’a contrario le check actif est déclenché par le serveur superviseur.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/11/nsca.png.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Au delà de la question de philosophie (j’ai rencontré de fervents défenseurs du check passif avec que je suis plutôt pour ne pas faire confiance au serveur surveillé pour qu’il nous dise qu’il va mal), il y a clairement des cas d’usage où les checks passifs sont bien plus indiqués.&lt;/p&gt;
&lt;p&gt;Si vous voulez aller plus loin sur le sujet actif vs passif, je vous propose d’aller lire &lt;a class="link" href="https://wooster.checkmy.ws/2014/05/monitoring-interne-externe-actif-passif/" target="_blank" rel="noopener"
&gt;l’article en Français de Olivier Jan&lt;/a&gt;, fondateur de &lt;a class="link" href="https://checkmy.ws/fr/" target="_blank" rel="noopener"
&gt;Check My Website&lt;/a&gt; et figure assez connue de la supervision open source FR.&lt;/p&gt;
&lt;h2 id="bon-alors-pourquoi-tu-fais-du-nsca-"&gt;Bon alors pourquoi tu fais du NSCA ?
&lt;/h2&gt;&lt;p&gt;Un bon exemple de usecase où les checks passifs sont clairement indiqués sont les événements applicatifs. Pour une raison ou pour une autre, un traitement applicatif (par exemple de type batch) a échoué. Je pourrais aller vérifier régulièrement les traitements en erreur mais l’ordonnanceur de nagios ne me permet pas de faire un polling plus fin qu’une minute, et en plus la plupart du temps, je vérifierai juste que tout est OK pour rien.&lt;/p&gt;
&lt;p&gt;En revanche, l’application, si elle est fiable, sait quand il y a eu une erreur et est capable de me le dire, uniquement quand cela arrive. Le check passif est dans ce cas parfaitement indiqué.&lt;/p&gt;
&lt;p&gt;Dans le cadre de la migration de ma supervision d’un Centreon 2.4 vers un CES 3.3 (un article est à venir, je ne fais rien dans l’ordre&amp;hellip;), il a été nécessaire de reconfigurer NSCA sur la nouvelle plateforme. La plateforme CES 3.3 étant basée sur un CentOS 6 ainsi que Centreon Engine et non plus Nagios directement, de nombreuses documentations ne sont plus à jour. Et pour cause, NSCA n’a pas pratiquement évolué depuis 2007 (une version sortie en 2011 et une mineure sortie de nulle part fin 2016).&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://exchange.nagios.org/directory/Addons/Passive-Checks/NSCA--2D-Nagios-Service-Check-Acceptor/details#rev-3575" target="_blank" rel="noopener"
&gt;Ce commentaire sur Nagios Exchange&lt;/a&gt; en est assez révélateur :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The NSCA addon has been ignored and neglected for years. For passive checks, try NRDP instead.&lt;/p&gt;
&lt;p&gt;I can’t imagine why NSCA is still a featured plugin on the Nagios Exchange when it hasn’t received an update in over 3 years.&lt;/p&gt;
&lt;p&gt;The NSCA addons work, but they are buggy, crash too often and will lead to false positives on your Nagios server.&lt;/p&gt;
&lt;p&gt;The 2.9 branch and 2.7 branch are not compatible. The 2.7 branch is still in wide use due to these compatibility issues, but it hasn’t received an update since 1997. The 2.9 branch hasn’t received an update since 2012.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ambiance.&lt;/p&gt;
&lt;h3 id="aparté-compatibilité"&gt;Aparté compatibilité
&lt;/h3&gt;&lt;p&gt;Comme l’indique le commentaire ci dessus que je n’ai malheureusement pas lu, les branches 2.9 et 2.7 ne sont pas compatibles. Ne vous fatiguez pas à essayer de les faire communiquer, ça ne fonctionnera pas. Vous verrez les connexions arriver mais aucun message passer côte serveur de supervision.&lt;/p&gt;
&lt;p&gt;Bon, il faut voir le bon côté des choses, ça me permet de vous offrir en fin d’article une superbe section debugging ;-).&lt;/p&gt;
&lt;h2 id="comment-linstaller-"&gt;Comment l’installer ?
&lt;/h2&gt;&lt;p&gt;On récupère les sources, directement depuis le serveur Centreon :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;wget https://github.com/NagiosEnterprises/nsca/releases/download/nsca-2.9.2/nsca-2.9.2.tar.gz
tar xzf nsca-2.9.2.tar.gz
cd nsca-2.9.2
./configure --prefix=/usr/share/centreon/ --with-trusted-path=/bin:/sbin:/usr/bin:/usr/sbin:/usr/share/centreon/bin:/usr/lib/nagios/plugins
make all
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Les sources sont partiellement compilées avec les nouveaux chemins par défauts de CES, qui n’ont plus rien avoir avec ceux de Nagios (historiques).&lt;/p&gt;
&lt;p&gt;On copie le binaire « serveur » dans le dossier de Centreon Engine (pour rester cohérent avec l’ancien système de stockage des fichiers Nagios plus qu’autre chose, il peut être mis n’importe où).&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cp src/nsca /usr/share/centreon/bin/
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;On n’utilise pas le fichier de configuration disponible dans &lt;strong&gt;sample-config/nsca.cfg&lt;/strong&gt; car trop de paramètres ne sont plus en phase. Il est plus simple d’en créer directement un avec tous les bons paramètres :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat &amp;gt; /etc/centreon-engine/nsca.cfg &amp;lt;&amp;lt; EOF
log_facility=daemon
pid_file=/var/run/nsca.pid
server_port=5667
nsca_user=centreon-engine
nsca_group=centreon-engine
debug=0
command_file=/var/lib/centreon-engine/rw/centengine.cmd
alternate_dump_file=/var/lib/centreon-engine/rw/nsca.dump
aggregate_writes=0
append_to_file=0
max_packet_age=30
decryption_method=1
EOF
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A noter, la &lt;strong&gt;encryption/decryption_method&lt;/strong&gt; par défaut et l’absence de mot de passe font de cette solution quelque chose de très peu sécurisé. Je vous invite à consulter &lt;a class="link" href="https://github.com/NagiosEnterprises/nsca/blob/master/SECURITY.md" target="_blank" rel="noopener"
&gt;la page suivante pour plus de détails&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;En revanche on peut utiliser la configuration par défaut pour avoir le client NSCA sur la machine (utile pour tester).&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cp sample-config/send_nsca.cfg /etc/centreon-engine/send_nsca.cfg
chown centreon-engine:centreon-engine /etc/centreon-engine/send_nsca.cfg
cp src/send_nsca /usr/lib/nagios/plugins/
chown centreon-engine:centreon-engine /usr/lib/nagios/plugins/send_nsca
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;On créé ensuite un script de démarrage. On est encore sur System V et des scripts d’init car CES 3.3 n’est pas livré sur une CentOS 7 mais une 6. A noter, il est également possible de l’installer via xinetd si vous préférez ou que vous en avez l’habitude. Moi je préfère l’avoir comme un service à part.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat /etc/init.d/nsca
#!/bin/sh
### BEGIN INIT INFO
# Provides: nsca
# Required-Start: $local_fs $remote_fs $syslog $named $network $time
# Required-Stop: $local_fs $remote_fs $syslog $named $network
# Should-Start:
# Should-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start/Stop the Nagios Service Check Acceptor (nsca) daemon
### END INIT INFO
DAEMON=/usr/share/centreon/bin/nsca
NAME=nsca
DESC=&amp;#34;Nagios Service Check Acceptor&amp;#34;
CONF=/etc/centreon-engine/nsca.cfg
OPTS=&amp;#34;--daemon -c $CONF&amp;#34;
PIDFILE=&amp;#34;/var/run/nsca.pid&amp;#34;
. /etc/init.d/functions
test -f $DAEMON || exit 0
# support a default file
if [ -f /etc/default/nsca ]; then
. /etc/default/nsca
fi
case &amp;#34;$1&amp;#34; in
start)
echo &amp;#34;Starting $DESC&amp;#34; &amp;#34;$NAME&amp;#34;
daemon --pidfile $PIDFILE $DAEMON $OPTS
;;
stop)
echo &amp;#34;Stopping $DESC&amp;#34; &amp;#34;$NAME&amp;#34;
killproc -p $PIDFILE $NAME
;;
restart)
$0 stop
$0 start
;;
status)
status_of_proc -p $PIDFILE $DAEMON $NAME
;;
*)
echo &amp;#34;Usage: $N {start|stop|restart|status}&amp;#34;
exit 1
;;
esac
exit 0
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;On rend le script exécutable, on l’ajoute au démarrage, et on le lance :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;chmod +x /etc/init.d/nsca
chkconfig --level 235 nsca on
/etc/init.d/nsca start
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="test"&gt;Test
&lt;/h2&gt;&lt;h3 id="sur-le-serveur-centreon"&gt;Sur le serveur Centreon
&lt;/h3&gt;&lt;p&gt;Pour valider que tout fonctionne, on peut se créer un service &lt;strong&gt;nsca_test&lt;/strong&gt; sur l’hôte par défaut (Centreon-Server). Ne pas oublier d’autoriser les checks passifs sur ce service dans sa configuration !&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;su - centreon-engine
echo -e &amp;#34;Centreon-Server\tnsca_test passif\t2\tNE PAS TENIR COMPTE&amp;#34; | /usr/lib/nagios/plugins/send_nsca -H 127.0.0.1 -c /etc/centreon-engine/send_nsca.cfg
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="sur-un-client"&gt;Sur un client
&lt;/h3&gt;&lt;p&gt;Maintenant que notre test fonctionne, le mieux c’est quand même de tester en vrai que notre serveur superviser peut déclencher une alerte et que le serveur la récupère. Pour ce faire vous pouvez créer un petit script qui vous servira à valider que tout fonctionne.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat /usr/lib/nagios/libexec/test_nsca.sh
#!/bin/bash
#test_nsca.sh
echo -e &amp;#34;srv_supervise\tmon_service_passif\t2\tmessage&amp;#34; | /usr/lib/nagios/libexec/send_nsca -H 200.140.20.186 -c /etc/nagios/send_nsca.cfg
su - nagios
/usr/lib/nagios/libexec/test_nsca.sh
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="debugging"&gt;Debugging
&lt;/h2&gt;&lt;p&gt;Et oui ! Des fois ça ne fonctionne pas&amp;hellip; Lorsque côté client vous avez « 0 packet sent », pas la peine de se fatiguer, c’est côté client que ça coince dans ce cas là. Le format des séparateurs ou le nombre de champs n’est peut être pas le bon.&lt;/p&gt;
&lt;p&gt;En revanche, si vous recevez « 1 data packet(s) sent to host successfully. », c’est que c’est bien parti et c’est côté serveur de supervision qu’il faut regarder.&lt;/p&gt;
&lt;p&gt;J’ai retrouvé un article sur &lt;a class="link" href="https://support.nagios.com/kb/article.php?id=83" target="_blank" rel="noopener"
&gt;le support de Nagios qui donne quelques pistes&lt;/a&gt;, bien qu’elles soient light&amp;hellip;&lt;/p&gt;
&lt;p&gt;On peut commencer par demander à NSCA de loguer quelque chose. Oui parce que par défaut, le serveur NSCA ne logue rien du tout&amp;hellip; Dans &lt;strong&gt;rsyslog.conf&lt;/strong&gt;, ajouter &lt;strong&gt;daemon.debug&lt;/strong&gt; pour &lt;strong&gt;/var/log/messages&lt;/strong&gt; :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;vi /etc/rsyslog.conf
[...]
*.info;mail.none;authpriv.none;cron.none;daemon.debug /var/log/messages
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Dans la configuration de nsca, on peut aussi passer en mode debug (pas très bavard malheureusement).&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat /etc/centreon-engine/nsca.cfg
[...]
debug=1
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Pour prise en compte, rechargez les deux démons :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;service nsca restart
service rsyslog restart
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="erreur-de-décalage-de-temps-entre-les-serveurs"&gt;Erreur de décalage de temps entre les serveurs
&lt;/h3&gt;&lt;p&gt;Par défaut, les paquets plus vieux de 30 secondes sont ignorés. Ceci peut poser problème dans le cas où les serveurs de temps ne sont pas à jour.&lt;/p&gt;
&lt;p&gt;Côté client, on a le message suivant :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;1 data packet(s) sent to host successfully.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Côté serveur, on a le message suivant dans /var/log/messages (si debug=1 et daemon.debug dans rsyslog.conf)&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Nov 14 16:00:03 sup02 nsca[6786]: Handling the connection...
Nov 14 16:00:04 sup02 nsca[6786]: End of connection...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Alors qu’on devrait avoir :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Nov 14 15:51:14 sup02 nsca[1721]: Handling the connection...
Nov 14 15:51:15 sup02 nsca[1721]: SERVICE CHECK -&amp;gt; Host Name: &amp;#39;srv_supervise&amp;#39;, Service Description: &amp;#39;mon_service_passif&amp;#39;, Return Code: &amp;#39;2&amp;#39;, Output: &amp;#39;TEST TEST TEST DGE DGE DGE&amp;#39;
Nov 14 15:51:15 sup02 nsca[1721]: Attempting to write to nagios command pipe
Nov 14 15:51:15 sup02 nsca[1721]: End of connection...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Le paramètre à modifier dans ce cas là (même si le mieux serait de corriger les serveurs de temps&amp;hellip;) est &lt;strong&gt;max_packet_age&lt;/strong&gt; dont la valeur par défaut est 30. Vous pouvez la monter jusqu’à 900 (15 minutes) ou bien la positionner à 0 pour accepter tous les paquets, quelque soit leur age.&lt;/p&gt;</description></item><item><title>Monitorez le fait que les URLs bloquées sont bien bloquées par le proxy</title><link>https://blog.zwindler.fr/2017/11/18/supervisez-vos-urls-bloquees-proxy/</link><pubDate>Sat, 18 Nov 2017 12:45:25 +0000</pubDate><guid>https://blog.zwindler.fr/2017/11/18/supervisez-vos-urls-bloquees-proxy/</guid><description>&lt;img src="https://blog.zwindler.fr/2017/11/check_proxy_http_url.webp" alt="Featured image of post Monitorez le fait que les URLs bloquées sont bien bloquées par le proxy" /&gt;&lt;h2 id="comment-je-vérifie-que-les-sites-bloqués-par-mon-proxy-sont-bien-bloqués-"&gt;Comment je vérifie que les sites bloqués par mon proxy sont bien bloqués ?
&lt;/h2&gt;&lt;p&gt;Il y a plein de raisons qui peuvent expliquer qu’un site non légitime soit bloqué sur un lieu de travail (par exemple). Et autant de raisons qui font que, parfois, les proxies ne bloquent pas bien des sites que vous aviez pourtant bloqués !&lt;/p&gt;
&lt;p&gt;Pour tout ce qui est supervision des pages web, Nagios fourni le plugin &lt;strong&gt;check_http&lt;/strong&gt;, dans les &lt;em&gt;nagios-plugins&lt;/em&gt; (collection officielle de plugins), et qui permet de vérifier qu’une page web donnée est accessible (ou non).&lt;/p&gt;
&lt;h2 id="limitations"&gt;Limitations
&lt;/h2&gt;&lt;p&gt;Cependant, il existe plusieurs cas où ce plugin ne « fonctionne pas » comme je le souhaite :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;D’abord, dans le cas où l’URL checkée renvoie un 30x (redirection), le check_http considère que c’est bon et ne va pas chercher plus loin. Hors, il arrive que le site soit down au-delà de la redirection. Dans ce cas là, check_http ne nous notifie pas de l’échec.&lt;/li&gt;
&lt;li&gt;Ensuite, dans le cas où vous voulez traverser un proxy pour vérifier si une page est accessible ou non comme dans mon introduction, vous ne pouvez pas spécifier si un code retour 40x est une bonne chose ou non. Dans tous les cas, avec check_http, un 40x sera considéré comme un WARNING, jamais comme un CRITICAL ou un OK.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour résoudre ces problèmes, j’ai donc réécris un petit script bash simple, permettant de résoudre tous les cas ci-dessus. Avec &lt;strong&gt;check_proxy_http_url&lt;/strong&gt;, vous pouvez vérifier des URLs en spécifiant un proxy, suivre correctement les redirections (301 ou 302 par ex.) et spécifier si le fait qu’une page soit accessible (ou pas accessible) est une bonne chose ou non.&lt;/p&gt;
&lt;h2 id="installation"&gt;Installation
&lt;/h2&gt;&lt;p&gt;Le script est simplissime. Pour des raisons de facilité je me suis simplement appuyé sur un script &lt;strong&gt;bash&lt;/strong&gt; et de &lt;strong&gt;wget&lt;/strong&gt;, présents sur la plupart des serveurs par défaut. Il n’y a pas d’autres prérequis.&lt;/p&gt;
&lt;p&gt;Dans un futur (plus ou moins) proche j’ajouterai également une compatibilité avec &lt;strong&gt;cURL&lt;/strong&gt;, qui a tendance à le remplacer.&lt;/p&gt;
&lt;h2 id="usage"&gt;Usage
&lt;/h2&gt;&lt;p&gt;Là encore, j’ai fait au plus simple. Le script dispose d’un nombre limité d’arguments, permettant de réaliser les usecases indiqués précédemment.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;/var/lib/nrpe/plugins/check_proxy_http_url.sh -u TARGET_URL [-p PROXY_ADDRESS:PROXY_PORT] [-r] [-v]
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;TARGET_URL : obligatoire - l’URL que vous souhaitez superviser. Par défaut, un code retour de type 200 induira un OK, un 4XX/5XX un CRITICAL&lt;/li&gt;
&lt;li&gt;PROXY_ADDRESS &amp;amp; PROXY_PORT : optionnels - le hostname ou l’adresse de votre proxy, si nécessaire&lt;/li&gt;
&lt;li&gt;-r : optionnel - permet d’inverser les codes retours de Nagios. Un code retour 200 induira un CRITICAL (URL qui est accessible alors qu’elle ne le devrait pas) et un 4XX/5XX induira un OK&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="exemples"&gt;Exemples
&lt;/h2&gt;&lt;p&gt;Vérifier que http://@IPsome_forbidden_website.com n’est pas accessible et renvoyer un CRITICAL sinon.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[root@lanhost ~]# /var/lib/nrpe/plugins/check_proxy_http_url.sh -u some_forbidden_website.com -r
OK: URL some_forbidden_website.com isn&amp;#39;t available and it shouldn&amp;#39;t - 403
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Vérifier que http://@IPsome_allowed_website_that_isnt_accessible.com n&amp;rsquo;est pas accessible et renvoyer un CRITICAL sinon.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@lanhost ~&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;# /var/lib/nrpe/plugins/check_proxy_http_url.sh -p internal_proxy:8181 -u some_allowed_website_that_isnt_accessible.com&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;CRITICAL: URL some_allowed_website_that_isnt_accessible.com isn&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;t available and it should - &lt;span class="m"&gt;403&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="code-source"&gt;Code source
&lt;/h2&gt;&lt;p&gt;Comme d’habitude avec mes plugins « Nagios compatibles », les sources sont disponibles sur Github à l’adresse suivante :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/zwindler/check_proxy_http_url" target="_blank" rel="noopener"
&gt;github.com/zwindler/check_proxy_http_url&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le lien pour &lt;a class="link" href="https://exchange.nagios.org/directory/Plugins/Network-Protocols/HTTP/check_proxy_http_url/details" target="_blank" rel="noopener"
&gt;Nagios Exchange est également disponible ici !&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Mes autres plugins sont également disponibles sur le Github :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2015/07/16/plugin-check_mem_ng-sh-compatible-rhel-7/" &gt;Plugin check_mem_ng.sh compatible RHEL 7+&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2017/04/25/plugin-de-supervision-rlp-emc%C2%B2-check_emc_rlp/" target="_blank" rel="noopener"
&gt;check_emc_rlp : supervision des LUNs dans le RLP sur baies VNX EMC²&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2016/11/09/plugin-check_wlst_sessions-weblogic-9/" &gt;Plugin de supervision check_wlst_sessions (WebLogic 9+)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Impossible de faire disparaitre les hôtes après suppression d’un poller Centreon</title><link>https://blog.zwindler.fr/2017/08/22/impossible-de-faire-disparaitre-les-hotes-apres-suppression-dun-poller-centreon/</link><pubDate>Tue, 22 Aug 2017 11:45:21 +0000</pubDate><guid>https://blog.zwindler.fr/2017/08/22/impossible-de-faire-disparaitre-les-hotes-apres-suppression-dun-poller-centreon/</guid><description>&lt;img src="https://blog.zwindler.fr/2017/08/centreon_logo.webp" alt="Featured image of post Impossible de faire disparaitre les hôtes après suppression d’un poller Centreon" /&gt;&lt;h2 id="des-hôtes-qui-nexistent-plus-sont-toujours-visible-dans-linterface-de-centreon"&gt;Des hôtes qui n’existent plus sont toujours visible dans l’interface de Centreon
&lt;/h2&gt;&lt;p&gt;Je plante le décor : Vous avez une infrastructure supervisée avec Centreon. Cool :). Vous aviez des collecteurs distants (aka poller) et vous avez décidé de les supprimer finalement (je sais pas, imaginons que finalement le client décide d’annuler le projet par exemple, même si ça n’arrive jamais).&lt;/p&gt;
&lt;p&gt;Et là, surprise. Vous n’aviez pas remarqué avant d’avoir définitivement supprimé la machine poller et toute sa configuration, mais les hôtes précédemment supervisés sont toujours visibles dans l’interface de Centreon, avec leur état en date de la dernière fois qu’un check a eu lieu, indéfiniment.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/centreon_old_pollers_01.png"
loading="lazy"
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Ici, une capture d’écran du 17, avec des serveurs qui ont répondu la dernière fois le 16 !&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Pourtant, ils n’existent plus dans votre configuration !! Tout est désactivé (ou supprimé). Vous ne voyez pas ce que vous pouvez faire de plus !&lt;/p&gt;
&lt;h2 id="back-in-time"&gt;Back in time
&lt;/h2&gt;&lt;p&gt;Il faut déjà se rappeler comment marche Centreon, dans un premier temps.&lt;/p&gt;
&lt;p&gt;Historiquement, Centreon se basait sur Nagios. Et Nagios est un programme des années 2000, monolithique, codé en C, et qui ne dispose pas, par conception, de stockage pour historiser les états des serveurs surveillés.&lt;/p&gt;
&lt;p&gt;Ça peut paraître fou aujourd’hui, mais Nagios n’a pas de base de données ! L’ensemble des états &lt;em&gt;à un moment donné&lt;/em&gt; des serveurs était (est) stocké dans un fichier plat, tout le temps réécrit et que vous pouvez trouver dans un sous répertoire de nagios (var/status.log).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/08/nagios_01.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Les premières lignes du status.log&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Cette méthode de fonctionnement « simple » (l’interface HTTP en CGI a juste à lire le fichier plat pour afficher les états des serveurs) est catastrophique pour les performances. J’ai vu des contextes où ce fichier était stocké en RAM via un ramdisk pour essayer de supporter un peu mieux la charge&amp;hellip;&lt;/p&gt;
&lt;p&gt;Conscients du manque qu’occasionne l’absence de base de données pour historiser l’état des serveurs au delà de leur état instantané, les gens de chez Nagios ont créé un connecteur externe (le « broker » ndo2db) qui permet de transmettre une copie des résultats à une base de données (MySQL le plus souvent mais je me demande si il n’y a pas aussi Oracle ?). &lt;a class="link" href="https://assets.nagios.com/downloads/nagioscore/docs/ndoutils/NDOUtils_DB_Model.pdf" target="_blank" rel="noopener"
&gt;Le modèle de la base NDO est accessible sur le site de Nagios&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="où-je-veux-en-venir-avec-tout-ça-"&gt;Où je veux en venir avec tout ça ?
&lt;/h2&gt;&lt;p&gt;Ce broker externe a été un peu détourné de son but initial par plusieurs projets, dont Centreon, qui l’a utilisé en tant que source principale pour afficher les status des serveurs. Utiliser la base NDO comme source principale a un 2ème avantage : il est possible d’agréger plusieurs serveur Nagios dans une même base de données. On a donc la possibilité de gérer plusieurs serveur depuis une même interface =&amp;gt; c’est le principe utilisé par les collecteurs de Centreon.&lt;/p&gt;
&lt;p&gt;Le collecteur par défaut (Central) est composé du cœur de Centreon lui même gérant l’interface et la configuration de tous les pollers ainsi que de la base NDO et du connecteur NDO2DB. Les pollers eux ne sont que des moteurs Nagios, leur configuration « Nagios » est générée par le Central, et les données sont collectées via ndomod (le connecteur qui envoie les données sur le ndo2db).&lt;br&gt;
[Avant de me prendre la remarque, ce que je dis ici n’est plus tout à fait vrai car Centreon et réécrit depuis longtemps tous ces composants, notamment centreon-broker pour ndo2db, centreon-engine pour le moteur Nagios. Mais le principe reste le même]&lt;/p&gt;
&lt;p&gt;Comme la base contenant la configuration des pollers est distincte de la base NDO, il est « normal » que l’inactivation d’un poller n’ait pas d’impact sur le contenu de la base NDO. NDO ne stocke des données venant des serveurs Nagios, au fil de l’eau, et n’a aucune connaissance de la configuration dans Centreon&amp;hellip;&lt;/p&gt;
&lt;h2 id="la-vraie-méthode"&gt;La vraie méthode
&lt;/h2&gt;&lt;p&gt;Si vous n’avez pas encore tout pété comme je le décris dans le premier paragraphe, vous serez content d’apprendre qu’il existe une meilleure méthode. La « vraie » méthode (à moins qu’il y en ait encore une autre que je ne connais pas) est décrite dans ce post que j’ai retrouvé sur le forum Monitoring-fr (lien mort, pas sauvegardé par Internet Archive).&lt;/p&gt;
&lt;p&gt;David GUENAULT (un des piliers de Monitoring-fr et qui a contribué sur plusieurs projets) nous donne la solution :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;bah en fait c’est tout simple&lt;br&gt;
tu réaffecte tes hôtes sur le poller principal :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;configuration-&amp;gt;hosts puis filtre sur le poller que tu veux enlever&lt;/li&gt;
&lt;li&gt;selection des hôtes&lt;/li&gt;
&lt;li&gt;dans la combo =&amp;gt; massive change&lt;/li&gt;
&lt;li&gt;dans la combo monitored from =&amp;gt; tu selectionne ton central et validation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;tu supprimes ensuite le poller dans l’interface de centreon :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;tu supprime ta config ndo relative au poller que tu veux enlever : configuration -&amp;gt; centreon -&amp;gt; ndomod&lt;/li&gt;
&lt;li&gt;tu supprime le poller dans : configuration-&amp;gt;centreon-&amp;gt;pollers&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;tu pousses ta configuration : configuration -&amp;gt; nagios -&amp;gt; generate&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="bon-et-si-cest-trop-tard-"&gt;Bon et si c’est trop tard ?
&lt;/h2&gt;&lt;p&gt;Mais si vous êtes sur cet article c’est peut être que c’est déjà trop tard et que vous n’avez plus moyen de réaliser la procédure ci-dessus ?&lt;/p&gt;
&lt;p&gt;Et bien là, pas le choix. Il va falloir aller bidouiller la base de données NDO !&lt;/p&gt;
&lt;p&gt;Le plus simple est de se connecter directement via le shell mysql depuis votre serveur Central. Dans la base de données NDO, on peut donc chercher les instances existantes :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;select * from nagios_instances;
+-------------+---------------+----------------------+
| instance_id | instance_name | instance_description |
+-------------+---------------+----------------------+
| 1 | Central | |
| 3 | Poller1 | |
| 4 | Poller2 | |
| 5 | Poller3 | |
+-------------+---------------+----------------------+
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Dans mon cas, c’est Poller1 que j’ai supprimé. Pour essayer de ne pas trop faire n’importe quoi, je préfère toujours regarde un peu ce que je compte modifier avant de le faire ;-)&lt;/p&gt;
&lt;p&gt;Je liste tous les objets de Nagios, puis je compare avec ceux de mon instance 3.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;SELECT count(*) FROM nagios_objects;
+----------+
| count(*) |
+----------+
| 11820 |
+----------+
1 row in set (0.00 sec)
SELECT count(*) FROM nagios_objects where instance_id = 3;
+----------+
| count(*) |
+----------+
| 815 |
+----------+
1 row in set (0.00 sec)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Connaissant mon infra, cela parait cohérent. Le Poller1 est un petit poller peu chargé. Je peux donc utiliser ma baguette magique : on a de la chance, NDO prévoit un « flag » is_active qui permet d’activer ou non un objet. Et il se trouve que Centreon gère correctement ce flag. Pour cacher nos hôtes fantômes dans Centreon, il suffit juste de les désactiver avec la commande suivante :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;UPDATE nagios_objects SET is_active=0 WHERE instance_id = 3;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Normalement c’est quasi-instantané. Tous les hôtes précédemment liés au Poller1 doivent disparaître de l’interface.&lt;/p&gt;
&lt;p&gt;Et la même en un peu plus chirurgical :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;select object_id,instance_id,name1,is_active from nagios_objects where name1 like &amp;amp;quot;VIEUX_SERVEUR_OUBLIE_HS&amp;amp;quot;;
+-----------+-------------+-------------------------+-----------+
| object_id | instance_id | name1 | is_active |
+-----------+-------------+-------------------------+-----------+
| 6462 | 4 | VIEUX_SERVEUR_OUBLIE_HS | 1 |
| 6472 | 4 | VIEUX_SERVEUR_OUBLIE_HS | 1 |
+-----------+-------------+-------------------------+-----------+
UPDATE nagios_objects SET is_active=0 where name1 like &amp;amp;quot;VIEUX_SERVEUR_OUBLIE_HS&amp;amp;quot;;
Query OK, 2 rows affected (0.01 sec)
Rows matched: 2 Changed: 2 Warnings: 0
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="jaime-beaucoup-les-zèbres-les-rayures-sont-bien-parallèles"&gt;« J’aime beaucoup les zèbres, les rayures sont bien parallèles. »
&lt;/h2&gt;&lt;p&gt;J’ai eu le plaisir récemment de ré-écouter le sketch de Pierre Desproges : « Le maniaque ». Voilà la toute première phrase du sketch :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;« Je ne suis pas à proprement parler ce qu’on appelle un maniaque. Simplement j’aime que tout brille et que tout soit bien rangé. »&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Si vous non plus, vous ne pouvez pas vous résoudre à laisser trainer dans NDO des milliers d’objets, certes inactivés, mais toujours bien présents, cachés sous le tapis, la suite de cet article est pour vous (ou si vous êtes simplement curieux).&lt;/p&gt;
&lt;p&gt;Pour descendre un peu plus dans les arcanes de NDO, je vous propose de regarder un peu ce qu’on peut trouver avec les requêtes suivantes :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;select host_id,instance_id,display_name
from nagios_hosts
where instance_id != 1 limit 10;
+---------+-------------+--------------------+
| host_id | instance_id | display_name |
+---------+-------------+--------------------+
| 32149 | 2 | AAAAAA-HHHHHH01 |
| 32157 | 2 | AAAAAA-DADADADAD02 |
| 32150 | 2 | AAAAAA-DAD02 |
| 32146 | 2 | AAAAAA-GGGG |
| 32151 | 2 | AAAAAA-DDDDDA |
| 32152 | 2 | AAAAAA-DDDDDB |
| 32153 | 2 | AAAAAA-EEEE02 |
| 32154 | 2 | AAAAAA-FFFFFFF02 |
| 32155 | 2 | AAAAAA-FFFFFF02 |
| 32156 | 2 | AAAAAA-UUUUUUUUU01 |
+---------+-------------+--------------------+
10 rows in set (0.00 sec)
select object_id,instance_id,name1,name2,is_active from nagios_objects where instance_id != 1 limit 10;
+-----------+-------------+------------------+-------+-----------+
| object_id | instance_id | name1 | name2 | is_active |
+-----------+-------------+------------------+-------+-----------+
| 3307 | 0 | XXXXXXXXXX_ILO | ping | 0 |
| 5365 | 3 | check_icmp | NULL | 0 |
| 5366 | 3 | AAAAAA-CCC01 | NULL | 0 |
| 5367 | 3 | 24x7 | NULL | 0 |
| 5368 | 3 | AAAAAA-BBBBBA | NULL | 0 |
| 5369 | 3 | AAAAAA-BBBBBB | NULL | 0 |
| 5370 | 3 | AAAAAA-AAA | NULL | 0 |
| 5371 | 3 | AAAAAA-SAVE | NULL | 0 |
| 5372 | 3 | AAAAAA-SGBD01 | NULL | 0 |
| 5373 | 3 | AAAAAA-VMOTION01 | NULL | 0 |
+-----------+-------------+------------------+-------+-----------+
10 rows in set (0.01 sec)
select service_id,host_object_id,instance_id,display_name
from nagios_services
where instance_id != 1 limit 10;
+------------+----------------+-------------+------------------+
| service_id | host_object_id | instance_id | display_name |
+------------+----------------+-------------+------------------+
| 213526 | 4686 | 2 | BasculeClusterHA |
| 213527 | 4686 | 2 | ping |
| 213528 | 4687 | 2 | BasculeClusterHA |
| 213529 | 4687 | 2 | ping |
| 213530 | 4688 | 2 | ping |
| 213678 | 4669 | 2 | /appli |
| 213531 | 4689 | 2 | ping |
| 213532 | 4700 | 2 | ping |
| 213533 | 4703 | 2 | ping |
| 213534 | 4704 | 2 | ping |
+------------+----------------+-------------+------------------+
10 rows in set (0.00 sec)
select nagios_hosts.display_name,nagios_services.display_name,nagios_services.instance_id
from nagios_hosts,nagios_objects,nagios_services
where nagios_hosts.host_object_id = nagios_objects.object_id
and nagios_services.host_object_id = nagios_objects.object_id
and nagios_services.host_object_id in
(select host_object_id from nagios_hosts where instance_id = 3) limit 10;
+-----------------+-------------------------------+-------------+
| display_name | display_name | instance_id |
+-----------------+-------------------------------+-------------+
| SRV | BasculeClusterHA | 3 |
| SRV | check_http_aaaa | 3 |
| SRV | check_mountpoint_cifs_log | 3 |
| SRV | check_mountpoint_cifs_spl | 3 |
| SRV | ping_lan | 3 |
| SRV2 | BasculeClusterHA | 3 |
| SRV2 | ping_lan | 3 |
| SRV3 | BasculeClusterHA | 3 |
| SRV3 | ping_lan | 3 |
| ILO | ping_lan | 3 |
+-----------------+-------------------------------+-------------+
10 rows in set (0.01 sec)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;[Aparté]Je pense qu’il faut que je trouve un module WordPress pour pseudonymiser les données automatiquement, je me fatiguerais moins à changer le nom des serveurs&amp;hellip;[/Aparté]&lt;/p&gt;
&lt;p&gt;Comme vous pouvez le constater, il y en a partout : c’est terrible !&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;DELETE FROM nagios_hosts WHERE instance_id =3;
DELETE FROM nagios_services WHERE instance_id =3;
DELETE FROM nagios_hostgroups WHERE instance_id =3;
DELETE FROM nagios_servicegroups WHERE instance_id =3;
DELETE FROM nagios_objects WHERE instance_id =3;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/08/boom.gif"
loading="lazy"
&gt;&lt;/p&gt;</description></item><item><title>check_emc_rlp : supervision des LUNs dans le RLP sur baies VNX EMC²</title><link>https://blog.zwindler.fr/2017/04/25/plugin-de-supervision-rlp-emc%C2%B2-check_emc_rlp/</link><pubDate>Tue, 25 Apr 2017 12:00:51 +0000</pubDate><guid>https://blog.zwindler.fr/2017/04/25/plugin-de-supervision-rlp-emc%C2%B2-check_emc_rlp/</guid><description>&lt;img src="https://blog.zwindler.fr/2017/04/check_emc_rlp03.webp" alt="Featured image of post check_emc_rlp : supervision des LUNs dans le RLP sur baies VNX EMC²" /&gt;&lt;h2 id="dans-la-série-"&gt;Dans la série &amp;hellip;
&lt;/h2&gt;&lt;p&gt;&amp;hellip; plugins pour les outils de supervision Nagios(r) like et « Nagios(r) compatibles » (Icinga, Naemon, Shinken, …), je met à disposition un script que j’ai écris il y a quelques années et qui permet de vérifier et de grapher que vous disposez toujours des LUNs dans le RLP (Reserved LUN Pool). Je l’ai appelé sobrement check_emc_rlp et j’en parle aussi dans &lt;a class="link" href="https://blog.zwindler.fr/2017/04/18/naviseccli-pour-piloter-ses-baies-emc-vnx-depuis-linux/" &gt;cet article à propos de NaviSecCli&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Mon problème initial était que j’avais plusieurs fois eu mes snapshots bloqués lors de l’utilisation un peu trop intensive du LUN source. Il n’y avait plus de place sur les LUNs dans le RLP, ce qui a pour effet de bloquer le snapshot et donc la base de préproduction que j’avais dessus. Un petit script qui vérifie qu’il y a toujours au moins 1 LUN non utilisé par LUN snapshoté permet de garder un peu de marge avant plantage.&lt;/p&gt;
&lt;p&gt;Voilà ce que donne ce &lt;code&gt;check_emc_rlp&lt;/code&gt; une fois mis en place dans Centreon :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/04/check_emc_rlp04.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Le script nous informe qu’il reste suffisamment de LUN dans le RLP lorsqu’il y a des snapshots actifs&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/04/check_emc_rlp01.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;La courbe de performance (PERFDATA Nagios) indique ici qu’il reste 3 LUN par LUN snapshoté (12 en fait en tout), et qu’on remonte à 6 par LUN à minuit (moment où on rafraichit notre préproduction et que les snapshots se vident)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/04/check_emc_rlp03.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;La vue agrégée avec à la fois le nombre de LUN disponibles dans le RLP ainsi que le remplissage des LUN utilisés pour stocker le différentiel, par LUN snapshoté. Ce qui est intéressant ici c’est qu’on voit bien l’évolution du remplissage et le moment où la baie décide qu’elle a besoin d’un nouveau LUN en provenance du RLP&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Comme d’habitude pour le téléchargement et la documentation, c’est sur &lt;a class="link" href="https://exchange.nagios.org/directory/Plugins/Hardware/Storage-Systems/SAN-and-NAS/EMC-Clarion/check_emc_rlp/details" target="_blank" rel="noopener"
&gt;Nagios Exchange&lt;/a&gt; et &lt;a class="link" href="https://github.com/zwindler/check_emc_rlp" target="_blank" rel="noopener"
&gt;Github&lt;/a&gt; que ça se passe.&lt;/p&gt;
&lt;p&gt;Pour rappel, vous trouverez aussi mes autres plugins Nagios dans le &lt;a class="link" href="https://github.com/zwindler/" target="_blank" rel="noopener"
&gt;même repository Github.&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Superviser des onduleurs/UPS avec Nagios/Centreon et SNMP</title><link>https://blog.zwindler.fr/2017/01/17/superviser_ups_centreon_snmp/</link><pubDate>Tue, 17 Jan 2017 13:00:52 +0000</pubDate><guid>https://blog.zwindler.fr/2017/01/17/superviser_ups_centreon_snmp/</guid><description>&lt;img src="https://blog.zwindler.fr/2016/12/ups.webp" alt="Featured image of post Superviser des onduleurs/UPS avec Nagios/Centreon et SNMP" /&gt;&lt;h2 id="être-alerté-par-londuleur-en-snmp"&gt;Être alerté par l’onduleur en SNMP
&lt;/h2&gt;&lt;p&gt;Il n’est pas rare que les onduleurs (ou Uninterrupted Power Supply chez nos amis anglosaxons), même sans être très haut de gamme, disposent de sortie Ethernet permettant de superviser l’état de l’onduleur, sa charge, &amp;hellip;&lt;/p&gt;
&lt;p&gt;Généralement, ce genre d’onduleur est également livré avec des clients propriétaires qui vous permettent de configurer la partie réseau de l’onduleur, puis ensuite de définir des alertes, voire des actions à réaliser lorsque l’onduleur commence à se décharger. Cependant, dans un environnement un tant soit peu industrialisé, ce genre d’outil est rarement pratique :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Il y a généralement déjà un outil de supervision en place, et en ajouter un va à l’encontre de l’efficacité pour les équipes support. Des consoles de supervision doivent être installés sur les postes des administrateur.&lt;/li&gt;
&lt;li&gt;Les agents pour éteindre les serveurs alimentés doivent être installés (ce qui induit une tâche d’exploitation/maintenance supplémentaire), parfois en s’appuyant sur des versions hors d’age de Java comme dépendance, et avec bien peu de support une fois que le produit est chez vous.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Heureusement, la plupart des onduleurs exposent également une MIB SNMP standard, que vous pouvez donc très simplement ajouter pour réaliser vous même votre propre supervision. Et même pourquoi pas votre propre agent d’extinction, en se basant sur un script ainsi qu’un agent déjà présent sur les machines pour la supervision (NSClient/NRPE pour moi).&lt;/p&gt;
&lt;p&gt;Pour trouver cette MIB (.1.3.6.1.4.1.21111.1.1, originalement nommée UPS), j’ai tout simplement utiliser un &lt;em&gt;snmpwalk&lt;/em&gt; sous Unix en me connectant à l’adresse IP de l’onduleur après configuration. Sous Windows, on peut aussi utiliser un utilitaire graphique pour faire la même chose, notamment avec iReasoning MIB Browser qui nous donne également quelques informations sur les indicateurs disponibles.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/11/ups2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;MIB Browser donne des informations sur la MIB de manière graphique, ce qui peut être plus lisible qu’un simple snmpwalk&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="quoi-surveiller-"&gt;Quoi surveiller ?
&lt;/h2&gt;&lt;p&gt;Les indicateurs de la MIB UPS qui m’ont parus les plus opportuns à surveiller sont les suivants :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;upsBatStatus (.1.3.6.1.4.1.21111.1.1.3.1.0)&lt;/strong&gt; : L’état de la batterie qui peut être chargé ou en cours de déchargement. Tout ce qui n’est pas 2 est inquiétant.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;upsBatEstChargeRemaining (.1.3.6.1.4.1.21111.1.1.3.4.0)&lt;/strong&gt; : L’estimation de la charge restant de la batterie en %age. Si on descend sous 90% c’est que l’onduleur se décharge et que ce n’est pas une microcoupure !&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;upsBatEstMinutesRemaining (.1.3.6.1.4.1.21111.1.1.3.3.0)&lt;/strong&gt; : L’estimation du temps restant avant que la batterie soit épuisée. Je trouve cet indicateur pratique pour 2 raisons
&lt;ul&gt;
&lt;li&gt;On peut lancer des actions d’urgence (ssh + shutdown sur tous les linux) à partir d’un certain temps avant l’épuisement plutôt qu’un pourcentage, car on peut estimer que 5 minutes avant l’échéance, on aura plus le temps de rétablir avant coupure. Ce qui est plus difficile à fixer en pourcentage.&lt;/li&gt;
&lt;li&gt;On peut éventuellement détecter un problème sur les batteries ou sur la charge de l’onduleur si en fonctionnement normal (sur secteur) on se retrouve avec un temps de charge trop bas.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;upsBatSecondsOnBattery (.1.3.6.1.4.1.21111.1.1.3.2.0)&lt;/strong&gt; : Le nombre de secondes depuis que l’onduleur est sur batterie et n’est donc plus sur secteur. Si on dépasse 0, c’est mauvais signe mais pour éviter les alertes intempestives j’ai mis 2.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Et comme je suis sympa, je vous passe la configuration Nagios/Centreon (ou tout autre produit compatible) associée qui vous permettra d’obtenir les indicateurs en question sans effort. Enjoy !&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/11/ups.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;define command {
command_name check_snmp
command_line $USER1$/check_snmp -H $HOSTADDRESS$ -o $ARG1$ -w $ARG2$ -c $ARG3$
}
define service {
service_description Template_par_défaut_pour_tous_les_serivces
name generic-service
contacts generic-contact
check_period 24x7
notification_period 24x7
max_check_attempts 5
check_interval 5
retry_interval 5
notification_interval 15
notification_options w,u,c
first_notification_delay 0
register 0
notifications_enabled 1
}
define service {
service_description 2_tentatives_et_interval_de_5_minutes_en_24_7
name 2retry_5min_24x7
check_period 24x7
max_check_attempts 2
check_interval 5
retry_interval 5
notification_interval 5
register 0
use generic-service
}
define service {
service_description Check_SNMP_upsBatStatus
name snmp_upsBatStatus
check_command check_snmp!.1.3.6.1.4.1.21111.1.1.3.1.0!2!2
register 0
use 2retry-5min-24x7
}
define service {
service_description Check_SNMP_upsBatEstChargeRemaining
name snmp_upsBatEstChargeRemaining
check_command check_snmp!.1.3.6.1.4.1.21111.1.1.3.4.0!90:!80:
register 0
use 2retry-5min-24x7
}
define service {
service_description Check_SNMP_upsBatEstMinutesRemaining
name snmp_upsBatEstMinutesRemaining
check_command check_snmp!.1.3.6.1.4.1.21111.1.1.3.3.0!30:!20:
register 0
use 2retry-5min-24x7
}
define service {
service_description Check_SNMP_upsBatSecondsOnBattery
name snmp_upsBatSecondsOnBattery
check_command check_snmp!.1.3.6.1.4.1.21111.1.1.3.2.0!2!2
register 0
use 2retry-5min-24x7
}
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>Module Ansible ansible-module-clapi : automatiser la configuration dans Centreon</title><link>https://blog.zwindler.fr/2016/12/20/ansible-module-clapi-centreon/</link><pubDate>Tue, 20 Dec 2016 13:00:49 +0000</pubDate><guid>https://blog.zwindler.fr/2016/12/20/ansible-module-clapi-centreon/</guid><description>&lt;img src="https://blog.zwindler.fr/2016/12/centreon_clapi_3.webp" alt="Featured image of post Module Ansible ansible-module-clapi : automatiser la configuration dans Centreon" /&gt;&lt;h2 id="avant-de-parler-de-ansible-module-clapi"&gt;Avant de parler de ansible-module-clapi
&lt;/h2&gt;&lt;p&gt;Cet article fait parti d’une suite d’articles ayant trait à l’automatisation de la configuration de la supervision Centreon à l’aide de CLAPI et d’Ansible, dont 2 que j’avais lu sur &lt;a class="link" href="https://www.monitoring-fr.org/" target="_blank" rel="noopener"
&gt;monitoring-fr&lt;/a&gt;. Dans &lt;a class="link" href="https://blog.zwindler.fr/2016/12/07/automatisation-de-la-supervision-avec-centreon-et-ansible-3/" &gt;l’article précédent&lt;/a&gt;, j’avais montré comment aller encore un peu plus loin que ce que Cédric Temple nous avait présenté.&lt;/p&gt;
&lt;p&gt;A la fin de l’article, j’introduisais le fait qu’Ansible n’est pas seulement un outil permettant d’exécuter des tâches. Ansible est surtout un gestionnaire de configuration (comme Puppet, Salt, &amp;hellip;).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ansible&lt;/em&gt; is the simplest way to automate apps and IT infrastructure. Application Deployment + Configuration Management + Continuous Delivery.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Le but est de garantir qu’un ensemble de serveurs donnés, on a &lt;strong&gt;toujours&lt;/strong&gt; la même configuration.&lt;/p&gt;
&lt;p&gt;Si on utilise Ansible de cet manière, le playbook n’a plus vocation a être utilisé « one shot » après installation d’un serveur. La gestion de la configuration de supervision devient un sous ensemble des configurations par défaut qui sont régulièrement vérifiées. Les playbooks qui définissent le SI sur l’ensemble des serveurs pour s’assurer qu’ils sont tous « conformes », tout est automatique et on élimine ainsi le risque d’erreurs humaines (type « oublis » ou « suppression accidentelle »).&lt;/p&gt;
&lt;h2 id="quelle-conséquence-sur-nos-playbooks-"&gt;Quelle conséquence sur nos playbooks ?
&lt;/h2&gt;&lt;p&gt;Car bien entendu, cela demande un peu plus de travail et de réflexion.&lt;/p&gt;
&lt;h3 id="les-exécutions-multiples"&gt;Les exécutions multiples
&lt;/h3&gt;&lt;p&gt;Si on exécute plusieurs fois le même playbook sur un serveur, -il faut impérativement que les commandes de ce playbook n’aient aucune incidence sur l’état du serveur si celui ci est déjà correctement configuré.&lt;/p&gt;
&lt;p&gt;J’insiste&amp;hellip; La modification &lt;strong&gt;ne doit ce faire que si nécessaire&lt;/strong&gt;. Dans le langage Ansible, on dit d’une commande qu’elle est &lt;strong&gt;idempotent&lt;/strong&gt;. Retenez bien, c’est important ;-).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/11/73068978.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Prenons pour exemple l’ajout d’une ligne dans le fichier &lt;strong&gt;/etc/sudoers&lt;/strong&gt; pour permettre à notre client NRPE d’avoir le droit de réaliser un sudo pour avoir l’exhaustivité des informations renvoyées par multipath. On pourrait « naïvement » réaliser la tâche suivante dans Ansible de la façon suivante :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;---
- hosts: all
tasks:
- shell: &amp;#39;echo &amp;#39;nrpe ALL = NOPASSWD: /sbin/multipath&amp;#39; &amp;gt;&amp;gt; /etc/sudoers&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ce playbook fonctionnerait parfaitement.&lt;/p&gt;
&lt;h3 id="vraiment-"&gt;Vraiment ?
&lt;/h3&gt;&lt;p&gt;Pour autant, à chaque exécution du playbook, une ligne sera ajoutée dans chaque serveur et on se retrouvera potentiellement avec des effets de bords à force de modifications successives.&lt;/p&gt;
&lt;p&gt;On peut repérer ces changements à l’aide du récapitulatif en fin d’exécution qui serait toujours en &lt;em&gt;changed&lt;/em&gt;.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;PLAY RECAP *********************************************************************
srv-nouveau-01 : ok=11 changed=1 unreachable=0 failed=0
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;En fait, il est recommandé d’éviter d’utiliser les modules &lt;strong&gt;shell&lt;/strong&gt; et &lt;strong&gt;command&lt;/strong&gt; d’Ansible lorsqu’il existe des modules pour réaliser la même action. Typiquement dans ce cas là, l’idéal sera plutôt d’utiliser le module &lt;strong&gt;lineinfile&lt;/strong&gt;, qui permet de s’assurer qu’une ligne bien précise est présente ou non, et de ne surtout rien faire (et donc ne rien modifier) si la ligne est déjà présente.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;---
- hosts: all
tasks:
- lineinfile: &amp;#39;dest=/etc/sudoers state=present line=&amp;#39;nrpe ALL = NOPASSWD: /usr/sbin/pvs, /sbin/multipath&amp;#39;&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Pour vérifier que votre playbook est idempotent&lt;/strong&gt;, le plus simple est donc de lancer plusieurs fois un même playbook et de vérifier que le résultat à la seconde exécution est bien du type :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;PLAY RECAP *********************************************************************
srv-nouveau-01 : ok=12 changed=0 unreachable=0 failed=0
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="les-erreurs"&gt;Les erreurs
&lt;/h3&gt;&lt;p&gt;Il ne faut pas non plus que les commandes renvoient un code erreur lorsqu’elles s’exécutent pour la 2ème fois. Auquel cas, l’exécution du playbook sera arrêtée en cours de route.&lt;/p&gt;
&lt;p&gt;Si j’exécute une première fois le playbook centreon_add_host.yml, j’obtiendrais le retour suivant.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;TASK [monitor : centreon add host] *********************************************
changed: [srv-nouveau-01 -&amp;gt; superviseur.company.lan]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Tout va bien, mon hôte apparaît dans Centreon. Par contre, si je l’exécute une seconde fois &amp;hellip;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;TASK [monitor : centreon add host] *********************************************
fatal: [srv-nouveau-01 -&amp;gt; superviseur.company.lan]: FAILED! =&amp;gt; {&amp;#39;changed&amp;#39;: true, &amp;#39;cmd&amp;#39;: &amp;#39;/usr/bin/centreon -u admin -p admin -o HOST -a add -v \&amp;#39;srv-nouveau-01;srv-nouveau-01;192.168.1.12;generic-host;central;Ping_LAN\&amp;#39;&amp;#39;, &amp;#39;delta&amp;#39;: &amp;#39;0:00:00.098198&amp;#39;, &amp;#39;end&amp;#39;: &amp;#39;2016-07-25 17:17:01.268410&amp;#39;, &amp;#39;failed&amp;#39;: true, &amp;#39;rc&amp;#39;: 1, &amp;#39;start&amp;#39;: &amp;#39;2016-07-25 17:17:01.170212&amp;#39;, &amp;#39;stderr&amp;#39;: &amp;#39;&amp;#39;, &amp;#39;stdout&amp;#39;: &amp;#39;Object already exists (srv-nouveau-01)&amp;#39;, &amp;#39;stdout_lines&amp;#39;: [&amp;#39;Object already exists (srv-nouveau-01)&amp;#39;], &amp;#39;warnings&amp;#39;: []}
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="ignorer-les-erreurs"&gt;Ignorer les erreurs
&lt;/h3&gt;&lt;p&gt;La méthode la plus simple pour gérer ce problème serait d’ignorer les erreurs. Ici CLAPI ne renvoie une erreur que pour m’informer que l’hôte existe déjà. Donc la gestion des erreurs et ici l’ajout multiple d’un même hôte est correctement géré par CLAPI.&lt;/p&gt;
&lt;p&gt;Ansible le permet à l’aide de l’option &lt;em&gt;ignore_errors: True&lt;/em&gt;. Dans ce cas là, l’exécution de la commande CLAPI qui renvoie une erreur sera ignoré dans le cas où l’hôte est déjà présent.&lt;/p&gt;
&lt;p&gt;Mais la solution n’est pas satisfaisante : on peut se retrouver à masquer de vraies erreurs. Par exemple, si je n’ai pas fourni le bon chemin d’accès au binaire, l’erreur sera cachée et je ne saurai pas que mon playbook ne fonctionne jamais correctement. On peut imaginer plein d’autres cas d’erreurs qui nous laisseraient penser que l’ajout d’hôte se fait bien alors qu’en fait l’erreur est juste masquée.&lt;/p&gt;
&lt;p&gt;A l’inverse, on peut trouver des cas où masquer l’erreur peut être légitime. Vous pouvez donc aller voir &lt;a class="link" href="https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_conditionals.html" target="_blank" rel="noopener"
&gt;ici&lt;/a&gt; pour plus de renseignements.&lt;/p&gt;
&lt;h3 id="tester-préalablement-la-présence-de-lhôte"&gt;Tester préalablement la présence de l’hôte
&lt;/h3&gt;&lt;p&gt;Toujours dans l’esprit &lt;strong&gt;idempotent&lt;/strong&gt;, le mieux est donc de vérifier préalablement que le serveur n’est pas déjà renseigné avant de réaliser l’action d’ajout dans Centreon.&lt;/p&gt;
&lt;p&gt;Malheureusement, à date, il n’existe pas de fonction dans CLAPI permettant de faire une recherche dans un seul hôte. Je le leur soufflerais peut être ;-). En attendant, on peut quand même s’en sortir grâce à la fonction &lt;em&gt;show&lt;/em&gt; qui affiche une liste de tous les serveurs et un &lt;em&gt;grep&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;En fonction de la présence ou non de la ligne, on obtiendra un code retour de 0 ou 1, ce qui nous permet de valider la présence ou non du serveur.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;- name: centreon check presence
shell: /usr/bin/centreon -u &amp;#39;{{ clapi_username }}&amp;#39; -p &amp;#39;{{ clapi_password }}&amp;#39; -o HOST -a show | grep &amp;#39;{{ inventory_hostname }};&amp;#39; &amp;gt;/dev/null
delegate_to: &amp;#39;{{ centreon_poller }}&amp;#39;
register: centreon_output
- name: centreon add host
shell: /usr/bin/centreon -u &amp;#39;{{ clapi_username }}&amp;#39; -p &amp;#39;{{ clapi_password }}&amp;#39; -o HOST -a add -v &amp;#39;{{ inventory_hostname }};{{ inventory_hostname }};{{ ansible_default_ipv4.address }};generic-host;{{ centreon_poller }};Ping_LAN&amp;#39;
delegate_to: &amp;#39;{{ centreon_poller }}&amp;#39;
when: centreon_output.rc != 0
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Cette solution fonctionne mais est loin d’être optimale. D’abord, elle se base sur &lt;em&gt;grep&lt;/em&gt;, un binaire externe à CLAPI, pour valider la présence du serveur. Ça peut ne pas marcher à tous les coups !&lt;/p&gt;
&lt;p&gt;Ensuite, le module &lt;strong&gt;shell&lt;/strong&gt; à la fâcheuse caractéristique de ne pas être &lt;strong&gt;idempotent&lt;/strong&gt; (c’est une obsession). A chaque exécution, Ansible considérera que le simple fait d’exécuter la commande change le système et affichera &lt;strong&gt;toujours&lt;/strong&gt; « changed » même quand en réalité vos serveurs n’auront pas été modifiés !&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;PLAY RECAP *********************************************************************
srv-nouveau-01 : ok=10 changed=1 unreachable=0 failed=0
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Avec &lt;strong&gt;shell&lt;/strong&gt; il n’y a pas vraiment de parade au niveau Ansible. L’idéal serait donc pouvoir disposer d’un module Ansible capable d’interagir avec CLAPI tout en étant idempotent. #Teasing ;-)&lt;/p&gt;
&lt;h2 id="créer-un-nouveau-module-ansible"&gt;Créer un nouveau module Ansible
&lt;/h2&gt;&lt;p&gt;Heureusement il est très facile de créer un nouveau module dans Ansible. &lt;a class="link" href="http://docs.ansible.com/ansible/developing_modules.html" target="_blank" rel="noopener"
&gt;Un exemple est proposé sur le site officiel&lt;/a&gt; avec des guides pour la proposition de module pour ajout dans les « extra modules ». Et j’ai également pas mal utilisé ce site pour me guider (blog.toast38coza.me, lien mort pas sauvegardé dans Internet Archive).&lt;/p&gt;
&lt;p&gt;J’ai donc développé pour mon usage personnel des modules Ansible qui utilisent CLAPI et qui permettent pour l’instant de :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ajouter/supprimer un hôte&lt;/li&gt;
&lt;li&gt;ajouter/supprimer des templates d’hôtes à un hôte&lt;/li&gt;
&lt;li&gt;ajouter/supprimer un groupe d’hôtes&lt;/li&gt;
&lt;li&gt;ajouter/supprimer des serveurs dans un groupe d’hôtes&lt;/li&gt;
&lt;li&gt;régénérer la configuration et redémarrer un poller pour prise en compte des modifications&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Et le code est disponible &lt;a class="link" href="https://github.com/zwindler/ansible-module-clapi" target="_blank" rel="noopener"
&gt;ici sur mon Github dans le projet ansible-module-clapi&lt;/a&gt; sous licence GPLv3.&lt;/p&gt;
&lt;p&gt;Une fois les sources récupérées, vous pouvez exécuter ces modules Ansible complémentaires en créant un dossier librairie au même niveau que vos playbooks et en collant les fichiers Python du dépôt.&lt;/p&gt;
&lt;p&gt;Un dossier &lt;em&gt;test_suite&lt;/em&gt; contient le fichier hosts de cet article, le dossier group_vars avec les variables par groupes, ainsi qu’un playbook de test qui réalisera les actions suivantes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ajouter un hôte dans centreon&lt;/li&gt;
&lt;li&gt;supprimer ce même hôte de centreon&lt;/li&gt;
&lt;li&gt;le resupprimer pour vérifier que la suppression d’un hôte déjà supprimé ne provoque pas d’erreur car l’hôte n’existe plus&lt;/li&gt;
&lt;li&gt;supprimer un groupe testgroup qui n’existe pas pour voir si une erreur est renvoyée&lt;/li&gt;
&lt;li&gt;ajouter le groupe testgroup&lt;/li&gt;
&lt;li&gt;ajouter le groupe testgroup pour voir si cela génère une erreur à la 2ème exécution&lt;/li&gt;
&lt;li&gt;ajouter l’hôte au groupe testgroup&lt;/li&gt;
&lt;li&gt;ajouter un template à l’hôte&lt;/li&gt;
&lt;li&gt;si un template d’hôte a été ajouté (oui, on vient de le faire)
&lt;ul&gt;
&lt;li&gt;déclencher un « handler » =&amp;gt; appliquer à l’hôte l’ensemble des templates de services liés au template d’hôte&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;et si n’importe laquelle de ces actions a provoqué une modification sur la base de Centreon (toutes en réalité)
&lt;ul&gt;
&lt;li&gt;déclencher un « handler » =&amp;gt; régénérer la configuration et redémarrer le moteur&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="conclusion"&gt;Conclusion
&lt;/h3&gt;&lt;p&gt;Ceci vous permet d’avoir une vue d’ensemble des fonctionnalités disponibles pour l’instant. Ce n’est bien entendu qu’un début et je continuerai d’ajouter des fonctionnalités à partir de l’API CLAPI qui propose beaucoup plus de fonctionnalités.&lt;/p&gt;
&lt;p&gt;Pour autant, ce module me permet aujourd’hui automatiser complètement l’ajout et la suppression des hôtes dans mon serveur Centreon. Actuellement pratiquement 120 serveurs sont gérés de cette manière :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/11/centreon_ces02.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;J’attends bien entendu vos remarques, que ce soit sur le blog ou directement sur Github, avec impatience !&lt;/p&gt;</description></item><item><title>Automatisation de la supervision avec Centreon et Ansible (3)</title><link>https://blog.zwindler.fr/2016/12/07/automatisation-de-la-supervision-avec-centreon-et-ansible-3/</link><pubDate>Wed, 07 Dec 2016 13:00:47 +0000</pubDate><guid>https://blog.zwindler.fr/2016/12/07/automatisation-de-la-supervision-avec-centreon-et-ansible-3/</guid><description>&lt;img src="https://blog.zwindler.fr/2016/12/centreon_clapi_3.webp" alt="Featured image of post Automatisation de la supervision avec Centreon et Ansible (3)" /&gt;&lt;h2 id="articles-précédents-sur-centreon-et-ansible"&gt;Articles précédents sur Centreon et Ansible
&lt;/h2&gt;&lt;p&gt;Cet article fait suite aux deux articles rédigés en mai 2015 par Cédric Temple (&lt;a class="link" href="http://www.monitoring-fr.org/2015/05/automatisation-de-la-supervision-exemple-avec-centreon-et-ansible-1/" target="_blank" rel="noopener"
&gt;ici&lt;/a&gt; et &lt;a class="link" href="http://www.monitoring-fr.org/2015/05/automatisation-de-la-supervision-exemple-avec-centreon-et-ansible-2/" target="_blank" rel="noopener"
&gt;ici&lt;/a&gt;) qui donnent des pistes pour automatiser l’ajout de nœuds à superviser dans un console Centreon grâce à Ansible et CLAPI.&lt;/p&gt;
&lt;p&gt;Pour ceux qui ne connaissent pas &lt;a class="link" href="https://www.ansible.com/" target="_blank" rel="noopener"
&gt;Ansible&lt;/a&gt;, je vous invite fortement à vous documenter sur cet outil de déploiement et de gestion de configuration très complet et qui bénéficie en ce moment d’un fort engouement, surtout depuis qu’Ansible a été racheté par RedHat ;-).&lt;/p&gt;
&lt;p&gt;Et pour ceux qui ne connaissent pas &lt;a class="link" href="https://docs.centreon.com/fr/docs/api/clapi/" target="_blank" rel="noopener"
&gt;CLAPI&lt;/a&gt;, il s’agit d’une API mise à disposition avec &lt;a class="link" href="https://www.centreon.com/fr/" target="_blank" rel="noopener"
&gt;Centreon&lt;/a&gt;. Elle est installée par défaut dans les dernières versions. Elle permet de réaliser la totalité des opérations pouvant être faites depuis la console web en ligne de commande.&lt;/p&gt;
&lt;p&gt;Les deux articles sur &lt;strong&gt;Monitoring-fr&lt;/strong&gt; que je cite au début sont une bonne base pour appréhender ces deux sujets. Pour autant, on peut encore aller un peu plus loin et c’est pourquoi je vous propose de repartir de là où s’arrête l’article précédent.&lt;/p&gt;
&lt;h2 id="lexemple-de-lajout-de-lhôte"&gt;L’exemple de l’ajout de l’hôte
&lt;/h2&gt;&lt;p&gt;A la fin de l’article précédent, on sait donc :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;installer automatiquement les clients de supervision sur un nouvel hôte&lt;/li&gt;
&lt;li&gt;et réaliser de manière unitaire via Ansible et des playbooks l’ajout et la modification d’hôtes dans Centreon.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;J’aimerai revenir sur l’ajout d’hôtes dans Centreon. Pour reprendre l’exemple du playbook d’ajout d’hôtes de Cédric :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat centreon_add_host.yml
- name: centreon add host
shell: /usr/share/centreon/www/modules/centreon-clapi/core/centreon -u admin -p admin -o HOST -a add -v &amp;#39;{{ inventory_hostname }};{{ inventory_hostname }};{{ ansible_default_ipv4.address }};generic-host;central;ALL_HOST&amp;#39;
delegate_to: superviseur.company.lan
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Et voici le fichier d’inventaire dans lequel on déclare l’ensemble de nos serveurs, triés par groupes.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat /etc/ansible/hosts #fichier hosts d&amp;#39;Ansible
#ne pas confondre avec le hosts d&amp;#39;un serveur Linux
[serveurs-centreon]
superviseur.company.lan
pollerprod.company.lan
[serveurs-prod]
srv-prod-01
srv-prod-02
[serveurs-rect]
srv-rect-01
srv-rect-02
[nouveaux]
srv-nouveau-01
srv-nouveau-02
[serveurs-linux:children]
serveurs-prod
serveurs-rect
nouveaux
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Dans cet exemple simple, la première chose qu’on se dit si on regarde un peu rapidement, c’est qu’on aurait pu réaliser cet ajout à la main (ou via un script) avec CLAPI.&lt;/p&gt;
&lt;p&gt;Le gain apporté par Ansible se situe « seulement » dans l’apport des variables &lt;em&gt;inventory_hostname&lt;/em&gt; et &lt;em&gt;ansible_default_ipv4.address&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Ici on tire partie de la faculté qu’a Ansible de récupérer des « facts » sur les machines, telle que l’adresse IP, que nous n’avons pas eu à renseigner.&lt;/p&gt;
&lt;p&gt;C’est déjà un bon point par rapport à un script ou une commande à la main &amp;hellip; mais on peut faire mieux !!&lt;/p&gt;
&lt;h2 id="aller-plus-loin--avec-les-variables-de-groupes"&gt;Aller plus loin : avec les variables de groupes
&lt;/h2&gt;&lt;p&gt;La première chose que je vais montrer dans cet article est qu’on peut également affecter aux groupes d’hôtes dans Ansible des variables.&lt;/p&gt;
&lt;p&gt;Dans notre exemple, je vais donc créer un répertoire &lt;em&gt;group_vars&lt;/em&gt; dans lequel je vais créer des fichiers de configuration dédiés à chaque groupe. J’en créé un par groupe (ou pas), et Ansible analysera automatiquement le répertoire group_vars et appliquera à mes hôtes toutes ces variables en fonction de ses groupes.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat /etc/ansible/group_vars/serveurs-linux.yml
#NRPE Servers
nrpe_servers: [&amp;#39;192.168.100.10&amp;#39;, &amp;#39;192.168.100.11&amp;#39;]
#Poller Centreon
centreon_server: &amp;#39;superviseur.company.lan&amp;#39;
centreon_pollername : &amp;#39;Central&amp;#39;
centreon_clapi_username : &amp;#39;admin&amp;#39;
centreon_clapi_password : &amp;#39;admin&amp;#39;
centreon_clapi_path : &amp;#39;/usr/share/centreon/www/modules/centreon-clapi/core/centreon&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Je modifie donc mon playbook de la façon suivante :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat centreon_add_host.yml
---
- name: centreon add host
shell: &amp;#39;{{centreon_clapi_path}}&amp;#39; -u &amp;#39;{{ centreon_clapi_username }}&amp;#39; -p &amp;#39;{{ centreon_clapi_password }}&amp;#39; -o HOST -a add -v &amp;#39;{{ inventory_hostname }};{{ inventory_hostname }};{{ ansible_default_ipv4.address }};generic-host;{{ centreon_pollername }};ALL_HOST&amp;#39;
delegate_to: &amp;#39;{{centreon_server}}&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Le playbook est beaucoup plus &lt;em&gt;réutilisable&lt;/em&gt; qu’avant. Qu’est ce qui a changé ?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;J’ai variabilisé le chemin vers le binaire d’appel de CLAPI, qui était quand même vraiment long  (Même si on préfèrera probablement plutôt ajouter le chemin dans le PATH, simplement) !&lt;/li&gt;
&lt;li&gt;Je n’ai plus à renseigner le username et le mot de passe pour CLAPI à chaque appel.&lt;/li&gt;
&lt;li&gt;Si j’ai plusieurs serveurs Centreon (plusieurs réseaux distincts par exemple), je n’ai qu’à créer un groupe et un fichier de variables dans group_vars dans lequel je renseignerai « centreon_server », « clapi_username » et « clapi_password » différents. Mon playbook restera inchangé.&lt;/li&gt;
&lt;li&gt;Si j’ai plusieurs pollers (pollerprod pour la prod dans cet exemple), je peux affecter le serveur directement au bon poller avec la variable « centreon_pollername ».&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="encore-un-peu-plus-loin--avec-les-groupes-et-lhéritage"&gt;Encore un peu plus loin : avec les groupes et l’héritage
&lt;/h2&gt;&lt;p&gt;Dans la configuration exemple que je donne plus haut, vous aurez peut être remarqué le groupe &lt;strong&gt;serveurs-linux&lt;/strong&gt; qui regroupe tous les serveurs des groupes serveurs-prod, serveurs-rect et nouveaux.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[serveurs-linux:children]
serveurs-prod
serveurs-rect
nouveaux
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;De cette manière, tous les paramètres communs à tous les serveurs linux peuvent être configurés au niveau serveurs-linux. Les variables seront héritées lors de l’exécution du playbook.&lt;/p&gt;
&lt;p&gt;On peut aussi utiliser les groupes comme conditions de l’exécution d’un playbook. Ainsi, le playbook suivant ne s’exécutera que si le serveur fait parti du groupe serveurs-prod.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat centreon_add_host_prod.yml
---
- name: centreon add host when in serveurs-prod
shell: &amp;#39;{{centreon_clapi_path}}&amp;#39; -u &amp;#39;{{ centreon_clapi_username }}&amp;#39; -p &amp;#39;{{ centreon_clapi_password }}&amp;#39; -o HOST -a add -v &amp;#39;{{ inventory_hostname }};{{ inventory_hostname }};{{ ansible_default_ipv4.address }};generic-host;{{ centreon_pollername }};ALL_HOST&amp;#39;
delegate_to: &amp;#39;{{centreon_server}}&amp;#39;
when: &amp;#34;&amp;#39;serveurs-prod&amp;#39; in group_names&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="toujours-plus-loin--avec-les-variables-et-les-templates"&gt;Toujours plus loin : avec les variables et les templates
&lt;/h2&gt;&lt;p&gt;Les variables sont vraiment un gros plus !&lt;/p&gt;
&lt;p&gt;Elles me permettent notamment de configurer les fichiers &lt;strong&gt;nrpe.conf&lt;/strong&gt; (ou &lt;strong&gt;ntpd.conf&lt;/strong&gt;, &lt;strong&gt;snmpd&lt;/strong&gt;, &lt;strong&gt;resolv.conf&lt;/strong&gt;, &amp;hellip;) pour accepter les connexions des bons serveurs en fonction de la localisation ou du groupe.&lt;/p&gt;
&lt;p&gt;La fonctionnalité la plus utile dans ce cas là est l’utilisation de &lt;strong&gt;templates&lt;/strong&gt;. Il s’agit de fichiers de configurations &lt;em&gt;variabilisés&lt;/em&gt; qui sont déployés uniquement si nécessaire sur les serveurs cibles en fonction de leurs variables.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Exemple d’un template de fichier nrpe.conf&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;{{ ansible_managed }}
cat nrpe.conf.j2
log_facility=daemon
pid_file=/var/run/nrpe.pid
server_port=5666
nrpe_user=nagios
nrpe_group=nagios
allowed_hosts={% for i in nrpe_servers %} {{ i }}, {% endfor %}
debug=0
command_timeout=60
connection_timeout=300
command[check_users]=/libexec/check_users -w 5 -c 10
[...]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Le playbook suivant permettra de le déployer sur l’ensemble de mes serveurs CentOS et Redhat le package du client &lt;strong&gt;nrpe&lt;/strong&gt; et ses dépendances et configurer le fichier &lt;strong&gt;nrpe.cfg&lt;/strong&gt; &lt;em&gt;en fonction du contexte&lt;/em&gt; (pour ceux qui n’ont pas encore ce fichier ou une version différente).&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat nrpe.yml
---
- hosts: all
tasks:
- yum: name={{ item }} state=installed
with_items:
- nrpe.x86_64
- net-snmp
- sysstat
- ...
- template: src=nrpe.cfg.j2 dest=/etc/nagios/nrpe.cfg
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Une fois exécuté avec la commande suivante, Ansible balayera l’ensemble des serveurs renseignés dans le fichier /etc/ansible/hosts, vérifiera qu’ils ont tous les packages &lt;strong&gt;nrpe&lt;/strong&gt; d’installés, puis déploiera sur les serveurs nécessaires le fichier de configuration en fonction des variables de chacun.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ansible-playbook -i /etc/ansible/hosts /etc/ansible/nrpe.yml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Et dans mon exemple on obtiendra un fichier de la forme suivante :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# Ansible managed: nrpe.cfg.j2 modified on 2016-08-14 10:52:51 by ansible on hostname
log_facility=daemon
pid_file=/var/run/nrpe.pid
server_port=5666
nrpe_user=nagios
nrpe_group=nagios
allowed_hosts=192.168.100.10, 192.168.100.11,
debug=0
command_timeout=60
connection_timeout=300
command[check_users]=/libexec/check_users -w 5 -c 10
[...]
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="mais-ansible-est-avant-tout-un-gestionnaire-de-configuration"&gt;Mais Ansible est avant tout un gestionnaire de configuration
&lt;/h2&gt;&lt;p&gt;Ansible ne sert pas uniquement à déployer des applications sur un serveur ou à exécuter des tâches automatisables. Au delà de ces rôles qu’il rempli à merveille, Ansible est surtout un gestionnaire de configuration (comme Puppet, Salt, &amp;hellip;).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ansible&lt;/em&gt; is the simplest way to automate apps and IT infrastructure. Application Deployment + Configuration Management + Continuous Delivery.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;On le voit avec mon dernier exemple : le but est de garantir qu’un ensemble de serveurs donnés, on a &lt;strong&gt;toujours&lt;/strong&gt; la même configuration.&lt;/p&gt;
&lt;p&gt;C’est le principe fondamental des outils de gestion de configuration et on comprend vite le gain :&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;
Si une modification est réalisée par erreur, elle sera automatiquement corrigée au prochain passage du playbook =&gt; on n’aura pas besoin d’attendre qu’un administrateur passe par hasard sur un serveur pour remarquer une anomalie sur le NTP par exemple.
&lt;/p&gt;
&lt;p&gt;Appliqué à la supervision et Centreon&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;
Je garanti que tous les serveurs inscris dans Ansible sont automatiquement ajoutés dans Centreon, en fonction de leur groupe. Si un administrateur oublie d’ajouter un serveur ou en supprime un, il sera ré-ajouté à l’exécution d’après sans intervention manuelle.
&lt;/p&gt;
&lt;p&gt;C’est donc de cette manière qu’il est conseillé d’utiliser Ansible. Le playbook n’est pas là pour être joué une fois par serveur, au fil de l’eau, car c’est source d’erreur ou d’oublis. On préférera plutôt exécuter régulièrement l’ensemble des playbooks qui définissent le SI sur l’ensemble des serveurs pour s’assurer qu’ils sont tous « conformes », sur tous les aspects dont la supervision.&lt;/p&gt;
&lt;p&gt;Le réel gain en terme d’automatisation ce trouve ici.&lt;/p&gt;
&lt;h2 id="et-dans-larticle-qui-va-suivre-"&gt;Et dans l’article qui va suivre ?
&lt;/h2&gt;&lt;p&gt;Et c’est sur cette deuxième partie que nous nous attarderons dans le prochain article : la gestion de playbook pour automatiser la configuration de la supervision pour l’ensemble de nos hôtes via des playbooks idempotent (#teasing) !&lt;/p&gt;</description></item></channel></rss>