Trois environnements et un frontal SNI au lieu de deux, certificats Let's Encrypt par DNS-01, sept DAGs, index des ADR complété jusqu'à 0020. Les exemples de l'ETL passent en bash et n'utilisent plus l'option --limit, retirée. L'adresse de la machine est masquée dans l'arbre, les ADR 0009 et 0014 portent une note datée sur l'approbation de la production.
4.7 KiB
Supervision
Prometheus, Alertmanager, Grafana et trois exporteurs, sous le profil Compose monitoring.
Issue #26, décisions dans l'ADR 0016, vue d'architecture dans
docs/architecture/60-observabilite.md.
| Service | Image | Rôle | Accès |
|---|---|---|---|
prometheus |
prom/prometheus |
Collecte toutes les 15 s, évalue les règles, garde 15 jours (1 Go au plus) | 127.0.0.1:${PROMETHEUS_PORT:-9090} |
alertmanager |
prom/alertmanager |
Groupe les alertes et les envoie par courriel à Mailpit | 127.0.0.1:${ALERTMANAGER_PORT:-9093} |
grafana |
grafana/grafana |
Trois tableaux de bord provisionnés, dossier « EnerVision » | 127.0.0.1:${GRAFANA_PORT:-3001} |
postgres-exporter |
prometheuscommunity/postgres-exporter |
Connexions, transactions, taille des bases | réseau interne |
node-exporter |
prom/node-exporter |
Processeur, mémoire et disque de l'hôte | réseau interne |
cadvisor |
gcr.io/cadvisor/cadvisor |
Mémoire et processeur par conteneur | réseau interne |
garage (cible) |
service de la stack | Requêtes S3, octets lus et écrits, disque local, santé du nœud, sur garage:3903/metrics avec GARAGE_METRICS_TOKEN |
réseau interne |
Les interfaces n'écoutent que sur 127.0.0.1. Depuis un poste, on passe par un tunnel SSH,
comme pour Airflow :
ssh -L 3001:127.0.0.1:3001 -L 9090:127.0.0.1:9090 enervision@<IP-VM-G3>
Démarrer
- Prod.
COMPOSE_PROFILES=monitoringdans le.env:make stack-up, donc chaque déploiement, démarre la supervision et pose le rôlesupervisionaprès les migrations. - Recette et poste. À la demande, sur une stack déjà démarrée :
make monitoring-up. Les services partent en--no-deps, sans toucher aux autres.
Quatre secrets sont requis, et make stack-up comme make monitoring-up refusent de démarrer
s'il en manque un. scripts/provision-host.sh les génère pour un nouvel environnement.
| Variable | Rôle |
|---|---|
APP_METRICS_TOKEN |
Jeton que Prometheus présente sur /metrics, et que l'API exige dès qu'il est posé |
GRAFANA_ADMIN_PASSWORD |
Compte admin de Grafana. Sans lui, le conteneur refuse de démarrer |
SUPERVISION_DB_PASSWORD |
Rôle PostgreSQL supervision, en lecture seule (db/roles/supervision.sql) |
GARAGE_METRICS_TOKEN |
Jeton que Prometheus présente sur /metrics de Garage (ADR 0019), passé en secret Compose |
L'API doit tourner en conteneur (make stack-up, ou docker compose up -d backend) :
Prometheus la joint en backend:8000, sur le réseau du projet. Une API lancée par make dev
sur l'hôte reste hors de sa portée, et l'alerte ApiIndisponible le signale.
Tableaux de bord
| Tableau | Source | Contenu |
|---|---|---|
| EnerVision · API | Prometheus | Débit, erreurs 5xx, latences p50/p95/p99, globales et par route. C'est lui qu'on regarde pendant un tir k6 |
| EnerVision · Données et modèle | TimescaleDB | Fraîcheur des relevés par site, relevés ingérés, alertes par sévérité, dérive du modèle (drift_report) |
| EnerVision · Infrastructure | Prometheus | Hôte, mémoire et processeur par conteneur (recette et prod comprises), PostgreSQL |
Les fichiers JSON de grafana/dashboards sont la source : Grafana les recharge et refuse de
les modifier depuis l'interface. Pour changer un tableau, l'exporter en JSON depuis Grafana et
remplacer le fichier.
Alertes
prometheus/rules/enervision.yml définit les règles, et prometheus/tests/enervision.test.yml
porte un cas par règle, joué par promtool test rules.
| Alerte | Condition | Sévérité |
|---|---|---|
ApiIndisponible |
/metrics injoignable pendant 2 min |
critical |
ApiErreursServeur |
Plus de 5 % de 5xx sur 5 min | critical |
ApiLatenceElevee |
p95 au-delà d'une seconde pendant 10 min | warning |
BaseIndisponible |
Exportateur sans connexion pendant 2 min | critical |
BaseConnexionsSaturees |
Plus de 80 % de max_connections |
warning |
HoteMemoireSaturee |
Mémoire au-delà de 90 % pendant 10 min | warning |
HoteDisquePlein |
Moins de 10 % libres sur / |
critical |
HoteCpuSature |
Processeur au-delà de 90 % pendant 15 min | warning |
CibleInjoignable |
Un exporteur muet pendant 5 min | warning |
Alertmanager envoie les courriels à supervision@enervision.fr via Mailpit, qui les capture :
ils se lisent dans son interface. Un critical masque le warning de la même cible.
Vérifier la configuration
make monitoring-check # promtool check config et test rules, amtool check-config, JSON des tableaux
La CI joue les mêmes commandes (job « Validation des fichiers Compose et de la supervision »)
dès que monitoring/ ou un fichier Compose change.