<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Monitoring on Mook’s Lab Chronicles</title><link>https://blog.homeblack.fr/tags/monitoring/</link><description>Recent content in Monitoring on Mook’s Lab Chronicles</description><generator>Hugo -- gohugo.io</generator><language>fr-FR</language><lastBuildDate>Tue, 15 Sep 2026 22:21:47 +0200</lastBuildDate><atom:link href="https://blog.homeblack.fr/tags/monitoring/index.xml" rel="self" type="application/rss+xml"/><item><title>De Beszel à Zabbix : pourquoi j’ai refait toute ma supervision</title><link>https://blog.homeblack.fr/p/de-beszel-a-zabbix/</link><pubDate>Tue, 15 Sep 2026 22:21:47 +0200</pubDate><guid>https://blog.homeblack.fr/p/de-beszel-a-zabbix/</guid><description>&lt;img src="https://blog.homeblack.fr/p/de-beszel-a-zabbix/cover.png" alt="Featured image of post De Beszel à Zabbix : pourquoi j’ai refait toute ma supervision" /&gt;&lt;p&gt;Au départ, je voulais simplement savoir si mes machines allaient bien. Un peu de CPU, de mémoire, de stockage, quelques températures et une alerte quand quelque chose sortait des clous. &lt;a class="link" href="https://github.com/henrygd/beszel" target="_blank" rel="noopener"
&gt;Beszel&lt;/a&gt; répondait très bien à ce besoin.&lt;/p&gt;
&lt;p&gt;Son interface était claire, l’installation rapide et, surtout, il était stable. Je pouvais l’ouvrir, prendre la température du homelab en quelques secondes et repartir faire autre chose. Pour un outil de supervision, cette discrétion est une vraie qualité.&lt;/p&gt;
&lt;p&gt;Puis mon besoin a évolué en même temps que mon lab. Je ne voulais plus seulement savoir si une VM consommait trop de mémoire. Je voulais savoir si le service qui tournait dessus fonctionnait, si un conteneur avait redémarré, si une sauvegarde était récente, si un mail avait réellement effectué tout son trajet ou encore si les DNS répondaient correctement.&lt;/p&gt;
&lt;p&gt;J’ai ajouté Pulse, essayé Checkmk (« bad idea :&amp;rsquo;) »), multiplié les tests et fini par arriver sur Zabbix. En quelques semaines, j’ai refait presque tout mon système de supervision.&lt;/p&gt;
&lt;p&gt;Ce n’est pas l’histoire d’une succession de mauvais outils. C’est plutôt celle d’un besoin qui a grandi vite, porté par la curiosité, jusqu’au moment où maintenir plusieurs réponses partielles est devenu plus pénible que de reprendre le problème depuis le début.&lt;/p&gt;
&lt;h2 id="beszel-faisait-exactement-ce-que-je-lui-demandais"&gt;Beszel faisait exactement ce que je lui demandais
&lt;/h2&gt;&lt;p&gt;J’ai beaucoup aimé Beszel pour sa simplicité et sa légèreté. Il remontait les métriques essentielles de mes machines et de mes conteneurs Docker sans transformer l’installation en projet à part entière. L’interface allait droit au but et je n’avais pas besoin de passer une soirée dans la documentation pour comprendre la mise en place ou l’exploitation.&lt;/p&gt;
&lt;p&gt;Ce serait donc injuste de raconter que je l’ai abandonné parce qu’il était instable ou limité dans l’absolu. Il faisait bien son travail. Dans mon périmètre, il ne tenait plus ma cadence insatiable.&lt;/p&gt;
&lt;p&gt;Une machine peut avoir 20 % de CPU, beaucoup de mémoire disponible et un disque presque vide tout en rendant un service parfaitement inutilisable. Le processus peut être arrêté. Le certificat peut avoir expiré. Le DNS peut répondre sans fournir la bonne donnée. Un serveur mail peut accepter une connexion SMTP sans être capable de livrer un message jusque dans la boîte de réception.&lt;/p&gt;
&lt;p&gt;Je commençais donc à vouloir surveiller ce qui se passait &lt;strong&gt;dans&lt;/strong&gt; les VM, pas seulement autour d’elles.&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://github.com/rcourtman/pulse" target="_blank" rel="noopener"
&gt;Pulse&lt;/a&gt; apportait de son côté une lecture pertinente de Proxmox et de son environnement. Là encore, le problème n’était pas la qualité des données. Le problème était que je venais d’ajouter un outil supplémentaire à installer, mettre à jour, sauvegarder et comprendre.&lt;/p&gt;
&lt;p&gt;J’avais Beszel pour certaines ressources, Pulse pour une autre partie de l’infrastructure, Grafana pour mes dashboards et plusieurs sondes qui vivaient encore ailleurs. Chaque écran avait une raison d’exister. Leur addition commençait pourtant à raconter une histoire assez différente : pour comprendre un incident, il fallait déjà savoir quel outil ouvrir.&lt;/p&gt;
&lt;p&gt;La friction qui a lancé la suite est venue de là. Je ne cherchais pas à collectionner les dashboards. Je voulais réduire le nombre de systèmes capables de décider qu’il y avait un problème.&lt;/p&gt;
&lt;h2 id="checkmk-ma-montré-ce-qui-me-manquait"&gt;Checkmk m’a montré ce qui me manquait
&lt;/h2&gt;&lt;p&gt;Je n’avais encore jamais vraiment utilisé &lt;a class="link" href="https://checkmk.com/product/checkmk-community" target="_blank" rel="noopener"
&gt;Checkmk&lt;/a&gt;. C’était donc l’occasion de tester une solution plus large (et probablement sur-vendue), capable de découvrir une machine et de transformer automatiquement ce qu’elle expose en services supervisés.&lt;/p&gt;
&lt;p&gt;La première impression a été plutôt bonne. L’agent et les modules fournis de base remontaient beaucoup de choses sans que j’aie à tout construire à la main. CPU, mémoire, disques, interfaces, services systemd, conteneurs Docker : je retrouvais enfin les ressources et les services dans la même plateforme.&lt;/p&gt;
&lt;p&gt;C’est cette profondeur prête à l’emploi qui m’a convaincu : je pouvais partir d’une VM, descendre jusqu’à ses services et ajouter mes propres contrôles lorsque le standard ne suffisait plus.&lt;/p&gt;
&lt;p&gt;J’ai ainsi intégré des sondes DNS, des contrôles Proxmox et plusieurs scénarios mail. Je ne voulais pas seulement vérifier que les ports 25 ou 993 étaient ouverts. Je voulais établir une session chiffrée, m’authentifier, envoyer un message identifié, le retrouver en IMAP, mesurer son délai et nettoyer la boîte après le test.&lt;/p&gt;
&lt;p&gt;À ce moment-là, ma supervision commençait réellement à représenter le fonctionnement du homelab.&lt;/p&gt;
&lt;p&gt;Elle a aussi commencé à faire du bruit. Les interfaces TAP éphémères de Proxmox disparaissaient, les jobs du runner provoquaient des pics de mémoire et certains seuils réagissaient à des variations sans conséquence. J’ai raconté séparément comment j’ai &lt;a class="link" href="https://blog.homeblack.fr/p/reduire-bruit-alertes-checkmk/" &gt;repris en main ces alertes Checkmk&lt;/a&gt;, car cette étape m’a appris une chose importante : collecter beaucoup d’informations ne suffit pas, il faut encore décider lesquelles méritent de m’interrompre.&lt;/p&gt;
&lt;h2 id="puis-loutil-a-commencé-à-me-fatiguer"&gt;Puis l’outil a commencé à me fatiguer
&lt;/h2&gt;&lt;p&gt;Plus je poussais Checkmk, plus son ergonomie me ralentissait. L’interface me donnait parfois l’impression d’avoir été dessinée par un maçon : tout était solide, mais il fallait connaître le plan du bâtiment pour retrouver la bonne porte.&lt;/p&gt;
&lt;p&gt;La création de dashboards a été le point le plus visible. J’avais déjà Grafana, où je pouvais construire une vue exactement comme je l’imaginais. Dans Checkmk, obtenir une présentation sur mesure me demandait beaucoup plus d’efforts pour un résultat qui me convenait moins.&lt;/p&gt;
&lt;p&gt;La performance a aussi pesé dans la balance. Sur ma VM équipée de quatre vCPU, l’expérience restait plus lourde que ce que j’attendais pour la taille de mon homelab. Les métriques étaient bien conservées, mais leur consultation et leur chargement me semblaient lents. Dans mon usage, les contrôles restaient essentiellement calés sur la cadence standard d’une minute, alors que j’avais déjà une collecte plus fine dans VictoriaMetrics pour alimenter Grafana.&lt;/p&gt;
&lt;p&gt;Une partie de cette différence vient du &lt;a class="link" href="https://docs.checkmk.com/latest/en/cse.html" target="_blank" rel="noopener"
&gt;découpage des éditions&lt;/a&gt;. Checkmk Community est bien entièrement open source, mais elle utilise le cœur Nagios. Le Checkmk Micro Core, plus efficace, ainsi que plusieurs fonctions avancées de graphes et de connexion aux bases de métriques externes appartiennent aux éditions commerciales.&lt;/p&gt;
&lt;p&gt;Le SSO (Single Sign-On) a fini d’illustrer ce décalage. &lt;a class="link" href="https://docs.checkmk.com/latest/en/saml.html" target="_blank" rel="noopener"
&gt;L’intégration SAML native&lt;/a&gt; est elle aussi commerciale. En Community, j’aurais dû ajouter une couche d’authentification Apache ou monter une intégration LDAP avec Authentik uniquement pour Checkmk.&lt;/p&gt;
&lt;p&gt;Ce n’était pas impossible. C’était juste franchement pénible, en 2026, de réserver une simple connexion SSO aux versions payantes. Pour les ACL ou le RBAC, à la limite… mais la connexion ?&lt;/p&gt;
&lt;p&gt;Je n’ai rien contre les logiciels payants. Je préfère même une proposition claire, gratuite ou payante, à une succession de limites qui apparaissent lorsque je commence à exploiter sérieusement l’outil. Avec Checkmk, j’avais choisi Community pour sa promesse open source, mais plusieurs améliorations qui répondaient précisément à mes frustrations me renvoyaient vers une autre édition.&lt;/p&gt;
&lt;p&gt;J’ai donc profité de ce moment pour vérifier si un autre outil correspondait mieux à la direction prise par mon homelab.&lt;/p&gt;
&lt;h2 id="revenir-à-zabbix-mais-pas-par-nostalgie"&gt;Revenir à Zabbix, mais pas par nostalgie
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://www.zabbix.com/" target="_blank" rel="noopener"
&gt;Zabbix&lt;/a&gt; n’était pas une découverte totale. Je l’avais déjà utilisé auparavant pour du pro et je connaissais une partie de ses forces : une grosse communauté, beaucoup de modèles, une architecture éprouvée et une grande liberté pour construire des contrôles sur mesure.&lt;/p&gt;
&lt;p&gt;Son &lt;a class="link" href="https://www.zabbix.com/documentation/current/en/manual/concepts/agent2" target="_blank" rel="noopener"
&gt;Agent 2&lt;/a&gt; a beaucoup compté dans mon choix. Il reprend les contrôles système classiques et ajoute une architecture de plugins pour des composants comme Docker, systemd, SMART ou différentes bases de données. Son empreinte restait raisonnable pour mes machines, surtout face à l’alternative qui consistait à multiplier les agents spécialisés.&lt;/p&gt;
&lt;p&gt;Surtout, Zabbix me laissait plusieurs chemins pour une même donnée : agent actif, requête HTTP, SNMP, élément dépendant, découverte bas niveau, script externe ou &lt;code&gt;UserParameter&lt;/code&gt;. Cette variété peut rendre la prise en main dense, mais elle correspond bien à ma manière de travailler. Si un contrôle n’existe pas, je peux le construire, le versionner et le rattacher au même hôte que le reste de sa supervision.&lt;/p&gt;
&lt;p&gt;La plateforme reste &lt;a class="link" href="https://github.com/zabbix/zabbix/blob/master/COPYING" target="_blank" rel="noopener"
&gt;open source sous licence AGPL&lt;/a&gt;. Je pouvais utiliser le SSO SAML, ajuster la rétention et créer mes modèles sans changer d’édition. Grafana gardait son rôle de cockpit : VictoriaMetrics alimentait les vues d’infrastructure, et Zabbix Agent 2 lui fournissait les métriques des conteneurs sans ajouter cAdvisor.&lt;/p&gt;
&lt;p&gt;Sur le papier, le choix était séduisant. Il restait à prouver que Zabbix pouvait reprendre les contrôles qui rendaient Checkmk réellement utile chez moi.&lt;/p&gt;
&lt;h2 id="une-migration-en-parallèle"&gt;Une migration en parallèle
&lt;/h2&gt;&lt;p&gt;J’ai fait fonctionner Zabbix et Checkmk en parallèle le temps de reprendre les contrôles indispensables : Proxmox, Docker, systemd, OPNsense, DNS et les boucles mail. Une fois la couverture et les notifications vérifiées, Zabbix est devenu la plateforme de référence le 13 août 2026 et les agents Checkmk ont été retirés progressivement. J’ai conservé une sauvegarde protégée de la VM Checkmk pour pouvoir revenir en arrière si nécessaire.&lt;/p&gt;
&lt;h2 id="ce-que-cette-migration-a-réellement-changé"&gt;Ce que cette migration a réellement changé
&lt;/h2&gt;&lt;p&gt;Aujourd’hui, je n’attends pas d’un seul outil qu’il fasse tout.&lt;/p&gt;
&lt;p&gt;Grafana reste mon premier écran lorsque je veux prendre la température du homelab. Ses dashboards sont directs, visuels et construits autour de mes questions.
Zabbix collecte les états, découvre les services et décide quand une anomalie devient un problème. Argus récupère dans Zabbix les versions réellement déployées. Plus récemment, CairnOps est venu ajouter une couche d’hypervision en utilisant Zabbix comme source.&lt;/p&gt;
&lt;p&gt;Je sais désormais où regarder une tendance, où chercher un événement et quel système porte la décision d’alerter. Ajouter un outil reste possible, mais seulement s’il possède un rôle qui n’existe pas déjà ailleurs.&lt;/p&gt;
&lt;p&gt;Beszel m’a rappelé la valeur d’une supervision simple.
Checkmk m’a montré l’intérêt de descendre jusqu’aux services et aux contrôles métier.
Zabbix m’a finalement donné la souplesse nécessaire pour réunir ces besoins sans abandonner les outils spécialisés qui fonctionnaient déjà bien.&lt;/p&gt;
&lt;p&gt;Dans les prochains articles, je ferai le tour de cette architecture actuelle : Grafana comme cockpit, Zabbix derrière les alertes, puis les outils qui gravitent autour, notamment Argus, Uptime Kuma, LogChef et PatchMon. CairnOps aura droit à son propre récit, parce que son arrivée commence déjà à changer ma manière de lire l’état global du homelab.&lt;/p&gt;</description></item><item><title>Trop d’alertes, plus aucune confiance : comment j’ai repris en main Checkmk</title><link>https://blog.homeblack.fr/p/reduire-bruit-alertes-checkmk/</link><pubDate>Wed, 29 Jul 2026 16:00:00 +0200</pubDate><guid>https://blog.homeblack.fr/p/reduire-bruit-alertes-checkmk/</guid><description>&lt;img src="https://blog.homeblack.fr/p/reduire-bruit-alertes-checkmk/cover.png" alt="Featured image of post Trop d’alertes, plus aucune confiance : comment j’ai repris en main Checkmk" /&gt;&lt;p&gt;Une interface réseau disparaît à la fin d’un job. La mémoire du runner grimpe pendant un build. Une sonde mail dépasse son délai une seule fois. Un disque rappelle toutes les quelques minutes qu’il est toujours plein.&lt;/p&gt;
&lt;p&gt;Pris séparément, chacun de ces événements mérite d’être observé. Transformés avec la même urgence en notifications, ils finissent surtout par m’apprendre à ne plus les regarder.&lt;/p&gt;
&lt;p&gt;C’est le piège classique de la supervision : au début, on veut tout voir. Puis on ajoute des contrôles, des machines et des seuils jusqu’au moment où le système fonctionne techniquement, mais où le signal utile se retrouve noyé dans le bruit.&lt;/p&gt;
&lt;p&gt;J’ai donc repris mes règles Checkmk une par une. Mon objectif n’était pas d’obtenir un joli écran entièrement vert. Je voulais qu’une notification signifie de nouveau : « il faut regarder maintenant ».&lt;/p&gt;
&lt;h2 id="le-bruit-na-pas-une-cause-unique"&gt;Le bruit n’a pas une cause unique
&lt;/h2&gt;&lt;p&gt;La mauvaise solution aurait été de relever tous les seuils ou de désactiver les services pénibles. C’est tentant, rapide et particulièrement efficace pour fabriquer une fausse tranquillité.&lt;/p&gt;
&lt;p&gt;À la place, j’ai classé chaque alerte dans l’une de ces familles :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Situation&lt;/th&gt;
&lt;th&gt;Exemple dans mon homelab&lt;/th&gt;
&lt;th&gt;Réponse&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;état attendu&lt;/td&gt;
&lt;td&gt;interface TAP supprimée avec une VM éphémère&lt;/td&gt;
&lt;td&gt;ignorer précisément ce service&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;incident transitoire&lt;/td&gt;
&lt;td&gt;pic de mémoire pendant un job CI&lt;/td&gt;
&lt;td&gt;demander une seconde confirmation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;problème réel mais répétitif&lt;/td&gt;
&lt;td&gt;disque toujours en alerte&lt;/td&gt;
&lt;td&gt;conserver l’état, espacer les notifications&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;seuil mal adapté&lt;/td&gt;
&lt;td&gt;résolution DNS correcte mais un peu variable&lt;/td&gt;
&lt;td&gt;recalibrer avec une mesure cohérente&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Cette distinction paraît évidente après coup. Dans la pratique, elle oblige à répondre à une question parfois inconfortable : qu’est-ce qui justifie réellement de m’interrompre ?&lt;/p&gt;
&lt;h2 id="les-interfaces-tap--du-bruit-parfaitement-normal"&gt;Les interfaces TAP : du bruit parfaitement normal
&lt;/h2&gt;&lt;p&gt;Mes nœuds Proxmox créent des interfaces TAP pour connecter les interfaces réseau virtuelles des VM. Leur nom suit une forme comme :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tap&amp;lt;vmid&amp;gt;i&amp;lt;nic&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Ces interfaces vivent aussi longtemps que la VM ou la charge CI correspondante. Lorsqu’une machine temporaire s’arrête, son interface disparaît. Checkmk peut alors interpréter cette disparition comme un changement d’état à signaler.&lt;/p&gt;
&lt;p&gt;Le problème ne venait donc pas d’une panne réseau. Le cycle de vie normal d’une ressource éphémère était traité comme celui d’un port physique.&lt;/p&gt;
&lt;p&gt;J’ai commencé par faire découvrir les interfaces Proxmox avec leur description Linux stable plutôt qu’avec un numéro générique du type &lt;code&gt;Interface 12&lt;/code&gt;. Cela évite qu’un bridge, un VLAN ou une nouvelle interface récupère le service d’un ancien périphérique.&lt;/p&gt;
&lt;p&gt;J’ai ensuite ajouté une règle très ciblée :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;ruleset&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;ignored_services&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Homeblack - ignore ephemeral Proxmox TAP interfaces&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;value&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;conditions&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;host_name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;match_on&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;pve-dell&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;pve-forum&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;pve-fuji&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;operator&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;one_of&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;service_description&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;match_on&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Interface tap[0-9]+i[0-9]+$&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;operator&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;one_of&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Je n’ignore pas « les interfaces de Proxmox ». Je retire uniquement les services qui correspondent au motif des TAP éphémères. Les interfaces physiques, les bridges, les VLANs et les interfaces des machines invitées restent surveillés.&lt;/p&gt;
&lt;p&gt;C’est une nuance importante : une bonne exception décrit un comportement attendu, pas une catégorie suffisamment large pour faire disparaître le problème.&lt;/p&gt;
&lt;h2 id="un-pic-nest-pas-encore-une-panne"&gt;Un pic n’est pas encore une panne
&lt;/h2&gt;&lt;p&gt;Le runner GitLab présente un autre cas. Pendant un build, sa consommation mémoire peut monter brutalement pendant un cycle de contrôle, puis revenir à la normale.&lt;/p&gt;
&lt;p&gt;Ce pic reste intéressant. S’il dure, je veux le savoir. S’il ne concerne qu’une mesure isolée, je ne veux pas être interrompu.&lt;/p&gt;
&lt;p&gt;Checkmk distingue justement les états &lt;em&gt;soft&lt;/em&gt; et &lt;em&gt;hard&lt;/em&gt;. Un premier échec peut rester transitoire ; il ne devient un problème confirmé qu’après le nombre de tentatives défini.&lt;/p&gt;
&lt;p&gt;Pour le service &lt;code&gt;Memory&lt;/code&gt; de &lt;code&gt;trust-runner-01&lt;/code&gt;, j’ai choisi deux contrôles consécutifs :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;ruleset&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;extra_service_conf:max_check_attempts&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Homeblack - retry transient runner memory pressure&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;value&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;conditions&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;host_name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;match_on&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;trust-runner-01&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;operator&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;one_of&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;service_description&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;match_on&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Memory$&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;operator&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;one_of&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Un pic d’un cycle reste visible dans l’historique, mais ne déclenche pas de notification immédiate. Si la pression persiste au contrôle suivant, l’état devient &lt;em&gt;hard&lt;/em&gt; et l’alerte suit son chemin normal. Avec la fréquence actuelle des contrôles, cela représente environ une minute de confirmation.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.homeblack.fr/p/reduire-bruit-alertes-checkmk/cover.png"
width="2209"
height="1355"
srcset="https://blog.homeblack.fr/p/reduire-bruit-alertes-checkmk/cover_hu_55525788465104df.png 480w, https://blog.homeblack.fr/p/reduire-bruit-alertes-checkmk/cover_hu_7a059729b680908e.png 1024w"
loading="lazy"
alt="Le service Memory du runner dans Checkmk, avec ses pics de consommation visibles"
class="gallery-image"
data-flex-grow="163"
data-flex-basis="391px"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Les pics courts restent visibles dans le graphe sans transformer automatiquement chaque mesure isolée en notification.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;J’ai appliqué le même raisonnement aux contrôles SMTP entrant et IMAP de ma plateforme mail. Un timeout isolé mérite une nouvelle tentative ; deux échecs consécutifs commencent à ressembler à un incident.&lt;/p&gt;
&lt;p&gt;En revanche, je n’ai pas ajouté un délai arbitraire de plusieurs heures au test de livraison de bout en bout. Cette sonde possède déjà sa propre notion du temps : avertissement après 120 secondes et état critique après 300 secondes. Ajouter quatre heures de silence par-dessus revenait à rendre le contrôle presque inutile.&lt;/p&gt;
&lt;h2 id="espacer-une-notification-sans-effacer-le-problème"&gt;Espacer une notification sans effacer le problème
&lt;/h2&gt;&lt;p&gt;Les disques posent une question différente. Un filesystem plein, une erreur SMART ou une latence d’entrée-sortie ne disparaissent pas parce que j’ai déjà reçu l’alerte.&lt;/p&gt;
&lt;p&gt;Mais recevoir continuellement le même message ne rend pas la réparation plus rapide.&lt;/p&gt;
&lt;p&gt;J’ai conservé les services &lt;code&gt;SMART&lt;/code&gt;, &lt;code&gt;Filesystem&lt;/code&gt; et &lt;code&gt;Disk IO&lt;/code&gt; visibles dans Checkmk avec leurs états normaux. C’est uniquement la fréquence de leurs notifications sortantes qui est limitée :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;DISK_NOTIFICATION_COOLDOWN_SECONDS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;DISK_SERVICE_PREFIXES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;SMART &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Filesystem &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Disk IO &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Le mécanisme garde une réservation par couple hôte/service. Une première notification de problème passe, puis les répétitions sont bloquées pendant 24 heures glissantes. Si le problème reste actif, Checkmk envoie un rappel quotidien.&lt;/p&gt;
&lt;p&gt;Les retours à l’état normal restent présents dans l’historique Checkmk, mais ne génèrent pas de nouvelle notification pour ces trois familles de services. Je préfère ouvrir l’interface et retrouver toute la chronologie plutôt que d’être interrompu à chaque oscillation autour d’un seuil disque.&lt;/p&gt;
&lt;p&gt;Il y a un détail auquel je tenais : si l’envoi de la notification échoue, la réservation est libérée. Le système pourra donc retenter plus tard au lieu de considérer comme livré un message qui n’est jamais arrivé.&lt;/p&gt;
&lt;p&gt;Enfin, cette limitation ne concerne ni les hôtes, ni les autres services. Une machine inaccessible ou un contrôle métier en échec ne profite pas discrètement du même silence.&lt;/p&gt;
&lt;h2 id="un-seuil-doit-représenter-un-risque"&gt;Un seuil doit représenter un risque
&lt;/h2&gt;&lt;p&gt;La supervision DNS de Technitium m’a fourni un bon exemple de seuil techniquement valide, mais opérationnellement trop sensible.&lt;/p&gt;
&lt;p&gt;Je contrôle deux choses depuis le serveur Checkmk :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;une résolution DNS autoritative en UDP, avec vérification de la réponse ;&lt;/li&gt;
&lt;li&gt;l’ouverture du transport DNS sur le port TCP 53.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Au départ, les deux contrôles avertissaient au-dessus de 500 millisecondes. J’ai conservé ce seuil pour l’ouverture TCP, mais porté l’avertissement UDP à une seconde. L’état critique reste fixé à 1,5 seconde et le timeout à trois secondes.&lt;/p&gt;
&lt;p&gt;Pourquoi séparer les deux ? Une connexion TCP sur le réseau interne doit rester très rapide. Une requête DNS complète traverse davantage d’étapes et peut subir une variation ponctuelle sans que le service soit dégradé.&lt;/p&gt;
&lt;p&gt;Le 29 juillet 2026, ma vérification en lecture seule remontait :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Service&lt;/th&gt;
&lt;th style="text-align: right"&gt;État observé&lt;/th&gt;
&lt;th style="text-align: right"&gt;Temps de réponse&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;résolution DNS Technitium en UDP&lt;/td&gt;
&lt;td style="text-align: right"&gt;OK&lt;/td&gt;
&lt;td style="text-align: right"&gt;65 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;transport DNS Technitium en TCP&lt;/td&gt;
&lt;td style="text-align: right"&gt;OK&lt;/td&gt;
&lt;td style="text-align: right"&gt;7 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Ce sont des mesures prises à un instant donné, pas une promesse de performance. Elles confirment surtout que les contrôles interrogent réellement le service et exposent leur métrique après la modification.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.homeblack.fr/p/reduire-bruit-alertes-checkmk/checkmk-technitium-dns.png"
width="2209"
height="1355"
srcset="https://blog.homeblack.fr/p/reduire-bruit-alertes-checkmk/checkmk-technitium-dns_hu_43c66d4b85749bcc.png 480w, https://blog.homeblack.fr/p/reduire-bruit-alertes-checkmk/checkmk-technitium-dns_hu_4d9627a493fa113b.png 1024w"
loading="lazy"
alt="La sonde DNS UDP de Technitium dans Checkmk, avec ses seuils d’avertissement et critique"
class="gallery-image"
data-flex-grow="163"
data-flex-basis="391px"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;La mesure UDP reste très en dessous du seuil d’avertissement fixé à une seconde ; le seuil critique apparaît à 1,5 seconde.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="ce-que-je-refuse-de-faire-taire"&gt;Ce que je refuse de faire taire
&lt;/h2&gt;&lt;p&gt;Réduire le bruit n’a d’intérêt que si les vrais problèmes restent bruyants.&lt;/p&gt;
&lt;p&gt;Les avertissements critiques NVMe et les erreurs d’intégrité continuent donc d’alerter dès leur première occurrence. Les filesystems restent surveillés avec leurs seuils normaux. Lorsque le disque du runner manque réellement de place, la réponse attendue est un nettoyage ou une augmentation du volume, pas un seuil plus généreux.&lt;/p&gt;
&lt;p&gt;Même logique pour les TAP : j’ignore les interfaces éphémères, mais pas les uplinks. Pour la mémoire du runner, j’ajoute une confirmation, mais je ne supprime pas le contrôle. Pour le DNS, je détends seulement le seuil UDP ; le contrôle TCP conserve sa valeur plus stricte.&lt;/p&gt;
&lt;p&gt;Je me sers désormais de cette règle simple :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Si l’alerte représente un problème mesuré, je la garde. Si elle décrit un comportement attendu, je corrige son modèle.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="des-règles-versionnées-plutôt-que-des-clics-oubliés"&gt;Des règles versionnées plutôt que des clics oubliés
&lt;/h2&gt;&lt;p&gt;Tous ces réglages sont décrits dans le dépôt d’infrastructure et appliqués par un helper qui utilise l’API REST de Checkmk. Cela me permet de relire une exception, de comprendre pourquoi elle existe et de la tester comme le reste du code.&lt;/p&gt;
&lt;p&gt;Pour appliquer les règles de calibration :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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;python3 ansible/scripts/checkmk-rest-api.py calibrate-rules
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Je rejoue ensuite la commande sans activation :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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;python3 ansible/scripts/checkmk-rest-api.py calibrate-rules --no-activate
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;La seconde exécution doit annoncer toutes les règles gérées comme inchangées. Pour les modifications de découverte, notamment les interfaces Proxmox, je relance aussi explicitement la découverte des services concernés :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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;python3 ansible/scripts/checkmk-rest-api.py discover &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --host pve-dell &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --host pve-forum &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --host pve-fuji
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Les tests automatisés vérifient également la portée des règles : motif exact des TAP, deux tentatives pour la mémoire du runner et intervalle de 1 440 minutes pour les problèmes disque persistants.&lt;/p&gt;
&lt;p&gt;Enfin, je contrôle l’état effectif avec Livestatus, directement sur le serveur Checkmk. Lors de la dernière vérification, le service &lt;code&gt;Memory&lt;/code&gt; du runner était bien configuré avec deux tentatives maximales. Les deux boucles mail et les contrôles DNS étaient en état &lt;code&gt;OK&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Cette dernière étape est indispensable. Une configuration correcte dans Git ne prouve pas encore que Checkmk l’a activée ni qu’elle s’applique au bon service.&lt;/p&gt;
&lt;h2 id="ce-que-je-retiens"&gt;Ce que je retiens
&lt;/h2&gt;&lt;p&gt;Je pensais au départ qu’une bonne supervision devait tout remonter le plus vite possible. Je la vois maintenant comme un système de décisions : que faut-il conserver dans l’historique, que faut-il confirmer et qu’est-ce qui mérite réellement une interruption ?&lt;/p&gt;
&lt;p&gt;Les quatre leviers ne sont pas interchangeables :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ignorer précisément une ressource éphémère ;&lt;/li&gt;
&lt;li&gt;confirmer un état transitoire avec une nouvelle tentative ;&lt;/li&gt;
&lt;li&gt;espacer le rappel d’un problème déjà connu ;&lt;/li&gt;
&lt;li&gt;adapter un seuil à la mesure réellement effectuée.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Je garde volontairement le canal de réception en dehors de cet article. Je raconterai prochainement comment j’achemine ces alertes, où je les reçois et comment je décide lesquelles ont réellement le droit de m’interrompre.&lt;/p&gt;
&lt;p&gt;Depuis cette reprise, l’écran vert m’intéresse moins. Ce qui compte, c’est que la prochaine notification inhabituelle récupère immédiatement mon attention — et qu’elle la mérite.&lt;/p&gt;</description></item></channel></rss>