Aller au contenu

Alertes

Le système d’alertes livre les alertes Prometheus dans des salons Matrix (et par e-mail pour les incidents). Un provisionnement unique du bot suffit : ensuite tout est déclaratif. Le fonctionnement d’ensemble est décrit dans Monitoring & Alertes.

Pré-requisPourquoi
prometheus + monitoring sur le collecteurporte Alertmanager et les règles
Service matrix joignablehéberge le bot et les salons
Accès ssh à l’hôte Matrix (nix)crée le compte bot avec dnf-mas
Clé admin sops présenteécrit les secrets du bot

Une seule commande, idempotente (rejouable sans risque) : elle crée le compte bot, les salons, et écrit l’identité dans var/generated/matrix.nix.

  1. Déclarer les administrateurs (parties locales) dans la configuration :

    etc/config.yaml
    network:
    matrix:
    admins: ["alice", "bob"]
  2. Lancer le provisionnement :

    Fenêtre de terminal
    just configure-alert-bot

    La commande, en s’appuyant sur la clé admin sops :

    • crée le compte @alertbot:domain.tld (dnf-mas manage register-user sur l’hôte Matrix) ;
    • crée ou résout les salons #alert-warnings et #alert-incidents, y fait entrer le bot et invite les admins ;
    • écrit bot + les ID de salons dans var/generated/matrix.nix ;
    • stocke mot de passe, jeton d’accès et secret de webhook dans sops.
  3. Déployer le collecteur :

    Fenêtre de terminal
    just generate
    just apply <collecteur>

    L’alerting s’active tout seul dès que les salons existent (var/generated/matrix.nix rempli). Pour le désactiver malgré tout : darkone.service.prometheus.alerting.enable = false;.

Le provisionnement dépose trois secrets dans usr/secrets/secrets.yaml :

Clé sopsRôle
alertmanager-matrix-passwordmot de passe du compte bot (reconnexion)
alertmanager-matrix-tokenjeton d’accès du bot (envoi des messages)
alertmanager-webhook-secretauthentifie Alertmanager auprès du pont Matrix

Une fois le bot en place, n’importe quel outil du projet peut écrire dans les salons d’alerte. Le corps du message, en markdown, arrive sur l’entrée standard :

Fenêtre de terminal
just send-msg warnings < rapport.md
echo "**Sauvegarde nocturne** : 2 dépôts en retard" | just send-msg incidents

La recette lit les salons dans var/generated/matrix.nix et le jeton dans sops, sous l’identité de déploiement nix. L’appelant n’a donc à connaître ni l’un ni l’autre.

Le markdown est converti en HTML avant l’envoi, sans quoi les clients Matrix l’afficheraient tel quel : titres, listes, gras, code et liens. Pas d’italique : un * isolé est un motif d’hôtes (gw-*).

Code de sortieSignification
0Message envoyé
10Rien de configuré ici : salon, jeton ou programme manquant
11Le serveur Matrix a refusé le message
  1. Sur un nœud supervisé, couper un service surveillé :

    Fenêtre de terminal
    sudo systemctl stop <unité>
  2. Sous une minute, un message ServiceDown (ou SystemdUnitFailed) apparaît dans #alert-warnings, #alert-incidents et un e-mail si le nœud est critique. Le lien de l’alerte pointe vers https://prometheus.<zone>.domain.tld.

  3. Relancer le service : l’alerte se résout (notification de résolution). Pour SystemdUnitFailed, la résolution n’arrive qu’après 30 minutes sans échec (pourquoi).

    Fenêtre de terminal
    sudo systemctl start <unité>

Le flux de déploiement pose un drapeau de maintenance pour ne pas déclencher de fausses alertes pendant un nixos-rebuild. Manuellement :

Fenêtre de terminal
dnf-maintenance on # inhibe les alertes du nœud
dnf-maintenance off # les réactive

Certaines alertes sont exactes mais non actionnables : un disque de sauvegarde volontairement rempli franchit DiskSpaceLow en permanence. silences les empêche de notifier.

usr/modules/alerts.nix
{
darkone.service.prometheus.alerting.silences = [
{
alert = "DiskSpaceLow";
host = "srv-backup";
matchers.device = "/dev/sdb";
reason = ''
Disque de sauvegarde volontairement rempli, seuil structurellement
franchi. Retirer si la rétention est réduite.
'';
}
];
}
ChampRôle
alertNom de l’alerte à taire (alertname)
hostNom d’hôte à cibler (label host), null pour tout le parc
matchersLabels supplémentaires en égalité stricte, combinés en ET
reasonObligatoire : pourquoi l’alerte est acceptée

Chaque entrée devient une route Alertmanager vers le receiver null. L’alerte continue de se déclencher et reste visible dans Prometheus, Alertmanager et Grafana, elle cesse simplement de notifier.

Vérifier le routage sur l’hôte Prometheus :

Fenêtre de terminal
amtool config routes test --config.file=/etc/alertmanager.yml \
alertname=DiskSpaceLow host=srv-backup device=/dev/sdb

Pour taire un mode de défaillance systémique plutôt qu’un cas ponctuel, voir ignoredUnits (dnf/config/alerts.nix), qui exclut une unité systemd de SystemdUnitFailed sur tout le parc.

SymptômeCause probableRemède
Aucun message dans un salonbot absent du salon ou jeton expirérejouer just configure-alert-bot
Création de salon en 403filtre anti-bots de Caddydéjà géré (agent neutre) ; ne pas utiliser curl brut
admin API not public/_synapse/admin fermélaisser le tunnel SSH automatique opérer (hôte Matrix joignable)
Lien d’alerte non résoluDNS ou certificat du vhost prometheus absentdéployer la passerelle / le HCS pour le nouveau sous-domaine
matrix.nix ignoré au déploiementfichier non lisible par nixle script fait un chmod 644 ; vérifier les permissions de var/generated/
Pas de mail d’incidentrelais Postfix local inactifl’alerting l’active par défaut ; vérifier darkone.service.prometheus.alerting.email