Les alertes Prometheus
Carte de maintenance du code d’alerte : où se trouve quoi, et comment l’étendre sans rien casser. Le fonctionnement côté administrateur est décrit dans Monitoring & Alertes.
Logique pure vs câblage
Section intitulée « Logique pure vs câblage »Le code est scindé en deux, pour garder la génération des règles testable :
dnf/lib/alerts.nix: fonctions pures qui produisent les règles Prometheus à partir de la topologie. Testées dansdnf/tests/unit/lib/alerts_test.nix.dnf/modules/service/prometheus.nix: câblage impur (Alertmanager, routage par sévérité, sops, bot Matrix, vhost, sondes blackbox).
Toute logique non triviale va dans alerts.nix ; le module se contente de la
brancher.
Les helpers (alerts.nix)
Section intitulée « Les helpers (alerts.nix) »Exposés via dnfLib (voir dnf/lib/default.nix) :
| Helper | Rôle |
|---|---|
serviceUnits | Service DNF → unité systemd (ex. idm → kanidmd.service) |
nodeClass | Classe d’un nœud (critique / non-critique / désactivé) : features alert-* puis profil |
severityForClass | Classe → sévérité (critical ou warning) |
hostExpectedUnits | Unités attendues d’un hôte (d’après ses services activés) |
mkNodeRuleGroups | NodeDown, ServiceDown, SystemdUnitFailed |
mkResourceRuleGroups | Disque, RAM, charge, inodes, OOM (seuils defaultThresholds) |
mkNetworkRuleGroups | Sondes blackbox (passerelle, tailnet, DNS) |
mkMaintenanceRuleGroups | Drapeau de maintenance (silence pendant rebuild) |
mergeRuleGroups | Fusionne des fragments en un seul document |
mkAlertRuleGroups | Raccourci : nœuds + ressources |
Le piège : un seul document de règles
Section intitulée « Le piège : un seul document de règles »On fusionne donc tout via mergeRuleGroups, puis on n’émet qu’une entrée :
services.prometheus.rules = [ (builtins.toJSON (dnfLib.mergeRuleGroups ( [ (dnfLib.mkAlertRuleGroups { inherit nodes; /* … */ }) ] ++ lib.optional alerting.silenceOnRebuild (dnfLib.mkMaintenanceRuleGroups { /* … */ }) ++ lib.optional alerting.network.enable (dnfLib.mkNetworkRuleGroups { /* … */ }) )))];Où ajouter quoi
Section intitulée « Où ajouter quoi »| Je veux… | Je touche… |
|---|---|
| surveiller un nouveau service | serviceUnits dans alerts.nix |
| une nouvelle famille de règles | un mkXRuleGroups + l’ajouter au mergeRuleGroups du module |
| changer un seuil par défaut | defaultThresholds dans alerts.nix |
| changer la classe d’un nœud | feature alert-*[:zone] (aucun code) |
| une nouvelle destination | le bloc alertmanager de prometheus.nix (receiver + route) |