<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Plugin on Zwindler's Reflection</title><link>https://blog.zwindler.fr/tags/plugin/</link><description>Recent content in Plugin 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/plugin/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>Répartir les queues équitablement entre vos nœuds RabbitMQ</title><link>https://blog.zwindler.fr/2018/04/04/plugin-queue-master-balancer/</link><pubDate>Wed, 04 Apr 2018 17:00:02 +0000</pubDate><guid>https://blog.zwindler.fr/2018/04/04/plugin-queue-master-balancer/</guid><description>&lt;img src="https://blog.zwindler.fr/2018/04/rabbitmq_master_relocate.webp" alt="Featured image of post Répartir les queues équitablement entre vos nœuds RabbitMQ" /&gt;&lt;h2 id="rabbitmq-quoi"&gt;RabbitMQ quoi?
&lt;/h2&gt;&lt;p&gt;Je vais être honnête, il y a 2 mois je ne connaissais pas grand chose aux messages brokers. Et depuis j’ai découvert RabbitMQ.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Messaging that just works&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Quoi de mieux pour mettre le pied à l’étriller que ce genre de logiciel qui vous explique d’emblée que ça va être simple ? Bon en réalité ça n’a pas été si simple que ça ;-)&lt;/p&gt;
&lt;p&gt;RabbitMQ est un message broker open source écrit en erlang (er-quoi ?? oui, moi non plus&amp;hellip;). Il est développé par les équipes Pivotal, qui a repris le projet en mai 2013.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/04/rabbitmq_by_pivotal.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;C’est donc une sorte de bus central de communication pour faire transiter des messages d’applications vers applications ([1:n]-to-[1:n]) sans qu’elles se parlent en direct. C’est particulièrement pratique dans le cas de microservices dont on veut découpler et donc sécuriser les échanges (plutôt que de faire du HTTP en best effort).&lt;/p&gt;
&lt;h2 id="pourquoi-rabbitmq-"&gt;Pourquoi RabbitMQ ?
&lt;/h2&gt;&lt;p&gt;L’avantage vraiment mis en avant par RabbitMQ, c’est qu’il est simple. Mais il est aussi puissant et relativement complet.&lt;/p&gt;
&lt;p&gt;Il a l’avantage de supporter plusieurs protocoles (ce que les messages broker ne font pas tous), d’apporter une couche d’abstraction utile avec la notion d’&lt;strong&gt;exchange&lt;/strong&gt; et de permettre sans effort la création du clusters via une simple ligne de commandes. J’aurai probablement l’occasion de revenir sur les « clusters » de RabbitMQ (notez les guillemets).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/04/hello-world-example-routing.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Source : Tutoriel helloworld de RabbitMQ // &lt;a class="link" href="https://www.rabbitmq.com/tutorials/amqp-concepts.html" target="_blank" rel="noopener"
&gt;https://www.rabbitmq.com/tutorials/amqp-concepts.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Au delà de ça, je ne vais pas vous insister, car d’une part la documentation est plutôt bien faite et comporte plusieurs tutoriels bien sympa, et d’autre part, j’ai vu passer d’autres tutos sur les réseaux récemment. Je vous colle quelques liens sympa pour commencer :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://www.rabbitmq.com/" target="_blank" rel="noopener"
&gt;Le site officiel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.rabbitmq.com/documentation.html" target="_blank" rel="noopener"
&gt;La documentation du site officiel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.rabbitmq.com/getstarted.html" target="_blank" rel="noopener"
&gt;Les tutos en plein de langages pour commencer à bidouiller&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.eleven-labs.com/fr/rabbitmq-partie-1-les-bases/" target="_blank" rel="noopener"
&gt;Les bases de RabbitMQ sur eleven-labs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="racontes-nous-une-histoire"&gt;Racontes nous une histoire
&lt;/h2&gt;&lt;p&gt;Pour simplifier notre vie, le cluster agit de telle sorte que tous les objets logiques (utilisateur, queue, exchange), où qu’ils soient, sont connus et &lt;em&gt;adressables&lt;/em&gt; depuis tous les membres du cluster. Cependant, une notion importante à comprendre quand on parle de cluster sur RabbitMQ est qu’à un moment donné, &lt;strong&gt;une&lt;/strong&gt; &lt;strong&gt;&lt;em&gt;queue&lt;/em&gt;&lt;/strong&gt; &lt;strong&gt;n’est physiquement présente que sur un serveur&lt;/strong&gt;, même en cluster.&lt;/p&gt;
&lt;p&gt;J’explique : si on adresse une requête au serveur B pour la queue/file 1 qui est sur le serveur A, celui ci redirigera gentiment la requête vers le serveur 1.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/04/RabbitMQ_cluster_redirect.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Pour l’utilisateur / développeur, ça sera transparent, mais pour le sysadmin c’est une autre paire de manches.&lt;/p&gt;
&lt;p&gt;Supposons que pour une raison ou pour une autre, &lt;strong&gt;toutes&lt;/strong&gt; les queues soient hébergées sur un même nœud. Dans ce cas là, toute la charge sera portée par ce serveur et les autres ne feront que passe plat.&lt;/p&gt;
&lt;h2 id="dans-quels-cas-ça-arrive-"&gt;Dans quels cas ça arrive ?
&lt;/h2&gt;&lt;p&gt;Alors vous allez me dire : &lt;em&gt;pfff ya aucune raison que toutes les queues soient sur le même nœud&amp;hellip;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Et ben si, yen a même plusieurs ;-)&lt;/p&gt;
&lt;p&gt;Sans vous spoiler un article futur, on peut très rapidement se retrouver avec ce genre de blague lorsqu’on met à jour les serveurs du cluster uns par uns, jusqu’à ce que le dernier serveur se retrouve à supporter l’ensemble de la charge.&lt;/p&gt;
&lt;p&gt;Et là, vous êtes bien embêtés, car vous n’avez pas de moyen de transférer les queues sur plusieurs autres serveurs. On peut toujours les supprimer puis les recréer une par une sur des serveurs distincts, mais niveau répartition de charge, on a vu mieux&amp;hellip;&lt;/p&gt;
&lt;h2 id="et-alors-comment-on-fait-"&gt;Et alors comment on fait ?
&lt;/h2&gt;&lt;p&gt;Il est possible d’indiquer à RabbitMQ qu’il doit &lt;strong&gt;répliquer&lt;/strong&gt; certaines queues sur un nœud en particulier, puis, une fois le contenu de la queue synchronisée, de retirer le serveur initial de la liste des nœuds de cette queue.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/04/RabbitMQ_move_master.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Je vous sens encore sceptiques. « On est pas plus avancés » me direz vous ?&lt;/p&gt;
&lt;p&gt;En effet, il faut encore prendre les queues unes par unes et les déplacer sur un autre nœud puis les supprimer du nœud initial. Oui, sauf que les développeurs de RabbitMQ, conscients du problème, ont créés un plugin pour automatiser tout ça. On en arrive à l’objet de cet article : &lt;strong&gt;rabbitmq-queue-master-balancer&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;RabbitMQ Queue Master Balancer is a tool used for attaining queue master equilibrium across a RabbitMQ cluster installation. The plugin achieves this by computing queue master counts on nodes and engaging in shuffling procedures, with the ultimate goal of evenly distributing &lt;code&gt;queue masters&lt;/code&gt; across RabbitMQ cluster nodes.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Traduction : ça permet de répartir nos queues de manière à peu près équitable entre les nœuds (en partant du principe &lt;em&gt;généralement erroné&lt;/em&gt; que la charge est proportionnelle au nombre de queues hébergées par le nœud).&lt;/p&gt;
&lt;h2 id="installation"&gt;Installation
&lt;/h2&gt;&lt;p&gt;RabbitMQ, en plus de tout ce qu’on a dit de chouette à son propos, permet aussi d’être étendu à l’aide de plugins. On peut aller télécharger celui qui nous intéresse sur Github.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;wget https://github.com/Ayanda-D/rabbitmq-queue-master-balancer/releases/download/v0.0.3/rabbitmq_queue_master_balancer-0.0.3.ez
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Point qui n’est pas forcément mis en avant dans le projet &lt;strong&gt;rabbitmq_queue_master_balancer&lt;/strong&gt;, les plugins peuvent être déposés dans 2 dossiers différents. Un commun à toutes nos versions, et un qui change à chaque mise à jour.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;/usr/lib/rabbitmq/plugins&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;/usr/lib/rabbitmq/lib/rabbitmq_server-[version]/plugins/&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vous trouverez plus d’information sur les plugins RabbitMQ et leur fonctionnement au niveau de &lt;a class="link" href="https://www.rabbitmq.com/installing-plugins.html" target="_blank" rel="noopener"
&gt;la page dédiée à leur sujet&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Dans notre cas, le plugin n’est pas dépendant de votre version. On créé donc le dossier pour le contenir, puis on l’y dépose.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo mkdir /usr/lib/rabbitmq/plugins
sudo mv rabbitmq_queue_master_balancer-0.0.3.ez /usr/lib/rabbitmq/plugins/
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Comme n’importe quel autre plugin « built-in », on peut maintenant l’activer depuis la ligne de commande habituelle &lt;strong&gt;rabbitmq-plugins&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo rabbitmq-plugins enable rabbitmq_queue_master_balancer
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="utilisation"&gt;Utilisation
&lt;/h2&gt;&lt;p&gt;Voici maintenant un exemple d’utilisation qui va vous permettre de vous familiariser avec l’outil. Tout se passe en ligne de commandes (c’est un peu spartiate). On va demander à &lt;strong&gt;rabbitmqctl&lt;/strong&gt; d’exécuter des fonctions provenant de notre plugins.&lt;/p&gt;
&lt;p&gt;On commence par afficher la répartition actuelle dans notre cluster avec la fonction &lt;strong&gt;report()&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo rabbitmqctl eval &amp;#39;rabbit_queue_master_balancer:report().&amp;#39;
{ok,[{&amp;#39;rabbit@rabbitmq2&amp;#39;,{queues,0}},
{&amp;#39;rabbit@rabbitmq3&amp;#39;,{queues,30}},
{&amp;#39;rabbit@rabbitmq1&amp;#39;,{queues,0}}]}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ici, on voit que toutes les queues se sont retrouvées sur le rabbitmq3 suite à un rolling upgrade.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/01/truestory.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;On lance donc le processus de répartition des queues avec la fonction &lt;strong&gt;go()&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo rabbitmqctl eval &amp;#39;rabbit_queue_master_balancer:go().&amp;#39;
ok
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A partir de là, si vous êtes simultanément connecté sur votre console web d’administration de RabbitMQ, vous verrez en live qu’il s’y passe des choses. En ligne de commande, vous pourrez aussi voir où ça en est avec la fonction &lt;strong&gt;status()&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo rabbitmqctl eval &amp;#39;rabbit_queue_master_balancer:status().&amp;#39;
[{process_id,&amp;lt;9157.8313.0&amp;gt;},
{queues_pending_balance,18},
{memory_utilization,284640}]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ici il reste encore 18 queues à re-répartir. Au final, tout devrait rentrer dans l’ordre :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo rabbitmqctl eval &amp;#39;rabbit_queue_master_balancer:report().&amp;#39;
{ok,[{&amp;#39;rabbit@rabbitmq2&amp;#39;,{queues,10}},
{&amp;#39;rabbit@rabbitmq3&amp;#39;,{queues,9}},
{&amp;#39;rabbit@rabbitmq1&amp;#39;,{queues,11}}]}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Les plus tatillons d’entre vous auront sûrement remarqué que nous n’avons pas eu une répartition parfaite de nos 30 queues (10*3). Ceci est voulu, pour une raison de &lt;em&gt;formule mathématique obscure&lt;/em&gt;, explicitée sur le dépôt Github du plugin :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/04/queue_equilibrium.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class="link" href="https://github.com/Ayanda-D/rabbitmq-queue-master-balancer" target="_blank" rel="noopener"
&gt;https://github.com/Ayanda-D/rabbitmq-queue-master-balancer&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="et-tu-voudrais-pas-faire-un-playbook-ansible-pour-ça-"&gt;Et tu voudrais pas faire un playbook Ansible pour ça ?
&lt;/h2&gt;&lt;p&gt;Ahah la bonne blague. &lt;em&gt;&lt;strong&gt;BIEN SUR&lt;/strong&gt;&lt;/em&gt; que j’en ai fais un playbook Ansible (&lt;a class="link" href="https://blog.zwindler.fr/recherche/?keyword=ansible" &gt;parce que je suis fan d’Ansible&lt;/a&gt;).&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;---
- hosts: all
vars:
- queue_master_balancer_version: &amp;#34;0.0.3&amp;#34;
tasks:
- name: &amp;#34;Create /usr/lib/rabbitmq/plugins directory for queue balancer plugin&amp;#34;
file:
path: /usr/lib/rabbitmq/plugins
state: directory
mode: 0755
- name: &amp;#34;Download rabbitmq-queue-master-balancer plugin&amp;#34;
get_url:
url: &amp;#34;https://github.com/Ayanda-D/rabbitmq-queue-master-balancer/releases/download/v{{queue_master_balancer_version}}/rabbitmq_queue_master_balancer-{{queue_master_balancer_version}}.ez&amp;#34;
dest: &amp;#34;/usr/lib/rabbitmq/plugins/rabbitmq_queue_master_balancer-{{queue_master_balancer_version}}.ez&amp;#34;
- name: &amp;#34;Add rabbitmq_queue_master_balancer to the list of enabled plugins&amp;#34;
rabbitmq_plugin:
names: rabbitmq_queue_master_balancer
new_only: yes
state: enabled
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A noter, j’utilise l’option &lt;strong&gt;new_only&lt;/strong&gt; du module &lt;strong&gt;rabbitmq_plugin&lt;/strong&gt; pour éviter de désactiver bêtement les plugins déjà actifs.&lt;/p&gt;
&lt;p&gt;Protip gratuite ;) ça serait balo de désactiver tout le reste.&lt;/p&gt;</description></item><item><title>Mentions légales pour un webmaster</title><link>https://blog.zwindler.fr/2015/12/19/mentions-legales-webmaster/</link><pubDate>Sat, 19 Dec 2015 17:30:56 +0000</pubDate><guid>https://blog.zwindler.fr/2015/12/19/mentions-legales-webmaster/</guid><description>&lt;img src="https://blog.zwindler.fr/2022/05/cnil.webp" alt="Featured image of post Mentions légales pour un webmaster" /&gt;&lt;p&gt;[Edit]Mis à jour le 10/11 suite à la découverte d’un générateur de mentions légales[/Edit]&lt;/p&gt;
&lt;p&gt;Lorsqu’on édite un site sur Internet, il faut savoir qu’il y a un &lt;strong&gt;certain nombre de règles&lt;/strong&gt; à respecter, notamment face à la CNIL.&lt;/p&gt;
&lt;p&gt;Ces règles (mentions légales, cookies, déclaration)  sont un peu « procédurières » mais en théorie, en cas non respect de ces règles, les sanctions peuvent être extrêmement lourdes. Jugez par vous même pour le cas de cookies :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Avant de déposer ou lire un cookie, les éditeurs de sites ou d’applications doivent :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;informer les internautes de la finalité des cookies,&lt;/li&gt;
&lt;li&gt;obtenir leur consentement,&lt;/li&gt;
&lt;li&gt;fournir aux internautes un moyen de les refuser.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[&amp;hellip;] Le manquement à l’une de ces obligations peut être sanctionné jusqu’à un an d&amp;rsquo;emprisonnement, 75 000 € d’amende pour les personnes physiques et 375 000 € pour les personnes morales. - &lt;a class="link" href="https://www.service-public.fr/professionnels-entreprises/vosdroits/F31228" target="_blank" rel="noopener"
&gt;service-public.fr&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Dans la pratique, si vous éditez votre petit weblog dans votre coin, il y a fort à parier que vous écoperez simplement d’un rappel à l’ordre si jamais la CNIL venait à constater une infraction.&lt;/p&gt;
&lt;p&gt;Mais est ce bien nécessaire d’en arriver là ? Autant se mettre en conformité tout de suite&amp;hellip;&lt;/p&gt;
&lt;h2 id="mentions-légales-dun-site-web"&gt;Mentions légales d’un site web
&lt;/h2&gt;&lt;p&gt;Que vous éditiez un blog, un site professionnel ou un site de commerce en ligne, vous devrez dans &lt;strong&gt;tous les cas&lt;/strong&gt; remplir une page de mentions légales avec des informations sur vous. Au minimum vos noms, prénoms, adresse, numéro de téléphone. Oui c’est désagréable mais c’est comme ça&amp;hellip;&lt;/p&gt;
&lt;p&gt;S’ajoute à cela des informations sur votre hébergeur.&lt;/p&gt;
&lt;p&gt;Et en fonction des cas vous aurez beaucoup plus d’informations à remplir, comme des informations sur votre entreprise si c’est un site commercial, des CGV, voire même un numéro de déclaration du site à la CNIL.&lt;/p&gt;
&lt;p&gt;Si jamais vous cherchez un peu de lecture sur le sujet, du plus accessible au plus dense/technique :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;une notice user-friendly &amp;ndash; &lt;a class="link" href="https://web.archive.org/web/20170810000301/https://wbcreation.fr/bien-rediger-ses-mentions-legales.html" target="_blank" rel="noopener"
&gt;wbcreation.fr/bien-rediger-ses-mentions-legales.html (lien mort, j&amp;rsquo;utilise Internet Archive)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;une meilleure explication du pourquoi et du comment de chaque obligation &amp;ndash; &lt;a class="link" href="http://www.journaldunet.com/ebusiness/le-net/mentions-legales-site.shtml" target="_blank" rel="noopener"
&gt;www.journaldunet.com/ebusiness/le-net/mentions-legales-site.shtml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;information officielle, la plus complète et relativement concise &amp;ndash; &lt;a class="link" href="https://www.service-public.fr/professionnels-entreprises/vosdroits/F31228" target="_blank" rel="noopener"
&gt;www.service-public.fr/professionnels-entreprises/vosdroits/F31228&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;arrêtez tout : &lt;a class="link" href="https://www.subdelirium.com/generateur-de-mentions-legales/" target="_blank" rel="noopener"
&gt;j’ai trouvé (via un partage sur Twitter) un générateur de mentions légales !!!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="déclaration-cnil-du-site"&gt;Déclaration CNIL du site
&lt;/h2&gt;&lt;p&gt;Selon le type de site que vous éditez, les règles légales ne sont pas les mêmes, on l’a bien vu. Le cas de la déclaration du site web pour agrément de la CNIL en fait partie. Dans le cas où vous n’enregistreriez rien du tout sur les utilisateurs qui se connectent à votre site, vous n’avez pas besoin de déclarer quoique ce soit à la CNIL. Si à l’inverse, vous disposez d’informations des utilisateurs de votre site (notamment pour une boutique en ligne), dans ce cas là, voici les différents type de déclarations que vous devez effectuer en fonction des informations collectées.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;La déclaration simplifiée :&lt;/strong&gt; elle est nécessaire dans le cas de collecte de données non sensibles et nécessaires à un fichier client.&lt;br&gt;
&lt;strong&gt;La déclaration normale :&lt;/strong&gt; celle-ci doit être réalisée si l’éditeur récupère des données professionnelles sur un internaute, qu’il s’agisse de son CV ou de sa scolarité.&lt;br&gt;
&lt;strong&gt;La demande d’autorisation :&lt;/strong&gt; elle intervient en cas de collecte de données dites sensibles comme son appartenance politique, religieuse ou encore son orientation sexuelle. - Journal du net&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Reste pour moi un cas flou pour lequel je ne sais dire avec certitude s’il faut déclarer le site ou non : le blog.&lt;/p&gt;
&lt;p&gt;Dans le cas d’un blog wordpress pour citer mon cas, j’ai une base de données qui contient des informations de consultation des pages qui me donne une répartition des visites par pays. Cela signifie donc qu’à un moment donné, des informations (type IP, voire langue du browser) ont été collectées sans que je ne fasse rien.&lt;/p&gt;
&lt;p&gt;Idem pour les commentaires. L’adresse IP et éventuellement l’adresse email des utilisateurs qui souhaitent bien la renseigner est enregistrée dans ma base de données. Toutes ces données sont des données qui pourraient potentiellement intéresser la CNIL. Pour autant, dois-je déclarer le blog ?&lt;/p&gt;
&lt;p&gt;WB Création donne quelques clés supplémentaires sur le sujet mais pas de réponse claire à mon sens :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://web.archive.org/web/20161105121710/http://wbcreation.fr/declaration-site-internet-cnil.html" target="_blank" rel="noopener"
&gt;lien mort, j&amp;rsquo;utilise Internet Archive&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="message-indiquant-lutilisation-de-cookies-sur-le-site"&gt;Message indiquant l’utilisation de cookies sur le site
&lt;/h2&gt;&lt;p&gt;Parlons maintenant des &lt;strong&gt;cookies&lt;/strong&gt;. Vous n’en avez probablement même pas conscience, mais des cookies sont très probablement déposés sur les périphériques de vos visiteurs . Pour ne citez qu’eux &lt;em&gt;Google Analytics&lt;/em&gt;, &lt;em&gt;Adsense&lt;/em&gt;, les boutons « réseaux sociaux » ou tout autre module complémentaire de ce style déposent des cookies. Et voilà ce qu’en &lt;a class="link" href="http://www.cnil.fr/vos-obligations/sites-web-cookies-et-autres-traceurs/" target="_blank" rel="noopener"
&gt;pense la CNIL&lt;/a&gt; :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;La loi impose désormais aux responsables de sites et aux fournisseurs de solutions d’informer les internautes et de recueillir leur consentement avant l’insertion de cookies ou autres traceurs. - CNIL&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;C’est clair : c’est à vous de trouver un moyen de bloquer l’utilisation des cookies sur votre site si l’utilisateur ne l’a pas accepté.&lt;/p&gt;
&lt;p&gt;La CNIL donne quelques exemples et même des scripts si jamais vous hébergez votre site vous même, mais le plus simple dans mon cas (j’utilise WordPress) c’est bien entendu d’installer une extension qui fera le travail pour vous.&lt;/p&gt;
&lt;p&gt;Comme plusieurs blogs l’ont conseillés, j’ai téléchargé l’extension &lt;a class="link" href="https://wordpress.org/plugins/cookie-notice/" target="_blank" rel="noopener"
&gt;Cookie Notice&lt;/a&gt; pour la gestion automatiques de mes Cookies sur le blog (aussi parce que c’est la plus téléchargée).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2015/11/cookies2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Le message est sobre, discret et efficace, en footer de la page&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Les options sont simples mais néanmoins utiles car vous pouvez modifier certains paramètres. J’ai notamment coché l’option permettant de valider automatiquement le message dans le cas où l’utilisateur scrolle vers le bas. Ça permet aux utilisateurs qui ont la flemme de cliquer de ne pas s’offusquer de cette barre en bas de leur écran (mon cas ;-) ).&lt;/p&gt;
&lt;p&gt;Par défaut, &lt;strong&gt;Cookie Notice&lt;/strong&gt; ne met pas de bouton refuser. Je l’ai aussi ajouté pour être sûr de ne pas avoir de problèmes même si le message « Si vous continuez à utiliser ce dernier, nous considérons &amp;hellip; » est probablement suffisant.&lt;/p&gt;
&lt;p&gt;Si vous voulez plus d’informations sur les cas qui disposent de message, vous pouvez allez voir &lt;a class="link" href="http://wpformation.com/wordpress-loi-cookies/" target="_blank" rel="noopener"
&gt;cet article un peu plus détaillé&lt;/a&gt; sur le sujet sur wpformation.com.&lt;/p&gt;
&lt;p&gt;Voilà; vous savez tout !&lt;/p&gt;</description></item><item><title>Plugin check_mem_ng.sh compatible RHEL 7+</title><link>https://blog.zwindler.fr/2015/07/16/plugin-check_mem_ng-sh-compatible-rhel-7/</link><pubDate>Thu, 16 Jul 2015 12:28:35 +0000</pubDate><guid>https://blog.zwindler.fr/2015/07/16/plugin-check_mem_ng-sh-compatible-rhel-7/</guid><description>&lt;img src="https://blog.zwindler.fr/2010/04/nyanonymous2.webp" alt="Featured image of post Plugin check_mem_ng.sh compatible RHEL 7+" /&gt;&lt;p&gt;Si vous utilisez Nagios(r) ou un des produits compatibles, vous « graphez » probablement l’usage de la RAM sur vos serveurs Linux.&lt;/p&gt;
&lt;p&gt;Il existe plusieurs méthodes pour le faire : via SNMP, via NRPE, &amp;hellip; Un des scripts que j’utilisais en production sur l’ensemble de mes Linux (qui m’avait plu par sa simplicité) était &lt;a class="link" href="https://exchange.nagios.org/directory/Plugins/System-Metrics/Memory/check_mem-2Esh/details" target="_blank" rel="noopener"
&gt;check_mem.sh&lt;/a&gt;. Je l’exécutais à distance à l’aide de NRPE.&lt;/p&gt;
&lt;p&gt;Cependant, depuis la version 7 de RedHat, un changement dans la commande « free » remontait un résultat erroné (changement du nombre de colonnes).&lt;/p&gt;
&lt;p&gt;J’en ai donc profité pour le réécrire, corrigeant ainsi le « bug » et en ajoutant quelques fonctionnalités qui me manquaient, comme des valeurs par défaut, des options supplémentaires et une meilleure gestion des perfdata(*).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2015/07/graph.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Le nouveau mode de graphiques &amp;hellip;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Je l’ai laissé compatible avec les installations check_mem.sh existantes. En théorie, vous avez juste à remplacer le script et tout devrait fonctionner comme avant, sans dépendances supplémentaires ou modification de configuration côté client et côté serveur.&lt;/p&gt;
&lt;p&gt;C’est ici que ça se passe :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/zwindler/check_mem_ng" target="_blank" rel="noopener"
&gt;Page Github du plugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://exchange.nagios.org/directory/Plugins/System-Metrics/Memory/check_mem_ng-2Esh/details" target="_blank" rel="noopener"
&gt;Page Nagios Exchange&lt;/a&gt;&lt;/li&gt;
&lt;/ul&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;
&lt;hr&gt;
&lt;p&gt;(*)pour mon usage. Mais je donne aussi la possibilité de conserver les perfdata historique à l’aide de la variable &lt;strong&gt;PERFDATA_LEGACY&lt;/strong&gt; que vous pouvez positionner à &lt;strong&gt;1&lt;/strong&gt;, ou utiliser l’option &lt;strong&gt;check_mem_ng.sh -l&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2015/07/graph_legacy.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;hellip; et le mode legacy&lt;/p&gt;
&lt;/blockquote&gt;</description></item></channel></rss>