<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Nagios on Zwindler's Reflection</title><link>https://blog.zwindler.fr/tags/nagios/</link><description>Recent content in Nagios on Zwindler's Reflection</description><generator>Hugo -- gohugo.io</generator><language>fr-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/nagios/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>Hacker un calendrier javascript (datepicker) avec un scraper python</title><link>https://blog.zwindler.fr/2017/05/09/hacker-calendrier-datepicker-scraper-python/</link><pubDate>Tue, 09 May 2017 12:00:26 +0000</pubDate><guid>https://blog.zwindler.fr/2017/05/09/hacker-calendrier-datepicker-scraper-python/</guid><description>&lt;img src="https://blog.zwindler.fr/2017/05/maitre-gims-scrape-comme-jamais2.webp" alt="Featured image of post Hacker un calendrier javascript (datepicker) avec un scraper python" /&gt;&lt;h2 id="mais-quel-rapport-entre-un-datepicker-javascript-et-un-scraper-python-"&gt;Mais quel rapport entre un datepicker javascript et un scraper python ?
&lt;/h2&gt;&lt;p&gt;Si vous ne savez ni ce qu’est un &lt;em&gt;datepicker&lt;/em&gt; en Javascript ou un &lt;em&gt;scraper python&lt;/em&gt;, je vous ai probablement déjà perdu. Pourtant, dans cet article ultra fun (ok, je suis bizarre), je vous montrerai comme j’ai automatisé via un scraper développé en python la recherche de dates libres dans un calendrier Javascript sur une page web :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;en scriptant la génération de cette page via une ligne de commande&lt;/li&gt;
&lt;li&gt;en simulant un clic pour passer au mois suivant&lt;/li&gt;
&lt;li&gt;et enfin en récupérant les bonnes valeurs (pour me les envoyer par email par exemple)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="commençons-donc-par-un-peu-de-storytelling"&gt;Commençons donc par un peu de storytelling
&lt;/h2&gt;&lt;p&gt;Depuis quelques mois, je vais régulièrement sur un site web un peu artisanal sur lequel je fais des réservations. Pour se faire, ce site web propose une page web simple dans lequel a été intégré un composant calendrier :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/05/calendrier1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Rien de particulièrement extraordinaire jusque là.&lt;/p&gt;
&lt;p&gt;Mais (car bien sûr il y a un mais), ce site à l’inconvénient d’être victime de son succès. Pour vous donner une idée, c’est le genre de site web qui tombe 30 secondes après l’ouverture des réservations à 19h00. Et que dès que l’administrateur système le relance entre 20 et 50 minutes plus tard, les réservations sont complètes en quelques minutes.&lt;/p&gt;
&lt;h2 id="méthode-1--f5"&gt;Méthode 1 : F5
&lt;/h2&gt;&lt;p&gt;La première méthode, probablement plébiscité par la plupart des utilisateurs, est à base de refresh frénétique du site web, jusqu’à ce qu’il devienne inopérant&amp;hellip; Une fois que le site est down, on peut continuer à appuyer sur F5 en espérant être le premier quand il reviendra.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/05/F5.gif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Le souci de cette méthode, c’est que je manque cruellement de patience et que je lâche l’affaire assez vite. Et donc tous les mois, les plus hargneux (ou les plus chanceux) me passent toujours devant car j’ai loupé le moment où le site redevient accessible.&lt;/p&gt;
&lt;h2 id="méthode-2--curl"&gt;Méthode 2 : cURL
&lt;/h2&gt;&lt;p&gt;En bon administrateur système que je suis, je ne pouvais pas me résoudre à en rester là. Mon problème principal étant d’être prévenu lorsque le site devenait à nouveau opérationnel, j’ai sorti ma boîte à outils habituelle : cURL !&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;cURL&lt;/strong&gt; (abréviation de &lt;em&gt;client URL request library&lt;/em&gt;), est un outil à tout faire quand on veut jouer avec des URL sur un serveur Linux. C’est simple et efficace.&lt;/p&gt;
&lt;p&gt;Dans le cas où le site est tombé suite à la connexion massive des internautes avides de réservations, j’ai donc créé un petit script basé sur ce &lt;em&gt;oneliner&lt;/em&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;curl http://@IP_ou_FQDN/le_chemin_de_la_page/ -I 2&amp;gt;/dev/null | head -n 1
HTTP/1.1 200 OK
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Dès que le code retour passe de 503 à 200, c’est que le site web est de nouveau accessible et je peux me remettre à faire F5 en espérant que les réservations ouvrent.&lt;/p&gt;
&lt;h2 id="méthode-2bis--aller-plus-loin-avec-curl"&gt;Méthode 2bis : aller plus loin avec cURL
&lt;/h2&gt;&lt;p&gt;Bon&amp;hellip; La méthode précédente fonctionne&amp;hellip; mais ce n’est pas encore ça !&lt;/p&gt;
&lt;p&gt;Typiquement, il arrive que l’ouverture des dates soit reportée au lendemain, quand le site est vraiment trop longtemps dans les choux. Du coup le site répond (et mon test me revoie que le site est opérationnel), mais les dates ne sont pas disponibles pour autant&amp;hellip;&lt;/p&gt;
&lt;p&gt;Un rapide coup d’œil aux sources me donne l’info que je cherche. Il n’y a plus qu’à automatiser ça.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/05/calendrier2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Mais évidemment ça n’est pas si simple&amp;hellip;&lt;/p&gt;
&lt;p&gt;Firefox interprète le Javascript, mais pas cURL, qui ne sait pas &lt;a class="link" href="http://stackoverflow.com/questions/20554113/how-to-get-webcontent-that-is-loaded-by-javascript-using-curl" target="_blank" rel="noopener"
&gt;interpréter le Javascript (cf ce post de Stack Overflow)&lt;/a&gt;. Le retour de ma commande contient donc le code source HTML avec le Javascript brut, mais pas les données que je recherche&amp;hellip;&lt;/p&gt;
&lt;h2 id="méthode-3--un-scraper-"&gt;Méthode 3 : Un scraper ?
&lt;/h2&gt;&lt;p&gt;Je dois écrire un &lt;em&gt;scraper&lt;/em&gt; qui va aller simuler l’action de l’humain qui va ouvrir la page dans un navigateur. Le post de Stack Overflow cite &lt;a class="link" href="http://phantomjs.org/" target="_blank" rel="noopener"
&gt;PhantomJS&lt;/a&gt; qui est probablement une bonne solution.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;PhantomJS is a headless WebKit scriptable with a JavaScript API. It has &lt;strong&gt;fast&lt;/strong&gt; and &lt;strong&gt;native&lt;/strong&gt; support for various web standards: DOM handling, CSS selector, JSON, Canvas, and SVG.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Cependant je ne connais pas bien JS (ça fait longtemps on va dire) et je préfère capitaliser sur Python. J’ai donc cherché un module Python pour régler mon problème, et j’en ai trouvé 2 : un module python &lt;strong&gt;selenium&lt;/strong&gt; et un plus simple appelé &lt;strong&gt;dryscrape&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;J’ai installé dryscrape sur un de mes serveurs (un CentOS 7 minimal, sans environnement graphique). La documentation de dryscrape &lt;a class="link" href="http://dryscrape.readthedocs.io/en/latest/installation.html" target="_blank" rel="noopener"
&gt;est disponible ici&lt;/a&gt; et &lt;a class="link" href="https://dryscrape.readthedocs.io/en/stable/usage.html" target="_blank" rel="noopener"
&gt;ici (stable, documentation plus fournie)&lt;/a&gt;.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;yum install -y qt5-qtwebkit-devel gcc-c++
sed -i &amp;#39;s/PATH=$PATH:$HOME\/bin/PATH=$PATH:$HOME\/bin:\/usr\/lib64\/qt5\/bin/&amp;#39; .bash_profile
source .bash_profile
pip install dryscrape
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Et j’ai tout de suite voulu tester un bout de code sans trop chercher à comprendre.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat &amp;lt;&amp;lt; EOF &amp;gt; test.py
import dryscrape
session = dryscrape.Session()
session.visit(&amp;#39;http://@IP_ou_FQDN/le_chemin_de_la_page/&amp;#39;)
response = session.body()
print response
EOF
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&amp;hellip; je me suis donc pris un bon gros Traceback :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Traceback (most recent call last):
File &amp;#34;test.py&amp;#34;, line 3, in &amp;lt;module&amp;gt;;
session = dryscrape.Session()
[...]raise NoX11Error(&amp;#34;Could not connect to X server. &amp;#34;
webkit_server.NoX11Error: Could not connect to X server. Try calling dryscrape.start_xvfb() before creating a session.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ahhhhh oui&amp;hellip; ça !&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;xvfb_ (necessary only if no other X server is available)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;En fait il suffit d’ajouter un test pour exécuter dans xvfb si nécessaire.&lt;/p&gt;
&lt;h3 id="un-premier-exemple"&gt;Un premier exemple
&lt;/h3&gt;&lt;p&gt;Le bout de code suivant ne fait que récupérer le code source de la page et l’afficher à l’écran.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat &amp;lt;&amp;lt; EOF &amp;gt; simple_scraper.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import dryscrape
if &amp;#39;linux&amp;#39; in sys.platform:
# start xvfb in case no X is running. Make sure xvfb
# is installed, otherwise this won&amp;#39;t work!
dryscrape.start_xvfb()
session = dryscrape.Session()
session.visit(&amp;#39;http://@IP_ou_FQDN/le_chemin_de_la_page/&amp;#39;)
response = session.body()
print response
EOF
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Mais la grosse différence avec le cURL précédent, c’est que dans le cas présent, &lt;strong&gt;ici le Javascript est interprété&lt;/strong&gt;. Cette fois ci dans le code source retourné, je retrouve bien mon calendrier&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/05/datepicky.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;A partir de là, il ne me reste donc en théorie qu’à terminer d’écrire un petit bout de script pour extraire les informations qui m’intéressent et à me notifier quand des places sont libres ! On progresse !&lt;/p&gt;
&lt;h2 id="méthode-3--scraper-comme-jamais"&gt;Méthode 3 : Scraper comme jamais
&lt;/h2&gt;&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/05/maitre-gims-scrape-comme-jamais2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Ce montage pourri d’un clip de Maître Gimms avec des logos dans la main vous est offert par Zwindler&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Mais je n’étais pas encore satisfait. Mon but est d’être prévenu lorsque des places sont disponibles. Or, les places s’ouvrent le 1er du mois, &lt;strong&gt;pour le mois suivant&lt;/strong&gt;. En revanche, le composant Javascript datepicker a la mauvaise idée de donner les disponibilités &lt;strong&gt;pour le mois en cours&lt;/strong&gt;. Mon script &lt;strong&gt;simple_scraper.py&lt;/strong&gt; ne récupère donc pas les bonnes dates&amp;hellip;&lt;/p&gt;
&lt;p&gt;Pour contourner le problème, il faut aller encore un peu plus loin dans l’automatisation des actions. Il faut simuler le clic de l’utilisateur sur la flèche vers la droite, qui passe au mois suivant.&lt;/p&gt;
&lt;p&gt;C’est possible avec &lt;strong&gt;dryscrape&lt;/strong&gt;, qui propose notamment une fonction pour sélectionner des nodes XPATH et interagir avec. Pour ceux qui ne connaissent pas XPATH, vous pouvez aller sur la doc de dryscrape qui donne quelques exemples, et aussi sur &lt;a class="link" href="https://www.w3schools.com/xml/xpath_intro.asp" target="_blank" rel="noopener"
&gt;le tutoriel de la W3School&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Comme j’ai examiné le code HTML retourné par le datepicker, je sais quoi chercher :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/05/datepicker3.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Pour changer de mois en cours, dans un premier temps j’ai essayé d’utiliser le label « » » mais le module dryscrape ne supporte pas les caractères non ASCII ! Une solution qui fonctionne est de cliquer sur le lien qui contient &lt;em&gt;javascript:void(0)&lt;/em&gt; contenu dans le div de classe &lt;em&gt;datepick-next&lt;/em&gt; :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat &amp;lt;&amp;lt; EOF &amp;gt; datepick_scraper.py
#!/usr/bin/python
# -*- coding: iso-8859-15 -*-
import sys
import dryscrape
if &amp;#39;linux&amp;#39; in sys.platform:
# start xvfb in case no X is running. Make sure xvfb
# is installed, otherwise this won&amp;#39;t work!
dryscrape.start_xvfb()
session = dryscrape.Session()
session.visit(&amp;#39;http://@IP_ou_FQDN/le_chemin_de_la_page/&amp;#39;)
datepicknext = session.at_xpath(&amp;#39;//*[@class=&amp;#34;datepick-next&amp;#34;]/a&amp;#39;)
datepicknext.click()
response = session.body()
print response
EOF
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Après vérification, cette version du script renvoie bien le tableau avec les date de Juin (quand on est en Mai) !&lt;/p&gt;
&lt;h2 id="le-mot-de-la-fin"&gt;Le mot de la fin
&lt;/h2&gt;&lt;p&gt;A partir du moment où vous en êtes là, il n’y a plus vraiment de limites à ce que vous êtes capable de faire. Dans mon exemple, j’aurai pu aller encore plus loin, extraire les dates disponibles, et même pourquoi pas aller jusqu’à remplir automatiquement le formulaire pour réserver automatiquement une date prédéfinie (voire même toutes les dates disponibles).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/05/datepickx.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Ce n’est pas mon but : je vais me contenter de m’envoyer un email dès qu’une date se libère. Mais c’est possible !&lt;/p&gt;
&lt;p&gt;Si vous voulez explorer les possibilité de dryscrape, la documentation officielle donne quelques exemples, et notamment celui de l’envoi d’un email depuis Gmail, entièrement automatisé comme si c’était un humain (!)&lt;/p&gt;
&lt;p&gt;De quoi donner des idées, pour &lt;em&gt;&lt;strong&gt;scraper comme jamais&lt;/strong&gt;&lt;/em&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>Plugin de supervision check_wlst_sessions (WebLogic 9+)</title><link>https://blog.zwindler.fr/2016/11/09/plugin-check_wlst_sessions-weblogic-9/</link><pubDate>Wed, 09 Nov 2016 13:00:18 +0000</pubDate><guid>https://blog.zwindler.fr/2016/11/09/plugin-check_wlst_sessions-weblogic-9/</guid><description>&lt;img src="https://blog.zwindler.fr/2016/10/check_wlst_sessions-1.webp" alt="Featured image of post Plugin de supervision check_wlst_sessions (WebLogic 9+)" /&gt;&lt;p&gt;Dans la série : plugin pour les outils de supervision Nagios(r) like et « Nagios(r) compatibles » (Icinga, Naemon, Shinken, &amp;hellip;), 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 n’avez pas atteint un certain nombre de sessions concurrentes dans le serveur d’application Java WebLogic d’Oracle.&lt;/p&gt;
&lt;p&gt;Mon problème initial était que je n’arrivais pas à avoir de manière simple le nombre de sessions sur une JVM WbLogic. Je pouvais compter le nombre de processus/threads, mais ça ne correspond pas forcément à un nombre d’utilisateurs actifs.&lt;/p&gt;
&lt;p&gt;Or, l’éditeur du progiciel nous avait fourni un sizing en fonction d’un nombre d’utilisateurs. Il était donc important d’avoir ce chiffre de manière fiable.&lt;/p&gt;
&lt;p&gt;Il existait un plugin similaire pour la version 8 du serveur d’application (&lt;a class="link" href="https://exchange.nagios.org/directory/Plugins/Java-Applications-and-Servers/Weblogic/check_weblogic_sessions/details" target="_blank" rel="noopener"
&gt;développé par Sergei Haramundanis&lt;/a&gt;), mais qui utilisait un module Weblogic.Admin, déprécié dans la version 10 que j’utilise.&lt;/p&gt;
&lt;p&gt;Je me suis donc basé sur le WebLogic Scripting Tool (WLST) qui permet d’administrer et de récupérer des informations des serveurs WebLogic via des commandes Python interprété par Java (-_-« ). En fait, on peut réaliser l’ensemble des opérations disponibles dans la console WebLogic (l’AdminServer) en script.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/check_wlst_sessions3.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;La documentation du WLST est &lt;a class="link" href="http://docs.oracle.com/cd/E13222_01/wls/docs90/config_scripting/reference.html" target="_blank" rel="noopener"
&gt;disponible à l’URL suivante&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Voilà ce que ça donne, une fois mis en place :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/check_wlst_sessions2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/check_wlst_sessions-1.avif"
loading="lazy"
&gt;&lt;/p&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/Java-Applications-and-Servers/Weblogic/check_wlst_sessions/details" target="_blank" rel="noopener"
&gt;Nagios Exchange&lt;/a&gt; et &lt;a class="link" href="https://github.com/zwindler/check_wlst_sessions" 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></channel></rss>