supervision : combler les angles morts — sondes, tâches planifiées, sorties produit (#228) #231
No reviewers
Labels
No labels
Compat/Breaking
EC01
EC02
EC03
EC04
EC05
EC06
Kind/BDD
Kind/Back
Kind/Bug
Kind/CICD
Kind/Cloud
Kind/Contenu
Kind/Data
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Front
Kind/IA
Kind/Infra
Kind/Monitoring
Kind/Security
Kind/Testing
Portée/Post-jury
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
ops/alerte
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
g2/enervision!231
Loading…
Reference in a new issue
No description provided.
Delete branch "gabriel/228-angles-morts-supervision"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Ferme #228.
Ce que la supervision ne voyait pas
Relevé sur la production ce matin. Toutes les cibles étaient vertes — elles
l'étaient sur ce qu'elles regardaient.
probe_*collectées, affichées dans aucun panneau/srv/www/appvide laissait toutes les sondes vertesprevision,recommandation,alerte,qualite_joursans aucun panneauCe que la PR change
Les sept tâches publient leur état. Le mécanisme sort de
collecte-current.shversbin/_metriques-ops.sh, sourcé par les septlanceurs. Chacun publie tentative, réussite, code, durée et cadence.
Les six lanceurs non instrumentés lançaient leur travail par
exec: le shellétait remplacé, rien ne pouvait s'exécuter après. Ils gardent maintenant la
main, capturent le code, publient, ressortent avec le même code. Le banc
refuse désormais un
execen dernière ligne — c'est ce qui empêchera le troude se rouvrir.
La cadence publiée permet une seule règle pour les sept tâches, au lieu de
sept seuils recopiés :
Deux tableaux de bord.
disponibilite(frise par service, latences,décomposition HTTP, table des sondes, table des tâches, âge des sauvegardes,
alertes en cours) et
sorties-produit(prévisions, recommandations, alertes,qualité — là où
chaine-donnees'arrête).Le chemin du jury est sondé. Nouveau job
blackbox-vhostqui traverseCaddy en 443.
app.g2.enervisionne se résolvant pas depuis le serveur, le nompart en paramètre
hostname, que blackbox pose en en-têteHostet enSNI. MLflow et MinIO, eux non plus sondés, rejoignent le job
blackbox.Cinq alertes de plus, dans un second groupe « Disponibilité » — celui du
#42 reste intact, sans renumérotation ni relecture à refaire.
Ce que ça a déjà trouvé
En écrivant le tableau de bord des sorties, la requête a montré que cinq des
sept sites n'ont plus de prévision depuis hier 14 h — seuls Toulouse et
Marseille sont servis. Le journal d'inférence le confirme (
prévision périmée : elle vise 2026-09-08T14:00). Ce n'est pas corrigé ici — ce n'est pas lepérimètre du ticket — mais c'est exactement le genre de chose que la
supervision ne pouvait pas dire hier, et qu'elle dira demain. À regarder
avant la démonstration.
Vérifications
Contre la production, en lecture seule :
port séparé, arrêté depuis ;
promtool check configaccepte la configuration Prometheus ;promtool check metricsaccepte chacun des fichiers de métriques produits ;attendu.
Sur un banc à faux interpréteur, les sept lanceurs : code de sortie
préservé, métrique juste, fichier de réussite écrit seulement sur un succès,
et une passe de préproduction ne rafraîchit pas la fraîcheur de la production.
tests/ci/test-supervision.shpasse, enrichi de dix-huit cas d'essai. Lesdouze autres bancs
tests/ci/passent aussi.Risque et retour arrière
Le rechargement de Prometheus et le redémarrage de blackbox n'ont aucun effet
sur les services supervisés. Un tableau de bord invalide est refusé au
chargement sans toucher aux autres.
Le point sensible est la publication de métriques dans les six lanceurs. Trois
garde-fous : la publication est faite après la capture du code de retour et
n'en change pas la valeur ; toute écriture est gardée et
ops_publier_resultatrend toujours 0, donc une tâche ne peut pas échouer à cause de sa supervision ;
et l'écriture est atomique, node-exporter ne peut pas lire un fichier à moitié
écrit.
Retour arrière :
git revertpuis redéploiement--tags app,proxy.Ce qui reste ouvert, volontairement
Trois trous, nommés dans le runbook (§ 9) et dans le ticket, à reprendre en
Portée/Post-jury: l'API n'expose aucune métrique applicative (/metrics),donc ni taux d'erreur 5xx ni latence par route — l'ENF-04 n'est mesuré en
continu nulle part ; les journaux ne sont pas agrégés ; les métriques HTTP par
vhost de Caddy ne sont pas activées.
Leur correctif touche l'API (dépendance de plus, donc réinstallation du venv au
déploiement, et une règle Caddy pour ne pas exposer
/api/metricspubliquement) ou le Caddy de la forge, dont le fichier porte l'avertissement
« une erreur ici coupe la forge ». Pas dans une fenêtre de deux jours.
Relu en vérifiant, pas en croyant. Dix-sept fichiers dont les sept lanceurs cron : c'est l'endroit où une erreur arrête toute la chaîne en silence, donc c'est par là que j'ai commencé.
Ce que j'ai contrôlé
RACINEdéfini avant le.du fichier commun, dans les septgold-dailyrules.yaml,prometheus.yml,blackbox.yml,docker-compose.ymltests/ci/test-supervision.shexeccompriseLe point qui m'inquiétait le plus, et qui est bien traité :
collecte-current.shcontinue de publierev_ops_collecte_*à l'identique. Le supprimer aurait cassé l'alerte « collecte arrêtée » du #42, le panneau de fraîcheur du #197 et mon contrôle de production, sans que rien ne le dise. Tu as gardé les deux jeux côte à côte et écrit pourquoi. « Trois lignes de doublon valent mieux qu'une alerte réécrite à deux jours du jury » : c'est le bon arbitrage, et il est écrit là où quelqu'un le lira.La cadence publiée avec la métrique est la vraie idée de cette PR. Une règle pour sept tâches au lieu de sept seuils recopiés, et le seuil suit automatiquement le jour où une crontab bouge — ce qui vient d'arriver au #205.
Un seul point, et il est hors de ta PR
On passe de cinq alertes à dix, et de cinq tableaux à sept. Le README de la pile est à jour, bien vu. Deux endroits ne le sont pas :
docs/EXIGENCES-collectives.md, ENF-08 : « Cinq alertes ayant seuil, destinataire et action ». Dix ne viole pas une exigence qui pose un plancher, mais un jury qui compare comptera ;Rien qui bloque cette PR. Je m'occupe des deux, le second est de mon fait.
Ce que je n'ai pas pu vérifier
Les dix règles ne sont valides qu'à l'analyse syntaxique. Leur comportement réel ne se verra qu'après déploiement, quand Grafana les aura chargées et évaluées. Si le provisioning refuse une règle, c'est Grafana entier qui ne démarre pas — donc premier contrôle à faire après la mise en prod, avant tout le reste.
Bon pour moi. Je fusionne.