1. Le mode cluster #
Pas de répartiteur de charge entre Prometheus et Alertmanager.
Principe #
Les instances d'Alertmanager forment un cluster par gossip (port 9094) et partagent les silences et le journal des notifications. Chaque Prometheus doit envoyer ses alertes à tous les membres ; ceux-ci se coordonnent pour qu'une seule notification parte (avec un léger décalage par position dans le cluster).
alertmanager --config.file=alertmanager.yml \
--cluster.listen-address=0.0.0.0:9094 \
--cluster.peer=alertmanager-1:9094 --cluster.peer=alertmanager-2:9094Côté Prometheus #
alerting:
alertmanagers:
- static_configs:
- targets: [alertmanager-1:9093, alertmanager-2:9093, alertmanager-3:9093]Erreur Courante : Ne mettez jamais un répartiteur de charge entre Prometheus et Alertmanager : chaque instance doit recevoir toutes les alertes, sinon la déduplication ne fonctionne plus.
2. Surveiller la chaîne d'alerte #
Qui alerte quand l'alerting tombe ?
Le Watchdog #
Une alerte toujours active (vector(1)) est envoyée en continu vers un service externe (dead man's switch : healthchecks.io, Cronitor, PagerDuty heartbeat...). Si les notifications cessent, c'est le service externe qui prévient : Prometheus, Alertmanager ou le réseau est en panne.
- alert: Watchdog
expr: vector(1)
labels: { severity: none }
annotations: { summary: "Alerte de contrôle : doit toujours être active" }Métriques utiles #
| Métrique | Usage |
|---|---|
alertmanager_notifications_failed_total | Échecs d'envoi par intégration |
alertmanager_notification_latency_seconds | Délai d'envoi |
alertmanager_cluster_members | Taille du cluster vue par chaque membre |
prometheus_notifications_dropped_total | Alertes que Prometheus n'a pas pu transmettre |
alertmanager_config_last_reload_successful | Dernier rechargement de configuration réussi ? |
3. Diagnostiquer #
« Je n'ai pas reçu l'alerte ».
Méthode #
- La règle est-elle firing dans Prometheus (
/alerts) ou encore pending ? - Prometheus a-t-il pu joindre Alertmanager (
prometheus_notifications_errors_total) ? - L'alerte est-elle visible dans Alertmanager ? Est-elle silenced ou inhibited ?
- Quelle route a-t-elle prise (
amtool config routes test) ? - L'envoi a-t-il échoué (journaux,
alertmanager_notifications_failed_total) ?
amtool check-config alertmanager.yml # valider avant de déployer
curl -X POST localhost:9093/-/reload # recharger sans redémarrer
amtool config routes show # afficher l'arbre
amtool alert add alertname=Test severity=critical team=db \
--annotation=summary="Alerte de test" # injecter une alerte de test