2026-09-14 13:05:15 -04:00
|
|
|
# Métriques dérivées des rôles
|
|
|
|
|
|
|
|
|
|
> **Pour qui :** celui qui ajoute un rôle à Set-OPS et se demande comment ses mesures
|
|
|
|
|
> arrivent dans Prometheus — et celui qui exploite et veut savoir d'où sortent les
|
|
|
|
|
> courbes qu'il regarde.
|
|
|
|
|
|
|
|
|
|
> **La règle en une phrase.** Un rôle déclare l'exportateur de ses propres mesures ; le
|
|
|
|
|
> moteur en dérive la cible de scrutation et les panneaux. Comme `meta/flux.yml` engendre
|
|
|
|
|
> nftables *et* OPNsense, comme `meta/supervision.yml` engendre les services Icinga.
|
|
|
|
|
|
|
|
|
|
## Pourquoi un second fichier
|
|
|
|
|
|
|
|
|
|
`meta/supervision.yml` et `meta/metriques.yml` répondent à des questions différentes, sur
|
|
|
|
|
des données différentes, pour des consommateurs différents.
|
|
|
|
|
|
|
|
|
|
| | ce qu'il déclare | la question | le consommateur |
|
|
|
|
|
|---|---|---|---|
|
|
|
|
|
| `supervision.yml` | une **sonde** qui rend un verdict avec un TTL | *est-ce cassé ?* | Icinga |
|
|
|
|
|
| `metriques.yml` | un **exportateur** qui expose une série | *depuis quand, et vers où ?* | Prometheus → Grafana |
|
|
|
|
|
|
|
|
|
|
Ce n'est pas une frontière inventée pour l'occasion. `docs/supervision-conception.md` la
|
|
|
|
|
pose déjà dans l'autre sens :
|
|
|
|
|
|
|
|
|
|
> 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.
|
|
|
|
|
|
|
|
|
|
Ce document est l'autre moitié de cette phrase.
|
|
|
|
|
|
|
|
|
|
## Le constat qui l'a rendu nécessaire
|
|
|
|
|
|
|
|
|
|
Mesure du 2026-09-14 : **aucune métrique de service n'était collectée.** Prometheus ne
|
|
|
|
|
scrutait que les `node_exporter` — processeur, mémoire, disques, réseau. Rien de
|
|
|
|
|
PostgreSQL, rien de l'annuaire, rien des boîtes, rien du cache.
|
|
|
|
|
|
|
|
|
|
Le crochet existait pourtant : `serveur_prometheus_cibles_supplementaires`, une liste
|
|
|
|
|
libre, documentée, et que **personne ne remplissait**. Une facilité offerte à qui saurait
|
|
|
|
|
qu'elle existe n'est pas un mécanisme ; c'est une note de bas de page.
|
|
|
|
|
|
|
|
|
|
## Ce qu'un rôle déclare
|
|
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
|
# roles/<rôle>/meta/metriques.yml
|
|
|
|
|
exportateur:
|
|
|
|
|
paquet: prometheus-postgres-exporter
|
|
|
|
|
service: prometheus-postgres-exporter
|
|
|
|
|
port: 9187
|
|
|
|
|
job: postgresql
|
|
|
|
|
|
|
|
|
|
panneaux:
|
|
|
|
|
- titre: "Taux de succès du cache"
|
|
|
|
|
expr: "..."
|
|
|
|
|
unite: ratio
|
|
|
|
|
raison: "..."
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**L'exportateur** est ce que le rôle installe pour qu'il y ait quelque chose à lire. Le
|
|
|
|
|
rôle le pose lui-même : il connaît ses chemins, son compte de service, sa vérité de
|
|
|
|
|
terrain.
|
|
|
|
|
|
|
|
|
|
**Les panneaux** sont ce qui mérite d'être regardé dans le temps.
|
|
|
|
|
|
|
|
|
|
## Combien de panneaux : un par QUESTION QU'ON SE POSE
|
|
|
|
|
|
|
|
|
|
Ni un par métrique — un exportateur en publie couramment plus de deux cents — ni un par
|
|
|
|
|
rôle. Un par question qu'on se pose vraiment quand quelque chose commence à aller moins
|
|
|
|
|
bien.
|
|
|
|
|
|
|
|
|
|
**Le critère :** *une série a sa place ici si elle **précède** un verdict, ou si elle n'en
|
|
|
|
|
aura **jamais**.*
|
|
|
|
|
|
|
|
|
|
- Les **connexions** précèdent un verdict : la sonde Icinga crie à 70 % et à 90 %, le
|
|
|
|
|
graphe dit depuis *quand* ça monte. Une base qui passe de 20 à 60 connexions en trois
|
|
|
|
|
semaines n'a rien cassé — elle annonce la date où elle cassera.
|
|
|
|
|
- Le **taux de succès du cache** n'aura jamais de verdict, et c'est pourquoi il compte.
|
|
|
|
|
Quand les données dépassent `shared_buffers`, la base va chercher sur disque de plus en
|
|
|
|
|
plus souvent. Rien ne casse, rien n'alerte : tout devient lent. C'est exactement la panne
|
|
|
|
|
qu'un graphe voit et qu'une sonde ne verra jamais.
|
|
|
|
|
|
|
|
|
|
Ce qui bascule d'un coup appartient à Icinga. Ce qui dérive lentement n'a que le graphe
|
|
|
|
|
pour se faire voir.
|
|
|
|
|
|
|
|
|
|
## Ce que le moteur dérive
|
|
|
|
|
|
|
|
|
|
**La cible de scrutation.** Le nom du dossier du rôle *est* le nom du groupe ; les cibles
|
|
|
|
|
sont donc les hôtes actifs de ce groupe. Un rôle déclaré sans hôte ne produit aucun job —
|
|
|
|
|
Prometheus n'a pas à porter une cible qui n'existe pas, ni son journal à se remplir de
|
|
|
|
|
refus prévisibles.
|
|
|
|
|
|
|
|
|
|
**Les panneaux**, pour le tableau de bord.
|
|
|
|
|
|
|
|
|
|
Les cibles **écrites au plan** (`serveur_prometheus_cibles_supplementaires`) complètent la
|
|
|
|
|
dérivation, elles ne la remplacent pas : un équipement ou un service tiers n'a aucun rôle
|
|
|
|
|
Set-OPS pour se déclarer.
|
|
|
|
|
|
|
|
|
|
## Ce que le moteur ne dérive PAS, et c'est délibéré
|
|
|
|
|
|
|
|
|
|
**Le flux.** Le port de l'exportateur doit s'ouvrir depuis l'observatoire, et c'est
|
|
|
|
|
`meta/flux.yml` qui le déclare — là où vivent déjà tous les flux du rôle. Deux fichiers
|
|
|
|
|
pour un même fait finissent par diverger, et ce dépôt en a assez d'exemples.
|
|
|
|
|
|
|
|
|
|
## Le compte de service : le moins de droits possible
|
|
|
|
|
|
|
|
|
|
Un exportateur lit des compteurs. Il n'a aucune raison de pouvoir lire des données.
|
|
|
|
|
|
|
|
|
|
Pour PostgreSQL, c'est le rôle `pg_monitor` — fourni par le moteur depuis la version 10 —
|
|
|
|
|
qui donne accès aux vues de statistiques **et à elles seules**. Faire tourner un
|
|
|
|
|
exportateur sous `postgres` serait donner les clés de la base pour lire des compteurs.
|
|
|
|
|
|
|
|
|
|
**Le mot de passe vient de la voûte.** Vide, l'exportateur n'est pas posé du tout : le rôle
|
2026-09-28 12:48:29 -04:00
|
|
|
ne l'installe pas et ne crée pas le compte — jamais un mot de passe par défaut. **Prometheus,
|
|
|
|
|
lui, dérive quand même la cible** (`:9187`) de tout hôte de `serveur_postgresql` : sans le
|
|
|
|
|
secret, la collecte d'`obs-01` passe au rouge. C'est voulu — une base sans métriques doit se
|
|
|
|
|
voir, et renseigner le secret est la façon de l'éteindre. *(Cette page promettait l'inverse
|
|
|
|
|
jusqu'au 2026-09-28.)*
|
2026-09-14 13:05:15 -04:00
|
|
|
|
|
|
|
|
**La chaîne de connexion ne passe pas par la ligne de commande.** Un `DATA_SOURCE_NAME` en
|
|
|
|
|
argument serait lisible dans `ps` par tout le monde sur la machine ; dans un fichier à
|
|
|
|
|
`0600`, il ne l'est que par root et le service.
|
|
|
|
|
|
|
|
|
|
## Le chiffrement : ce qui est fait, ce qui ne l'est pas
|
|
|
|
|
|
|
|
|
|
`client_metrique` sert ses métriques en **TLS**, certificat synchronisé par `client_pki`.
|
|
|
|
|
|
|
|
|
|
Les exportateurs de service ne le font pas encore. La dette est écrite dans la `raison` du
|
|
|
|
|
flux concerné, avec son remède — `--web.config.file` et l'abonnement au renouvellement.
|
|
|
|
|
Elle n'est pas cachée derrière un silence.
|
|
|
|
|
|
|
|
|
|
## Où en est la couverture
|
|
|
|
|
|
|
|
|
|
| déclaration | rôles |
|
|
|
|
|
|---|---|
|
|
|
|
|
| `meta/flux.yml` | 39 |
|
|
|
|
|
| `meta/authentification.yml` | 33 |
|
|
|
|
|
| `meta/empreinte.yml` | 32 |
|
|
|
|
|
| `meta/supervision.yml` | 28 |
|
|
|
|
|
| **`meta/metriques.yml`** | **1** |
|
|
|
|
|
|
|
|
|
|
Le second versant commence. Un rôle sans `metriques.yml` n'est pas fautif — beaucoup n'ont
|
|
|
|
|
aucune série qui mérite un graphe. Mais un service qui porte de l'état et n'en déclare
|
|
|
|
|
aucune mérite qu'on se demande pourquoi.
|
|
|
|
|
|
|
|
|
|
## Quand relire ce document
|
|
|
|
|
|
|
|
|
|
- un rôle qui se met à porter de l'état → il lui faut probablement un exportateur
|
|
|
|
|
- un exportateur qui passe en TLS → la dette du flux se referme, et cette page le dit
|
|
|
|
|
- un panneau qu'on regarde sans jamais agir dessus → il n'avait pas sa place ici
|