infra: supervision Prometheus et Grafana, exporters et tableaux de bord #115
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!115
Loading…
Reference in a new issue
No description provided.
Delete branch "gabriel/31-supervision-prometheus-grafana"
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?
Ce que ça change
Pose la pile de supervision (
infra/compose/supervision/) déployée par le rôleapp: Prometheus, Grafana sans compte par défaut, node-exporter, cAdvisor et postgres-exporter, tous en écoute sur127.0.0.1. Deux sources Grafana (Prometheus technique, PostgreSQL métier) et quatre tableaux de bord versionnés. Nouveau rôle Ansibleproxyqui aligne leCaddyfilede la forge sur le dépôt et le recharge à chaud, avec le vhostgrafana.g2.enervision; le déploiement continu passe à--tags app,proxy.Closes #31
Preuve
Vérifié sur l'environnement local complet (
infra/compose/supervision/local/, PostgreSQL jetable au schéma de la zone or) :Sur le serveur, il reste à rejouer
site.yml --tags app,proxy, recharger Caddyet joindre la capture des deux sources vertes (mise en service #31).
Relecture
Ce qui suit le code
docs/runbooks/mis à jour :supervision.md(neuf),forge.md§5 bis,deploiement.md.env.example(GF_SECURITY_ADMIN_*,DATA_SOURCE_PASS)Où regarder en priorité
proxy(infra/ansible/roles/proxy/) : le remplacement duCaddyfilese fait EN PLACE (cp, pas de renommage) sinon le montage de fichier du conteneur ne suit pas. Validé dans un conteneur jetable avant rechargement,rescuequi ne touche pas Caddy si la validation échoue.--tags app,proxydansdeploy.yml: le rôleproxyentre dans le chemin du déploiement continu. Il ne touche qu'à un fichier de config et à uncaddy reload, jamais au socle.vault_grafana_admin_user/vault_grafana_admin_passwordajoutés (chiffrés). L'assertion du rôleappexige 14 caractères minimum sur le mot de passe.Caddyfileplutôt qu'un Caddy séparé.Relu en entier : le rôle
proxy, la composition de supervision, le provisionnementGrafana, les changements du rôle
app, duCaddyfile, de la chaîne et du pland'adressage. C'est du bon travail, et le rôle
proxyen est le meilleur morceau.Deux points empêchent la pile de fonctionner, et aucun des deux n'est dans ton code : ils
viennent d'une dérive entre le coffre et le serveur. Je les ai corrigés dans la #114,
qui fusionne avant celle-ci. Tu n'as donc rien à changer, mais tu dois savoir pourquoi.
Ce qui bloquerait au démarrage
1. Le mot de passe du rôle PostgreSQL
grafanaétait refusé par le serveur.Tes deux consommateurs le lisent : la source de données
PostgreSQL EnerVisionetpostgres-exporter, viaPG_GRAFANA_PASSWORDetDATA_SOURCE_PASS. Les deux auraientéchoué à la connexion — tableau de bord métier vide, exportateur muet, et rien dans la
demande ne l'aurait laissé prévoir.
Vérifié sur le serveur, avec un contre-essai pour ne pas crier au loup : un mot de passe
volontairement faux est bien rejeté, donc le refus était réel et non un artefact de mon
test.
La cause n'est pas chez toi.
postgres.envn'est lu qu'à la première initialisation duvolume : passé ce moment, changer une valeur dans le coffre ne change plus rien côté
serveur, et les deux dérivent sans que rien ne le signale. J'avais déjà trouvé la même
chose pour
enervision_prodetenervision_preproden écrivant la #114 ;grafanaenétait exclu, il ne l'est plus.
2. Le rôle
grafanan'était pas membre depg_monitor.postgres-exporterlitpg_stat_replication,pg_stat_walet le texte des requêtes depg_stat_activity. Sans ce droit il démarre, rend des métriques partielles et journalisedes erreurs. Mesuré avant et après sur le serveur :
Ta preuve annonce « 52 panneaux renvoient des données », mesurée sur l'environnement
local où le rôle a été créé autrement. C'est le genre d'écart qui ne se voit qu'en
confrontant au serveur.
La #114 accorde
pg_monitoret réaligne le mot de passe. Le rôle reste en lecture seulesur les données métier.
mlflowest volontairement laissé en dehors du réalignement : iltourne et lit son mot de passe dans
mlflow.env, le réaligner le couperait de sa base.Ce qui est juste, et que je garderais tel quel
Le rôle
proxy. Validation de la configuration candidate dans un conteneur jetableavant de toucher à celui en service, sauvegarde datée, remplacement en place pour que
l'inode ne change pas — le piège du montage de fichier, que tu documentes — et un bloc de
secours qui nettoie sans avoir rechargé. C'est exactement ce qu'on veut d'un rôle qui
touche à la porte d'entrée de la forge.
Le
Caddyfiledu dépôt ne diverge pas de celui qui sert. Je les ai comparés ligne àligne : le tien est l'actuel plus le vhost Grafana. Rien ne se perd au premier
déploiement, ce qui était ma première inquiétude en voyant un rôle qui écrase la
configuration de Caddy.
L'exposition est bornée par les adresses d'écoute, et elles sont toutes en
127.0.0.1. J'ai regardé le mode réseau hôte de près, puisque c'est lui qui a coupé leserveur le 3 septembre. Ici il est justifié —
node-exporteret cAdvisor n'ont pas desens autrement — et le fichier le dit avec l'avertissement qui va avec. Ma réserve tombe.
Images épinglées par empreinte, secrets jamais dans le dépôt et interpolés à
l'exécution,
deleteDatasourcespour l'idempotence du provisionnement, et le pland'adressage complété des trois ports d'exportateurs.
Et surtout,
tests/ci/test-supervision.sh. Tu ne te contentes pas de bien faire, tuempêches le prochain de mal faire : écoute sur
0.0.0.0, compte par défaut, mot de passeen clair. C'est ce qui manque le plus souvent à ce genre de pile.
Ce qu'il te reste à faire
Rien dans ton code. Un rebase, et une réponse à la question du bas. Je n'ai pas mis de
demande de changements pour cette raison : les deux correctifs sont dans la #114, pas chez
toi.
Un point de coordination
Nos deux demandes se marchent dessus sur
infra/ansible/group_vars/all/vars.yml: onajoute chacun une pile à
app_stacks.roles/app/tasks/main.ymlfusionne tout seul,tu ajoutes en haut et j'ajoute en bas.
La #114 passe en premier — elle porte les deux correctifs ci-dessus, sans lesquels ta pile
ne démarre pas. Il te restera un rebase de quelques lignes sur
vars.yml.Dernière chose, à confirmer d'un mot : ton
vault.ymlchange entièrement dans le diff,ce qui est normal pour un fichier chiffré. Peux-tu juste me dire que tu n'y as ajouté
que les deux clés Grafana, sans régénérer les mots de passe PostgreSQL existants ? La
#114 réaligne le serveur sur ces valeurs, donc si l'un d'eux a bougé, il faut le savoir
avant le déploiement et pas après.