supervision : la sonde se declare dans le role, comme le flux
LE CONSTAT. 39 roles declarent leurs flux, 32 leur empreinte, 32 leur
authentification — tous derives. Et 19 groupes sur 19 declaraient une
surveillance en prose que RIEN n executait ; Icinga en surveillait deux.
La carte disait ce qui etait surveille, et personne ne surveillait.
LE MECANISME. Un role declare ses sondes dans meta/supervision.yml et
depose lui-meme son script dans /usr/local/lib/setops/sondes/. Le porteur
client_sante les fait toutes tourner et pousse un resultat passif par
sonde, sans savoir ce qu elles mesurent. serveur_icinga derive les objets
Service ET le filtre de permission d API des memes declarations. Ajouter
une sonde ne demande de toucher ni au porteur ni a Icinga.
PREMIERE SONDE : client_pki/certificat. Heures restantes sur le certificat
reellement pose, chaine verifiee, et empreinte SERVIE comparee au disque
quand un service le consomme. 14/14 au tenant, 7/7 au site.
QUATRE OBSTACLES, ET TROIS SONT LA MEME LECON.
La sonde a rendu 14/14 en CRITIQUE sur une PKI saine : openssl verify
-CAfile racine ne trouve pas l intermediaire qui signe nos certificats.
step certificate verify, lui, repond VALIDE.
Deployee au site, elle a rendu 5/7 : le seuil d avertissement (12 h)
etait AU-DESSUS du point de renouvellement (8 h, le tiers restant). Elle
criait avant que le mecanisme ne soit cense agir. Seuils ramenes a 6 h et
3 h. Un seuil se DERIVE du moment ou le mecanisme surveille agit.
Une alarme toujours allumee ne vaut pas mieux qu une alarme jamais
allumee : elle apprend a ne plus regarder. Une sonde se prouve DEUX FOIS,
verte sur le sain et rouge sur le casse.
Le filtre d API etait ecrit avant la lecture des declarations : les
services auraient existe et Icinga aurait refuse leurs resultats.
Et mon controle negatif a casse un service reel : substituer le certificat
d hote a fait propager un cert sans sa clef vers node_exporter. Un controle
negatif se fait sur une COPIE.
P64 tient les deux bouts : declaree sans etre deposee, ou deposee sans
etre declaree. Trois controles negatifs rejoues.
make prouver : CONFORME, 64 OK, 0 echec, 0 saute.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-09 21:45:49 -04:00
|
|
|
# Supervision dérivée des rôles
|
|
|
|
|
|
|
|
|
|
> **Pour qui :** celui qui ajoute un rôle à Set-OPS et se demande comment sa supervision
|
|
|
|
|
> arrive dans Icinga — et celui qui exploite et veut savoir d'où sortent les services
|
|
|
|
|
> qu'il voit.
|
|
|
|
|
|
|
|
|
|
> **La règle en une phrase.** Un rôle déclare les sondes de sa propre supervision ; le
|
|
|
|
|
> moteur en dérive les objets Icinga, la permission d'API et les preuves. Comme
|
|
|
|
|
> `meta/flux.yml` engendre nftables *et* OPNsense.
|
|
|
|
|
|
|
|
|
|
## Pourquoi
|
|
|
|
|
|
|
|
|
|
Le 2026-09-09, mesure du dépôt sur lui-même :
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
au 2026-09-09 :
|
|
|
|
|
39 rôles déclarent leurs flux -> nftables + OPNsense, dérivés
|
|
|
|
|
32 déclarent leur empreinte -> ressources des VM, dérivées
|
|
|
|
|
32 déclarent leur authentification -> habilitations, dérivées
|
|
|
|
|
19 groupes déclarent `surveillance:` -> RIEN
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Au 2026-09-09, les dix-neuf lignes `surveillance:` de `docs/dependances-groupes.yml` sont écrites,
|
|
|
|
|
versionnées, relues — et **aucune n'est exécutée**. Icinga surveillait deux choses :
|
|
|
|
|
`sauvegarde` et `sante`.
|
|
|
|
|
|
|
|
|
|
C'est la classe d'échec que ce dépôt nomme partout ailleurs, en version documentaire : la
|
|
|
|
|
carte dit ce qui est surveillé, et personne ne surveille. *Une intention écrite n'est pas
|
|
|
|
|
une mesure.*
|
|
|
|
|
|
sondes : le contrat ETAIT celui de Nagios, sans le savoir
Question posee : « tu connais le paquet monitoring-plugins ? » Oui — et le
contrat que docs/supervision-conception.md decrivait quelques heures plus
tot EST le sien, mot pour mot. Je l avais reinvente sans le nommer, alors
que positionnement.md dit l inverse : adopter aux seuils, ne pas
reimplementer.
Le document nomme desormais l API des greffons Nagios, ajoute le code 3
(INCONNU) et la partie « | metriques » qui manquaient, et dit la
consequence : un greffon standard EST une sonde valide, sans colle. Le
paquet en fournit 54. On n ecrit du shell que lorsque la verite a mesurer
est propre a Set-OPS. Le porteur separe maintenant texte et
performance_data.
ESSAYER UN VRAI GREFFON A REVELE DEUX DEFAUTS DU PORTEUR.
Un envoi refuse faisait taire TOUTES les sondes suivantes : rapporter
sortait en exit 1. Une sonde deposee mais non declaree supprimait le
rapport des autres, sante comprise — le tableau ne devenait pas rouge, il
devenait vide, et le ttl le perimait des heures plus tard sans dire
pourquoi.
Aucun delai de garde sur les sondes. check_disk 2.4.0-3+deb13u1 sur mon-01
tourne sans fin (etat R) quels que soient ses arguments : un greffon
STANDARD, sur une machine saine, qui boucle. Sans garde il figeait le
rapport entier toutes les quinze minutes. Chaque sonde tourne desormais
sous timeout 20 ; au-dela on rapporte INCONNU en le disant.
La lecon n est pas que les greffons standards sont mauvais : c est qu
adopter un standard ne dispense pas de l eprouver, et que le porteur doit
survivre a une sonde qui se comporte mal.
CONSTATE AU PASSAGE, NON CORRIGE : la configuration d exemple d Icinga
crie en permanence sur mon-01 — swap sur une VM sans swap, http sur un
port ou rien n ecoute, apt pour un paquet. Trois alarmes qui ne peuvent
que rester rouges, dans le seul endroit qui doit rester lisible.
Etat : certificat 14/14, sante 14/14 au tenant ; 7/7 au site.
make prouver : CONFORME, 64 OK, 0 echec, 0 saute.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-09 22:14:30 -04:00
|
|
|
## Le contrat d'une sonde : c'est celui des greffons Nagios
|
supervision : la sonde se declare dans le role, comme le flux
LE CONSTAT. 39 roles declarent leurs flux, 32 leur empreinte, 32 leur
authentification — tous derives. Et 19 groupes sur 19 declaraient une
surveillance en prose que RIEN n executait ; Icinga en surveillait deux.
La carte disait ce qui etait surveille, et personne ne surveillait.
LE MECANISME. Un role declare ses sondes dans meta/supervision.yml et
depose lui-meme son script dans /usr/local/lib/setops/sondes/. Le porteur
client_sante les fait toutes tourner et pousse un resultat passif par
sonde, sans savoir ce qu elles mesurent. serveur_icinga derive les objets
Service ET le filtre de permission d API des memes declarations. Ajouter
une sonde ne demande de toucher ni au porteur ni a Icinga.
PREMIERE SONDE : client_pki/certificat. Heures restantes sur le certificat
reellement pose, chaine verifiee, et empreinte SERVIE comparee au disque
quand un service le consomme. 14/14 au tenant, 7/7 au site.
QUATRE OBSTACLES, ET TROIS SONT LA MEME LECON.
La sonde a rendu 14/14 en CRITIQUE sur une PKI saine : openssl verify
-CAfile racine ne trouve pas l intermediaire qui signe nos certificats.
step certificate verify, lui, repond VALIDE.
Deployee au site, elle a rendu 5/7 : le seuil d avertissement (12 h)
etait AU-DESSUS du point de renouvellement (8 h, le tiers restant). Elle
criait avant que le mecanisme ne soit cense agir. Seuils ramenes a 6 h et
3 h. Un seuil se DERIVE du moment ou le mecanisme surveille agit.
Une alarme toujours allumee ne vaut pas mieux qu une alarme jamais
allumee : elle apprend a ne plus regarder. Une sonde se prouve DEUX FOIS,
verte sur le sain et rouge sur le casse.
Le filtre d API etait ecrit avant la lecture des declarations : les
services auraient existe et Icinga aurait refuse leurs resultats.
Et mon controle negatif a casse un service reel : substituer le certificat
d hote a fait propager un cert sans sa clef vers node_exporter. Un controle
negatif se fait sur une COPIE.
P64 tient les deux bouts : declaree sans etre deposee, ou deposee sans
etre declaree. Trois controles negatifs rejoues.
make prouver : CONFORME, 64 OK, 0 echec, 0 saute.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-09 21:45:49 -04:00
|
|
|
|
|
|
|
|
Une sonde est un **script local**, déposé par le rôle qui la possède, dans
|
|
|
|
|
`/usr/local/lib/setops/sondes/<nom>.sh` (0750, root).
|
|
|
|
|
|
|
|
|
|
| | |
|
|
|
|
|
|---|---|
|
sondes : le contrat ETAIT celui de Nagios, sans le savoir
Question posee : « tu connais le paquet monitoring-plugins ? » Oui — et le
contrat que docs/supervision-conception.md decrivait quelques heures plus
tot EST le sien, mot pour mot. Je l avais reinvente sans le nommer, alors
que positionnement.md dit l inverse : adopter aux seuils, ne pas
reimplementer.
Le document nomme desormais l API des greffons Nagios, ajoute le code 3
(INCONNU) et la partie « | metriques » qui manquaient, et dit la
consequence : un greffon standard EST une sonde valide, sans colle. Le
paquet en fournit 54. On n ecrit du shell que lorsque la verite a mesurer
est propre a Set-OPS. Le porteur separe maintenant texte et
performance_data.
ESSAYER UN VRAI GREFFON A REVELE DEUX DEFAUTS DU PORTEUR.
Un envoi refuse faisait taire TOUTES les sondes suivantes : rapporter
sortait en exit 1. Une sonde deposee mais non declaree supprimait le
rapport des autres, sante comprise — le tableau ne devenait pas rouge, il
devenait vide, et le ttl le perimait des heures plus tard sans dire
pourquoi.
Aucun delai de garde sur les sondes. check_disk 2.4.0-3+deb13u1 sur mon-01
tourne sans fin (etat R) quels que soient ses arguments : un greffon
STANDARD, sur une machine saine, qui boucle. Sans garde il figeait le
rapport entier toutes les quinze minutes. Chaque sonde tourne desormais
sous timeout 20 ; au-dela on rapporte INCONNU en le disant.
La lecon n est pas que les greffons standards sont mauvais : c est qu
adopter un standard ne dispense pas de l eprouver, et que le porteur doit
survivre a une sonde qui se comporte mal.
CONSTATE AU PASSAGE, NON CORRIGE : la configuration d exemple d Icinga
crie en permanence sur mon-01 — swap sur une VM sans swap, http sur un
port ou rien n ecoute, apt pour un paquet. Trois alarmes qui ne peuvent
que rester rouges, dans le seul endroit qui doit rester lisible.
Etat : certificat 14/14, sante 14/14 au tenant ; 7/7 au site.
make prouver : CONFORME, 64 OK, 0 echec, 0 saute.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-09 22:14:30 -04:00
|
|
|
| **sortie standard** | `TEXTE lisible` puis, optionnellement, `\| métriques` |
|
|
|
|
|
| **code de sortie** | `0` OK · `1` AVERTISSEMENT · `2` CRITIQUE · `3` INCONNU |
|
supervision : la sonde se declare dans le role, comme le flux
LE CONSTAT. 39 roles declarent leurs flux, 32 leur empreinte, 32 leur
authentification — tous derives. Et 19 groupes sur 19 declaraient une
surveillance en prose que RIEN n executait ; Icinga en surveillait deux.
La carte disait ce qui etait surveille, et personne ne surveillait.
LE MECANISME. Un role declare ses sondes dans meta/supervision.yml et
depose lui-meme son script dans /usr/local/lib/setops/sondes/. Le porteur
client_sante les fait toutes tourner et pousse un resultat passif par
sonde, sans savoir ce qu elles mesurent. serveur_icinga derive les objets
Service ET le filtre de permission d API des memes declarations. Ajouter
une sonde ne demande de toucher ni au porteur ni a Icinga.
PREMIERE SONDE : client_pki/certificat. Heures restantes sur le certificat
reellement pose, chaine verifiee, et empreinte SERVIE comparee au disque
quand un service le consomme. 14/14 au tenant, 7/7 au site.
QUATRE OBSTACLES, ET TROIS SONT LA MEME LECON.
La sonde a rendu 14/14 en CRITIQUE sur une PKI saine : openssl verify
-CAfile racine ne trouve pas l intermediaire qui signe nos certificats.
step certificate verify, lui, repond VALIDE.
Deployee au site, elle a rendu 5/7 : le seuil d avertissement (12 h)
etait AU-DESSUS du point de renouvellement (8 h, le tiers restant). Elle
criait avant que le mecanisme ne soit cense agir. Seuils ramenes a 6 h et
3 h. Un seuil se DERIVE du moment ou le mecanisme surveille agit.
Une alarme toujours allumee ne vaut pas mieux qu une alarme jamais
allumee : elle apprend a ne plus regarder. Une sonde se prouve DEUX FOIS,
verte sur le sain et rouge sur le casse.
Le filtre d API etait ecrit avant la lecture des declarations : les
services auraient existe et Icinga aurait refuse leurs resultats.
Et mon controle negatif a casse un service reel : substituer le certificat
d hote a fait propager un cert sans sa clef vers node_exporter. Un controle
negatif se fait sur une COPIE.
P64 tient les deux bouts : declaree sans etre deposee, ou deposee sans
etre declaree. Trois controles negatifs rejoues.
make prouver : CONFORME, 64 OK, 0 echec, 0 saute.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-09 21:45:49 -04:00
|
|
|
| **réseau** | aucun besoin : c'est le porteur qui pousse le résultat |
|
|
|
|
|
| **durée** | courte ; le porteur passe toutes les 15 min |
|
|
|
|
|
|
sondes : le contrat ETAIT celui de Nagios, sans le savoir
Question posee : « tu connais le paquet monitoring-plugins ? » Oui — et le
contrat que docs/supervision-conception.md decrivait quelques heures plus
tot EST le sien, mot pour mot. Je l avais reinvente sans le nommer, alors
que positionnement.md dit l inverse : adopter aux seuils, ne pas
reimplementer.
Le document nomme desormais l API des greffons Nagios, ajoute le code 3
(INCONNU) et la partie « | metriques » qui manquaient, et dit la
consequence : un greffon standard EST une sonde valide, sans colle. Le
paquet en fournit 54. On n ecrit du shell que lorsque la verite a mesurer
est propre a Set-OPS. Le porteur separe maintenant texte et
performance_data.
ESSAYER UN VRAI GREFFON A REVELE DEUX DEFAUTS DU PORTEUR.
Un envoi refuse faisait taire TOUTES les sondes suivantes : rapporter
sortait en exit 1. Une sonde deposee mais non declaree supprimait le
rapport des autres, sante comprise — le tableau ne devenait pas rouge, il
devenait vide, et le ttl le perimait des heures plus tard sans dire
pourquoi.
Aucun delai de garde sur les sondes. check_disk 2.4.0-3+deb13u1 sur mon-01
tourne sans fin (etat R) quels que soient ses arguments : un greffon
STANDARD, sur une machine saine, qui boucle. Sans garde il figeait le
rapport entier toutes les quinze minutes. Chaque sonde tourne desormais
sous timeout 20 ; au-dela on rapporte INCONNU en le disant.
La lecon n est pas que les greffons standards sont mauvais : c est qu
adopter un standard ne dispense pas de l eprouver, et que le porteur doit
survivre a une sonde qui se comporte mal.
CONSTATE AU PASSAGE, NON CORRIGE : la configuration d exemple d Icinga
crie en permanence sur mon-01 — swap sur une VM sans swap, http sur un
port ou rien n ecoute, apt pour un paquet. Trois alarmes qui ne peuvent
que rester rouges, dans le seul endroit qui doit rester lisible.
Etat : certificat 14/14, sante 14/14 au tenant ; 7/7 au site.
make prouver : CONFORME, 64 OK, 0 echec, 0 saute.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-09 22:14:30 -04:00
|
|
|
> **Ce contrat n'est pas de nous.** C'est l'**API des greffons Nagios**, que
|
|
|
|
|
> `monitoring-plugins` implémente depuis vingt ans et qu'Icinga parle nativement. La
|
|
|
|
|
> première rédaction de ce document la décrivait sans la nommer — autrement dit la
|
|
|
|
|
> réinventait. `positionnement.md` dit l'inverse : *adopter aux seuils, ne pas
|
|
|
|
|
> réimplémenter*.
|
|
|
|
|
|
|
|
|
|
**La conséquence pratique est grande.** Un greffon standard **est** une sonde valide, sans
|
|
|
|
|
la moindre colle : `check_disk`, `check_load`, `check_procs`, `check_ntp_time`,
|
|
|
|
|
`check_file_age`, `check_smtp`, `check_pgsql`… Le paquet en fournit **54**. Une sonde ne
|
|
|
|
|
s'écrit à la main que lorsque la vérité à mesurer est propre à Set-OPS — et c'était le cas
|
|
|
|
|
pour `client_pki/certificat`, qui compare l'empreinte *servie* à celle du disque : aucun
|
|
|
|
|
greffon ne sait ça.
|
|
|
|
|
|
|
|
|
|
Écrire du shell là où un greffon existe, c'est se donner du code à maintenir *et* se priver
|
|
|
|
|
de vingt ans de cas limites déjà rencontrés par d'autres.
|
|
|
|
|
|
supervision : la sonde se declare dans le role, comme le flux
LE CONSTAT. 39 roles declarent leurs flux, 32 leur empreinte, 32 leur
authentification — tous derives. Et 19 groupes sur 19 declaraient une
surveillance en prose que RIEN n executait ; Icinga en surveillait deux.
La carte disait ce qui etait surveille, et personne ne surveillait.
LE MECANISME. Un role declare ses sondes dans meta/supervision.yml et
depose lui-meme son script dans /usr/local/lib/setops/sondes/. Le porteur
client_sante les fait toutes tourner et pousse un resultat passif par
sonde, sans savoir ce qu elles mesurent. serveur_icinga derive les objets
Service ET le filtre de permission d API des memes declarations. Ajouter
une sonde ne demande de toucher ni au porteur ni a Icinga.
PREMIERE SONDE : client_pki/certificat. Heures restantes sur le certificat
reellement pose, chaine verifiee, et empreinte SERVIE comparee au disque
quand un service le consomme. 14/14 au tenant, 7/7 au site.
QUATRE OBSTACLES, ET TROIS SONT LA MEME LECON.
La sonde a rendu 14/14 en CRITIQUE sur une PKI saine : openssl verify
-CAfile racine ne trouve pas l intermediaire qui signe nos certificats.
step certificate verify, lui, repond VALIDE.
Deployee au site, elle a rendu 5/7 : le seuil d avertissement (12 h)
etait AU-DESSUS du point de renouvellement (8 h, le tiers restant). Elle
criait avant que le mecanisme ne soit cense agir. Seuils ramenes a 6 h et
3 h. Un seuil se DERIVE du moment ou le mecanisme surveille agit.
Une alarme toujours allumee ne vaut pas mieux qu une alarme jamais
allumee : elle apprend a ne plus regarder. Une sonde se prouve DEUX FOIS,
verte sur le sain et rouge sur le casse.
Le filtre d API etait ecrit avant la lecture des declarations : les
services auraient existe et Icinga aurait refuse leurs resultats.
Et mon controle negatif a casse un service reel : substituer le certificat
d hote a fait propager un cert sans sa clef vers node_exporter. Un controle
negatif se fait sur une COPIE.
P64 tient les deux bouts : declaree sans etre deposee, ou deposee sans
etre declaree. Trois controles negatifs rejoues.
make prouver : CONFORME, 64 OK, 0 echec, 0 saute.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-09 21:45:49 -04:00
|
|
|
Le rôle qui possède la sonde la **déploie lui-même** : il connaît ses chemins, ses
|
|
|
|
|
secrets, sa vérité de terrain. Il la **déclare** dans `meta/supervision.yml`, et c'est
|
|
|
|
|
cette déclaration que le moteur lit.
|
|
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
|
# roles/<rôle>/meta/supervision.yml
|
|
|
|
|
sondes:
|
|
|
|
|
- nom: certificat
|
|
|
|
|
ttl: 5400
|
|
|
|
|
raison: "..."
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Passif, et à durée de vie — jamais actif
|
|
|
|
|
|
|
|
|
|
Un contrôle **actif** ne voit pas la machine **muette** : si elle ne répond plus, la sonde
|
|
|
|
|
échoue et on met ça sur le compte du réseau. Ici c'est le nœud qui parle, et le `ttl` de
|
|
|
|
|
son envoi fait la fraîcheur — sans nouvelle, Icinga périme le service tout seul.
|
|
|
|
|
|
|
|
|
|
**Le silence alerte autant que l'échec.** C'est exactement ce qui a manqué à
|
|
|
|
|
`openipmi.service` : une unité en échec à chaque démarrage pendant une semaine, et
|
|
|
|
|
`systemctl --failed` à zéro partout parce qu'aucune machine n'avait redémarré.
|
|
|
|
|
|
|
|
|
|
C'est aussi ce qu'impose *la vérification suit la clé* : la sonde tourne là où vit la
|
|
|
|
|
vérité, pas sur le superviseur. Un dépôt de sauvegarde chiffré côté client ne peut être
|
|
|
|
|
jugé que par qui détient la clé.
|
|
|
|
|
|
|
|
|
|
## Ce qui n'a rien à faire ici
|
|
|
|
|
|
|
|
|
|
Une **métrique à seuil** — durée de collecte, volume de journaux, taux d'occupation —
|
|
|
|
|
appartient à Prometheus et Grafana. Icinga répond à une seule question : *est-ce cassé ?*
|
|
|
|
|
Mélanger les deux rendrait les deux moins lisibles.
|
|
|
|
|
|
|
|
|
|
## Chaque sonde vient avec son contrôle négatif
|
|
|
|
|
|
|
|
|
|
Une sonde qu'on n'a jamais vue échouer n'est pas une sonde, c'est une habitude. Dix-neuf
|
|
|
|
|
voyants verts non éprouvés seraient un recul par rapport à deux voyants prouvés : ils
|
|
|
|
|
rassureraient.
|
|
|
|
|
|
|
|
|
|
Toute sonde ajoutée doit donc être accompagnée de la manière de la faire échouer
|
|
|
|
|
**pour de vrai**, et cette manière doit être rejouée au moins une fois, sur une machine
|
|
|
|
|
réelle. Le CHANGELOG en porte la trace.
|
|
|
|
|
|
|
|
|
|
**Et contre un état sain, tout autant.** La première version de la sonde du certificat a
|
|
|
|
|
rendu **14 machines sur 14 en CRITIQUE** — sur une PKI qui se portait très bien. Elle
|
|
|
|
|
utilisait `openssl verify -CAfile racine`, alors que nos certificats sont signés par un
|
|
|
|
|
*intermédiaire* que seul `step certificate verify` sait retrouver. Une alarme toujours
|
|
|
|
|
allumée ne vaut pas mieux qu'une alarme jamais allumée : elle apprend à ne plus regarder.
|
|
|
|
|
Une sonde se prouve donc **deux fois** — verte sur le sain, rouge sur le cassé.
|
|
|
|
|
|
supervision : la regle qui decide COMBIEN de sondes
Question posee : « une sonde par role, est-ce parce qu elles agregent
plusieurs verifications ? » Oui — et « une par role » n etait pas mon
critere, c etait une coincidence : la plupart de ces roles n ont qu une
preoccupation. Mesure : les quatorze sondes agregent de 2 a 6 chemins d
echec chacune.
Le critere, applique en silence jusqu ici, est desormais ecrit : UNE SONDE
PAR CAUSE D ACTION — ni par role, ni par verification.
CE QUE COUTE UNE AGREGATION ABUSIVE, dans le modele d Icinga : un service
= un etat, un historique, un acquittement. Fondre deux causes qui
appellent des gestes differents, c est ne plus pouvoir acquitter l une
pendant que l autre alerte, et lire comme un service instable ce qui est
deux faits distincts qui alternent.
CE QUE COUTE L EXCES INVERSE : un voyant de plus est un voyant de moins
regarde.
Le test : les deux echecs appellent-ils le meme geste, de la meme
personne, dans le meme delai ? Si oui une sonde, et le message nomme
lequel a parle. Si non, deux.
Par ce critere, deux sondes existantes sont abusives : `certificat` (trois
gestes — minuteur bloque, AC changee, consommateur a recharger) et
`cache-apt` (deux delais — panne immediate contre billet pour demain).
Non scindees : c est une decision sur le nombre de voyants au mur.
make prouver : CONFORME, 64 OK, 0 echec, 0 saute.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-10 03:10:24 -04:00
|
|
|
## Combien de sondes : une par CAUSE D'ACTION
|
|
|
|
|
|
|
|
|
|
Ni une par rôle, ni une par vérification. **Une par geste que le verdict appelle.**
|
|
|
|
|
|
|
|
|
|
Les quatorze premières sondes agrègent chacune de deux à six chemins d'échec, et ce choix
|
|
|
|
|
avait été fait **sans être écrit** — d'où cette section, ajoutée le 2026-09-10 après la
|
|
|
|
|
question : *« est-ce parce qu'elles agrègent plusieurs vérifications ? »*
|
|
|
|
|
|
|
|
|
|
**Ce que coûte une agrégation abusive**, dans le modèle d'Icinga : un service = **un état,
|
|
|
|
|
un historique, un acquittement**. Fondre deux causes qui appellent des gestes différents,
|
|
|
|
|
c'est ne plus pouvoir acquitter l'une pendant que l'autre alerte — et lire comme *un
|
|
|
|
|
service instable* ce qui est en réalité *deux faits distincts qui alternent*.
|
|
|
|
|
|
|
|
|
|
**Ce que coûte l'excès inverse** : un voyant de plus est un voyant de moins regardé. Le
|
|
|
|
|
dépôt le répète assez — *une supervision creuse est pire qu'aucune*.
|
|
|
|
|
|
|
|
|
|
Le test pratique, à appliquer sans état d'âme :
|
|
|
|
|
|
|
|
|
|
> Les deux échecs appellent-ils **le même geste, de la même personne, dans le même délai** ?
|
|
|
|
|
> Si oui, une seule sonde, et le message nomme lequel des deux a parlé.
|
|
|
|
|
> Si non, deux sondes.
|
|
|
|
|
|
|
|
|
|
**Exemple d'agrégation légitime** — `moteur` : `icinga2` mort, `icingadb` mort, état figé en
|
|
|
|
|
base. Trois causes, un seul geste : *va regarder la supervision*. Le message dit laquelle.
|
|
|
|
|
|
|
|
|
|
**Exemple d'agrégation abusive** — `cache-apt` : « ne répond pas » arrête tout `apt` de
|
|
|
|
|
l'écosystème, « volume à 90 % » est un billet pour demain. Même personne, gestes et
|
|
|
|
|
**délais** différents : deux sondes.
|
|
|
|
|
|
sondes : les six premieres, et le patron qui les rend eprouvables
Ajout de meta/supervision.yml a six roles, chacun deposant sa propre sonde
selon le contrat des greffons Nagios.
DEUX PRINCIPES POSES AU DOCUMENT DE CONCEPTION, parce que la premiere
sonde les a imposes :
1. UNE SONDE DOIT POUVOIR ETRE MISE EN DEFAUT PAR PARAMETRE. Cible et
seuils sont des variables du role : on la prouve rouge avec un port ferme
ou un seuil impossible, sur une machine reelle, sans rien casser, et
aussi souvent qu on veut. Une sonde qu on ne peut prouver qu en cassant un
service ne sera prouvee qu une fois.
2. LA SONDE VIT LA OU VIT LA VERITE. « Ce noeud est-il collecte ? » est
une sonde de serveur_prometheus, pas de client_metrique : une seule y voit
les N noeuds, et surtout elle voit le cas SILENCIEUX — celui qui a cesse d
etre collecte ne peut pas s en plaindre.
LES SIX : cache-apt (artefacts, repond + place), resolution (resolveur,
zone interne ET Internet — deux chemins distincts), forge (forgejo, son
propre /api/healthz), collecte (prometheus, 15/15 cibles), tableaux
(grafana, base ok), ingestion (loki, PRET a ingerer, pas seulement en
ecoute).
TROIS FOIS J AI ECRIT LA SONDE AVANT DE MESURER, ET TROIS FOIS ELLE A EU
TORT. La forge : port 443 et chemin des depots INVENTES — elle ecoute en
3000 derriere l edge et n a legitimement aucun depot. Loki : j ai conclu
« panne persistante » sur deux lectures prises a quelques secondes d
intervalle, juste apres un redemarrage ; l anneau etait ACTIVE et la
reponse est passee a ready moins d une minute plus tard. Le delai de
stabilisation est desormais un AVERTISSEMENT nomme, pas une panne.
On demande au service ce qu il pense de lui-meme quand il sait le dire
(healthz, /ready, /api/health) plutot que d inventer un critere de l
exterieur.
make prouver : CONFORME.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-10 02:48:55 -04:00
|
|
|
## Une sonde doit pouvoir être mise en défaut *par paramètre*
|
|
|
|
|
|
|
|
|
|
Corollaire des deux règles précédentes, et c'est ce qui rend la discipline tenable à
|
|
|
|
|
l'échelle : une sonde dont on ne peut prouver le rouge qu'en **cassant un service** ne sera
|
|
|
|
|
prouvée qu'une fois, puis plus jamais.
|
|
|
|
|
|
|
|
|
|
Chaque sonde expose donc sa cible et ses seuils en variables du rôle. On la met en défaut
|
|
|
|
|
en lui donnant un port fermé, un nom qui n'existe pas, un seuil impossible — sur une
|
|
|
|
|
machine réelle, sans rien abîmer, et aussi souvent qu'on veut.
|
|
|
|
|
|
|
|
|
|
## Où vit la sonde : là où vit la vérité, pas là où vit le symptôme
|
|
|
|
|
|
|
|
|
|
*« La vérification suit la clé. »* Un nœud sait qu'il a **lancé** sa sauvegarde ; seul le
|
|
|
|
|
dépôt sait qu'elle a **abouti**. Un nœud sait qu'il **expose** ses métriques ; seul
|
|
|
|
|
Prometheus sait qu'il les **collecte**.
|
|
|
|
|
|
|
|
|
|
D'où un choix qui peut surprendre : *« ce nœud est-il bien collecté ? »* est une sonde de
|
|
|
|
|
**`serveur_prometheus`**, pas de `client_metrique`. Une seule sonde y voit les N nœuds à la
|
|
|
|
|
fois — et surtout, elle voit le cas **silencieux** : celui qui a cessé d'être collecté et
|
|
|
|
|
qui, par définition, ne peut pas s'en plaindre lui-même.
|
|
|
|
|
|
supervision : la sonde se declare dans le role, comme le flux
LE CONSTAT. 39 roles declarent leurs flux, 32 leur empreinte, 32 leur
authentification — tous derives. Et 19 groupes sur 19 declaraient une
surveillance en prose que RIEN n executait ; Icinga en surveillait deux.
La carte disait ce qui etait surveille, et personne ne surveillait.
LE MECANISME. Un role declare ses sondes dans meta/supervision.yml et
depose lui-meme son script dans /usr/local/lib/setops/sondes/. Le porteur
client_sante les fait toutes tourner et pousse un resultat passif par
sonde, sans savoir ce qu elles mesurent. serveur_icinga derive les objets
Service ET le filtre de permission d API des memes declarations. Ajouter
une sonde ne demande de toucher ni au porteur ni a Icinga.
PREMIERE SONDE : client_pki/certificat. Heures restantes sur le certificat
reellement pose, chaine verifiee, et empreinte SERVIE comparee au disque
quand un service le consomme. 14/14 au tenant, 7/7 au site.
QUATRE OBSTACLES, ET TROIS SONT LA MEME LECON.
La sonde a rendu 14/14 en CRITIQUE sur une PKI saine : openssl verify
-CAfile racine ne trouve pas l intermediaire qui signe nos certificats.
step certificate verify, lui, repond VALIDE.
Deployee au site, elle a rendu 5/7 : le seuil d avertissement (12 h)
etait AU-DESSUS du point de renouvellement (8 h, le tiers restant). Elle
criait avant que le mecanisme ne soit cense agir. Seuils ramenes a 6 h et
3 h. Un seuil se DERIVE du moment ou le mecanisme surveille agit.
Une alarme toujours allumee ne vaut pas mieux qu une alarme jamais
allumee : elle apprend a ne plus regarder. Une sonde se prouve DEUX FOIS,
verte sur le sain et rouge sur le casse.
Le filtre d API etait ecrit avant la lecture des declarations : les
services auraient existe et Icinga aurait refuse leurs resultats.
Et mon controle negatif a casse un service reel : substituer le certificat
d hote a fait propager un cert sans sa clef vers node_exporter. Un controle
negatif se fait sur une COPIE.
P64 tient les deux bouts : declaree sans etre deposee, ou deposee sans
etre declaree. Trois controles negatifs rejoues.
make prouver : CONFORME, 64 OK, 0 echec, 0 saute.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-09 21:45:49 -04:00
|
|
|
## Un contrôle négatif ne doit pas pouvoir abîmer
|
|
|
|
|
|
|
|
|
|
Éprouver la sonde du certificat, le 2026-09-09, a consisté à **remplacer le certificat
|
|
|
|
|
d'hôte** par un auto-signé. La sonde a bien viré au rouge — et le script de synchronisation
|
|
|
|
|
a propagé ce certificat vers `node_exporter`, dont la clé était restée l'ancienne :
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
failed to load X509KeyPair: tls: private key does not match public key
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Un service réel est tombé pour éprouver une sonde. Le contrôle avait un **rayon d'action**
|
|
|
|
|
que je ne lui avais pas donné volontairement.
|
|
|
|
|
|
|
|
|
|
La règle qui en découle : un contrôle négatif se fait sur une **copie**, ou sur un chemin
|
|
|
|
|
que la sonde accepte en paramètre — jamais en substituant l'artefact que d'autres
|
|
|
|
|
consomment. Quand c'est impossible, on le fait sur la machine la moins critique, on
|
|
|
|
|
l'annonce, et on vérifie l'état des consommateurs **après**, pas seulement celui de la
|
|
|
|
|
sonde.
|