Introduction
Alertmanager est un composant clé de l'écosystème Prometheus, conçu pour gérer les alertes de manière intelligente. Contrairement à un simple forwarder, il groupe les alertes similaires, supprime les doublons et route les notifications vers divers canaux comme email, Slack ou PagerDuty. Pourquoi l'utiliser en 2026 ? Dans un monde où les infrastructures cloud scalent à l'infini, les alertes explosives (alert storms) peuvent noyer les équipes SRE. Alertmanager agit comme un triage médical : il priorise, inhibe les alertes redondantes et maintient la concentration sur les incidents critiques.
Ce tutoriel débutant vous emmène des bases (installation Docker) à une config production-ready. À la fin, vous saurez intégrer Alertmanager à Prometheus, configurer des receivers et tester en live. Idéal pour les ops qui veulent un monitoring robuste sans complexité inutile. (128 mots)
Prérequis
- Docker installé (version 24+)
- Prometheus v2.50+ en cours d'exécution (ou installé via Docker)
- Connaissances basiques en YAML et ligne de commande
- Port 9093 libre pour l'UI Alertmanager
Installation via Docker
docker run -d \
--name alertmanager \
-p 9093:9093 \
-v $(pwd)/alertmanager.yml:/etc/alertmanager/alertmanager.yml \
prom/alertmanager:v0.27.0Ce commande lance Alertmanager en conteneur Docker avec montage du fichier de config YAML. Le port 9093 expose l'interface web. Utilisez v0.27.0 pour la stabilité en 2026 ; évitez les tags latest en prod pour prévenir les breaking changes.
Accès à l'interface web
Une fois lancé, ouvrez http://localhost:9093. Vous verrez l'UI minimaliste : onglets Alerts, Silences, Status. Pas de config ? Les alertes échouent avec une erreur 422. Prochaine étape : la config de base.
Configuration de base YAML
global:
smtp_smarthost: 'localhost:1025'
smtp_from: 'alertmanager@example.com'
route:
group_by: ['alertname', 'cluster']
group_wait: 30s
group_interval: 5m
repeat_interval: 1h
receiver: 'email'
receivers:
- name: 'email'
email_configs:
- to: 'team@example.com'
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'cluster']Cette config de base définit un receiver email, une route globale qui groupe par nom d'alerte et cluster (attente 30s avant première notif, puis toutes les 5min). L'inhibit_rule bloque les warnings si un critical existe sur le même objet, évitant les spams redondants.
Redémarrage et vérification
Sauvegardez alertmanager.yml, puis docker restart alertmanager. Vérifiez les logs : docker logs alertmanager. Dans l'UI Status > Config, confirmez le chargement. Testez avec une alerte Prometheus pointant vers http://localhost:9093.
Intégration avec Prometheus
global:
scrape_interval: 15s
rule_files:
- "alert.rules.yml"
alerting:
alertmanagers:
- static_configs:
- targets:
- localhost:9093
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']Ajoutez cette section alerting à votre prometheus.yml pour router les alertes vers Alertmanager. Redémarrez Prometheus. Créez un fichier alert.rules.yml simple pour tester (prochaine étape). Piège : oubliez alert_relabel_configs si vous filtrez.
Règles d'alerte Prometheus pour test
groups:
- name: example
rules:
- alert: InstanceDown
expr: up == 0
for: 5m
labels:
severity: critical
annotations:
summary: "Instance {{ $labels.instance }} down"
description: "{{ $labels.instance }} has been down for more than 5 minutes."Ce rule file déclenche une alerte 'InstanceDown' si up == 0 pendant 5min. Labels et annotations enrichissent l'alerte pour Alertmanager. Collez-le dans votre Prometheus config et rechargez (curl -X POST http://localhost:9090/-/reload).
Configuration avancée : Receivers multiples
Analogie : Les receivers sont comme des boîtes aux lettres triées. Ajoutez Slack ou webhook pour diversifier.
Receivers Slack et Webhook
global:
smtp_smarthost: 'localhost:1025'
route:
group_by: ['alertname']
receiver: 'default'
routes:
- match:
severity: critical
receiver: 'slack-critical'
receivers:
- name: 'default'
email_configs:
- to: 'dev@team.com'
- name: 'slack-critical'
slack_configs:
- api_url: 'https://hooks.slack.com/services/T000/B000/C000'
channel: '#alerts'
text: '🚨 {{ .CommonAnnotations.summary }}'
- name: 'webhook'
webhook_configs:
- url: 'http://localhost:5001/'
inhibit_rules: []Routes matchent la sévérité pour router vers Slack (seulement critical). Webhook pour intégrations custom (ex: PagerDuty). Remplacez api_url par votre webhook Slack réel. Redémarrez pour appliquer ; testez en silençant via UI.
Test d'alerte via curl
#! /bin/bash
curl -XPOST 'http://localhost:9093/api/v2/alerts' \
-H 'Content-Type: application/json' \
-d '[
{
"labels": {
"alertname": "TestAlert",
"severity": "warning",
"instance": "test:8080"
},
"annotations": {
"summary": "Ceci est un test"
}
}
]'Ce script simule une alerte via l'API Alertmanager. Vérifiez l'UI Alerts pour la voir groupée. Utile pour debug sans Prometheus. Ajoutez -k si HTTPS self-signed.
Bonnes pratiques
- Group_by intelligent : Toujours inclure
alertname,job,instancepour un grouping fin sans spam. - Repeat_interval progressif : 4h pour info, 30min pour warning, 5min pour critical – escaladez la pression.
- Sécuisez l'API : Activez basic_auth ou TLS en prod (
--web.config.file). - Backup config : Versionnez
alertmanager.ymlen Git ; utilisez ConfigMaps Kubernetes. - Monitoring d'Alertmanager : Scrape
/metricsavec Prometheus pour alerter sur ses downtimes.
Erreurs courantes à éviter
- YAML mal indenté : Alertmanager crash sans logs clairs ; validez avec
yamllintou l'UI Status. - Pas de group_wait : Déclenche des milliers de notifs immédiates (alert storm).
- Oubli inhibit_rules : Alerts enfants polluent (ex: disk full + OOMKill).
- Ports non exposés : Vérifiez
docker ps; utilisez--networkpour intégrer Prometheus.
Pour aller plus loin
- Docs officielles : Alertmanager GitHub
- Tutoriel Kubernetes : Helm chart Alertmanager
- Avancé : Webhooks custom en Go