<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Monitoring-FR on Zwindler's Reflection</title><link>https://blog.zwindler.fr/tags/monitoring-fr/</link><description>Recent content in Monitoring-FR on Zwindler's Reflection</description><generator>Hugo -- gohugo.io</generator><language>fr</language><copyright>Licensed under CC BY-SA 4.0</copyright><lastBuildDate>Wed, 07 Dec 2016 13:00:47 +0000</lastBuildDate><atom:link href="https://blog.zwindler.fr/tags/monitoring-fr/index.xml" rel="self" type="application/rss+xml"/><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><item><title>Monitoring-FR a besoin de vous !</title><link>https://blog.zwindler.fr/2015/09/13/monitoring-fr-a-besoin-de-vous/</link><pubDate>Sun, 13 Sep 2015 10:03:12 +0000</pubDate><guid>https://blog.zwindler.fr/2015/09/13/monitoring-fr-a-besoin-de-vous/</guid><description>&lt;img src="https://blog.zwindler.fr/2015/09/logo_monitoring_fr.webp" alt="Featured image of post Monitoring-FR a besoin de vous !" /&gt;&lt;h2 id="aparté-retour-sur-lhistoire"&gt;Aparté (retour sur l’histoire)
&lt;/h2&gt;&lt;p&gt;Pour ceux qui ne connaîtraient pas Monitoring-FR, il s’agit du site d’une des plus grosses communautés francophone de supervision open source.&lt;/p&gt;
&lt;p&gt;Ce site s’appelait initialement Nagios-FR mais Ethan Galstad (créateur de Nagios®) a réclamé le nom de domaine (Nagios® est une marque déposée et on ne plaisante pas avec les avocats de Nagios® pour ceux qui ne l’auraient pas compris).&lt;/p&gt;
&lt;p&gt;Monitoring-FR se compose d’un blog animé par une équipe de passionnés qui sont présents lors des grands événements de la supervision, d’un forum d’entraide et d’un wiki assez conséquent quoiqu’un peu désordonné et pas forcément très à jour.&lt;/p&gt;
&lt;h2 id="cétait-mieux-avant-"&gt;C’était mieux avant ?
&lt;/h2&gt;&lt;p&gt;Les habitués de Monitoring-FR l’auront vu, cela fait quelques années que le rythme des publications diminue. La communauté semble moins vivace. Je ne sais pas si c’est les années &lt;a class="link" href="http://www.monitoring-fr.org/2010/02/accuse-nagios-fr-org-levez-vous/" target="_blank" rel="noopener"
&gt;Nagios-FR&lt;/a&gt; qui ont laissé des traces ou si c’est l’éclatement du logiciel Nagios lui même en sous projets concurrents (Icinga/Shinken/Centreon et sa volonté standalone) qui en est la cause.&lt;/p&gt;
&lt;p&gt;Le monde de la supervision Open Source n’est pas le même qu’il y a 5 ans.&lt;/p&gt;
&lt;p&gt;On a aussi senti en filigrane lors des échanges de &lt;a class="link" href="http://www.monitoring-fr.org/2015/03/reponse-lettre-ouverte-cedric-temple/" target="_blank" rel="noopener"
&gt;lettres ouvertes avec Cédric Temple&lt;/a&gt; de Merethis (Centreon) que les animateurs de la communautés manquaient de main d’oeuvre.&lt;/p&gt;
&lt;h2 id="monitoring-fr-a-besoin-de-vous"&gt;Monitoring-FR a besoin de vous
&lt;/h2&gt;&lt;p&gt;Mais au delà de tout ça, Monitoring-FR, c’était quand même une sacrée base de connaissance pour tout ceux qui débutent. C’est une référence pour tout ceux qui s’intéressent à la supervision et à son actualité (finalement pratiquement pas traité ailleurs) et le travail de l’équipe a toujours été très bon, aussi bien en terme de couverture d’événements que de retours sur les nouvelles versions des logiciels.&lt;/p&gt;
&lt;p&gt;Et c’est ce côté que je voir persister.&lt;/p&gt;
&lt;p&gt;Depuis quelques mois, les publications reviennent un peu, avec des retours sur les rencontres Paris et Nantes Monitoring notamment.&lt;/p&gt;
&lt;p&gt;Donc je voudrais relayer &lt;a class="link" href="http://www.monitoring-fr.org/2015/09/construisons-ensemble-la-communaute-de-demain/" target="_blank" rel="noopener"
&gt;l’appel de Monitoring-FR&lt;/a&gt; et vous inviter, si le cœur vous en dis, à rejoindre le mouvement pour relancer la machine (lien mort) :)&lt;/p&gt;</description></item></channel></rss>