Alertmanager : Comment transformer un flux d'alertes en notifications pertinentes
Situation familière : votre système de surveillance génère des centaines d'alertes, mais les messages importants se perdent dans ce flux ? C'est exactement le problème qu'Alertmanager résout — un composant clé de l'écosystème Prometheus qui transforme le chaos des notifications en un système d'alertes structuré.
Qu'est-ce qu'Alertmanager et pourquoi en avez-vous besoin ?
Alertmanager est un service qui traite les alertes provenant de Prometheus et d'autres systèmes de surveillance. Au lieu de vous submerger de centaines de notifications individuelles, il :
- Groupe les alertes liées entre elles
- Élimine les doublons
- Achemine les notifications vers les bonnes équipes
- Contrôle la fréquence des messages
Imaginez que plusieurs services d'un même cluster tombent en panne. Au lieu de recevoir 10 e-mails distincts, vous obtenez une seule notification listant tous les problèmes — cela fait gagner du temps et des nerfs.
Fonctionnalités clés
1. Routage flexible des notifications
Alertmanager vous permet de configurer des règles de routage complexes basées sur les labels des alertes. Par exemple :
route:
group_by: ['alertname', 'cluster']
receiver: 'team-X-mails'
routes:
- matchers:
- service=~"^(foo1|foo2|baz)$"
receiver: team-X-mails
Cela signifie que toutes les alertes pour les services foo1, foo2 et baz seront acheminées vers l'équipe X par e-mail.
2. Prise en charge de plusieurs intégrations
Alertmanager prend en charge :
- Slack
- PagerDuty
- OpsGenie
- Webhook (pour les intégrations de systèmes personnalisés)
3. Suppression et inhibition des alertes
Vous pouvez configurer des règles pour éviter l'« effet d'avalanche » :
inhibit_rules:
source_matchers:
- severity="critical"
target_matchers:
- severity="warning"
equal: ['alertname']
Cette règle masquera les alertes de type warning si une notification critique existe déjà pour le même alertname.
4. Haute disponibilité
Alertmanager prend en charge le mode cluster prêt à l'emploi. Spécifiez simplement la liste des pairs au démarrage :
--cluster.peer=alertmanager1:9094 --cluster.peer=alertmanager2:9094
Comment ça fonctionne en arrière-plan ?
Alertmanager se compose de plusieurs composants :
- Dispatcheur d'alertes — reçoit et traite les notifications entrantes
- Grouper — combine les alertes liées
- Service de routage — détermine où envoyer la notification
- Intégrations — envoie les messages vers les systèmes externes
Architecture du projet :
Applications pratiques
Cas 1 : Acheminement des alertes vers les équipes
Dans les grandes entreprises, différentes équipes sont responsables de différents services. Alertmanager vous permet d'acheminer automatiquement :
- Les problèmes de base de données — vers les DBAs
- Les incidents de serveur web — vers les DevOps
- Les erreurs de logique métier — vers les développeurs
Cas 2 : Configuration de l'escalade
Vous pouvez configurer une chaîne de notification :
- Première alerte — vers Slack
- Si le problème n'est pas résolu dans les 15 minutes — e-mail
- Après une heure — un appel via PagerDuty
Cas 3 : Test des modèles de notification
L'outil intégré amtool vous permet de vérifier les modèles de notification sans les envoyer réellement :
amtool template render --template.text='{{ template "slack.default.markdown.v1" . }}'
Conclusion : vaut-il la peine d'être utilisé ?
Alertmanager est indispensable pour quiconque :
- Utilise déjà Prometheus
- Dispose d'un système de surveillance complexe
- Souhaite organiser le flux de notifications
- Travaille dans une équipe distribuée
Si vous n'avez pas encore rencontré le problème du « spam d'alertes », vous n'avez peut-être pas besoin d'Alertmanager. Mais lorsque votre système de surveillance commence à générer des dizaines de notifications par heure — cet outil deviendra un vrai sauveur.
Vous pouvez essayer Alertmanager en quelques minutes avec Docker :
docker run --name alertmanager -d -p 127.0.0.1:9093:9093 quay.io/prometheus/alertmanager
Après le démarrage, l'interface sera disponible à l'adresse http://localhost:9093/