[infra] Prometheus applique une configuration vieille de 4 jours : un montage de fichier suit l'inode, pas le chemin #176
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
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
g2/enervision#176
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Exigence couverte
ENF-08
Épreuve servie
EC03 · CI/CD et qualité
Charge estimée
0,5 j.h
Ce qu'on veut obtenir
Prometheus tourne depuis 4 jours avec la configuration du 3 septembre. Le job
blackboxest dans le fichier côté hôte, quatre fois ; le conteneur en voit zéro.La cause est générale, pas propre à Prometheus.
prometheus.ymlest monté fichier par fichier. Quand Ansible met le dépôt à jour, git ne modifie pas le fichier en place : il en écrit un neuf et le renomme, donc nouvel inode. Un montage de fichier suit l'inode, pas le chemin. Le conteneur garde l'ancien contenu tant qu'il n'est pas recréé, et rien ne le signale.Conséquence immédiate : la cinquième alerte du #42, « latence et disponibilité de l'API », n'a aucune donnée sur laquelle se déclencher. Elle est provisionnée et muette.
Le même piège vaut pour tout montage de fichier unique de nos piles :
Caddyfile,datasources.yml,relais.py,openssh-down. Le déploiement les met à jour côté hôte sans que les conteneurs les relisent.Critères d'acceptation
probe_successrend au moins une série dans Prometheus, et la cible de l'API y figure.blackboxapparaît dans les cibles de Prometheus, à l'étatup.docs/runbooks/supervision.mddit comment reconnaître le cas : fichier à jour côté hôte, ancien côté conteneur.Comment on le vérifie
Commande curl -s 127.0.0.1:9090/api/v1/targets | grep blackbox
Commande docker exec ev-prometheus grep -c blackbox /etc/prometheus/prometheus.yml
Preuve les deux comptes concordent, et probe_success rend une série
Manuel d'exploitation à mettre à jour
Le correctif immédiat est un
docker compose up -d --force-recreate prometheusdans/opt/enervision/.repo/infra/compose/supervision. Le TSDB vit dans un volume nommé, rien n'est perdu.Ce geste ne ferme pas le ticket : il rétablit une fois, il n'empêche pas la prochaine dérive.
Risque et retour arrière
Recréer Prometheus coupe la collecte de métriques quelques secondes. Sans effet sur les données déjà écrites.
Le risque de ne rien faire est plus grand : une pile de supervision qui affiche une configuration qu'elle n'applique pas est pire qu'une absence de supervision, parce qu'on lui fait confiance.
Correctif immédiat appliqué, le ticket reste ouvert : il rétablit une fois, il n'empêche pas la prochaine dérive.
Avant / après
Les trois sondes répondent :
La cinquième alerte du #42 a enfin de quoi se déclencher.
Ce que le correctif ne fait pas, et qui appartient à ce ticket
Notre propre API n'est pas sondée. Les trois cibles ci-dessus datent d'avant le #113 :
127.0.0.1:8000n'y figure pas, alors que c'est le service dont la latence intéresse le jury. Une ligne à ajouter dansprometheus.yml, mais elle ne servira à rien tant que le conteneur ne relit pas son fichier, ce qui est justement le sujet.Et le piège reste entier pour les autres montages de fichier :
Caddyfile,datasources.yml,relais.py,openssh-down. Le déploiement les met à jour côté hôte sans que les conteneurs les relisent. C'est déjà ce qui a coûté le 404 du tableau de bord hier : la composition de la forge datait du 1er septembre.Les cinq critères d'acceptation restent à cocher, le quatrième en particulier : un redémarrage manuel ne compte pas comme correctif.
Fermé : le défaut n'existe plus, vérifié sur le serveur plutôt que déduit.
Même empreinte des deux côtés. La configuration servie est celle du dépôt, datée du dernier déploiement et non d'il y a quatre jours.
La cause était le montage de fichier unique, qui suit l'inode et non le chemin : un
git mvlaissait le conteneur sur l'ancien contenu. Le passage en montage de répertoire l'a réglé. Le #228 vient d'ajouter cinq sondes par-dessus, et Prometheus les voit — 13 cibles sur 13 en ce moment, contre 8 avant.