Exercice 04 : Configurer des alertes avec Alertmanager
🎯 Objectifs
À la fin de cet exercice, vous serez capable de :
- ✅ Écrire des règles d'alerte dans
alerting_rules.yml - ✅ Déployer Alertmanager et comprendre
alertmanager.yml - ✅ Distinguer les états
PENDING,FIRINGetRESOLVED - ✅ Relier Alertmanager à Prometheus via la section
alerting: - ✅ Déclencher manuellement une alerte pour tester le pipeline
Durée estimée : 30 minutes
Difficulté : ⭐⭐⭐☆☆ (Intermédiaire)
Prérequis : Exercices 01 et 02 complétés
📖 Contexte
Prometheus évalue des règles d'alerte à intervalle régulier. Quand une condition est remplie, l'alerte passe en PENDING. Après la durée for:, elle passe en FIRING et est envoyée à Alertmanager. Alertmanager se charge du routage, du groupement et des notifications (email, Slack, PagerDuty...).
📋 Énoncé
Configurez un pipeline d'alerting complet : règles Prometheus → Alertmanager → notification email (simulation).
🧭 Déroulement de l'exercice
Tâche 1 : Écrire des règles d'alerte
Créez alerting_rules.yml avec 2 règles : une alerte si un target est DOWN, une alerte si Prometheus utilise plus de 100 MB de RAM.
Indice :
`yamlgroups:
- name: infra.rules
rules:
- alert: TargetDown
expr: up == 0
for: 1m
labels:
severity: critical
annotations:
summary: "Target {{ $labels.job }} est DOWN"
description: "Le target {{ $labels.instance }} ne répond plus depuis 1 minute."
>
- alert: PrometheusHighMemory
expr: process_resident_memory_bytes{job="prometheus"} > 100 * 1024 * 1024
for: 2m
labels:
severity: warning
annotations:
summary: "Prometheus utilise beaucoup de mémoire"
description: "Utilisation actuelle : {{ $value | humanizeBytes }}"
`
Vérification : Le YAML est valide. docker run --rm -v $(pwd):/rules prom/prometheus promtool check rules /rules/alerting_rules.yml retourne SUCCESS.
Tâche 2 : Mettre à jour prometheus.yml
Ajoutez les références aux règles d'alerte et à Alertmanager dans prometheus.yml.
Indice :
`yamlrule_files:
- "alerting_rules.yml"
>
alerting:
alertmanagers:
- static_configs:
- targets: ["alertmanager:9093"]
`
Vérification : Après rechargement (curl -X POST http://localhost:9090/-/reload), allez dans Status → Rules dans Prometheus UI. Les 2 règles apparaissent avec l'état OK.
Tâche 3 : Configurer Alertmanager
Créez alertmanager.yml qui route toutes les alertes vers un receiver de debug (webhook ou email).
Indice :
`yamlglobal:
smtp_smarthost: "localhost:25"
smtp_from: "alertmanager@exemple.fr"
>
route:
group_by: ["alertname", "job"]
group_wait: 30s
group_interval: 5m
repeat_interval: 4h
receiver: "default"
>
receivers:
- name: "default"
webhook_configs:
- url: "http://webhook-debug:5001/alert"
send_resolved: true
`
Vérification : docker run -d --name alertmanager -p 9093:9093 -v $(pwd)/alertmanager.yml:/etc/alertmanager/alertmanager.yml prom/alertmanager démarre sans erreur. curl http://localhost:9093/-/healthy retourne OK.
Tâche 4 : Observer les états d'alerte
Arrêtez Node Exporter pour déclencher une alerte : docker stop node-exporter. Observez l'évolution dans Alerts de Prometheus UI.
Indice : L'alerte passe en
PENDINGimmédiatement, puis enFIRINGaprèsfor: 1m. Dans Alertmanager UI (http://localhost:9093), l'alerte apparaît dans les alertes actives. Redémarrez Node Exporter avecdocker start node-exporterpour la résoudre.
Vérification : Vous observez la transition PENDING → FIRING dans Prometheus UI → Alerts. L'alerte TargetDown apparaît dans Alertmanager UI.
Tâche 5 : Configurer un receiver email
Mettez à jour alertmanager.yml pour envoyer des emails (utilisez MailHog comme serveur SMTP de test).
Indice :
`yaml# Lancer MailHog : docker run -d --name mailhog -p 1025:1025 -p 8025:8025 mailhog/mailhog
>
global:
smtp_smarthost: "mailhog:1025"
smtp_from: "alertmanager@devopsfacile.fr"
>
receivers:
- name: "default"
email_configs:
- to: "ops@devopsfacile.fr"
require_tls: false
`
Vérification : Déclenchez une alerte, puis ouvrez http://localhost:8025 (MailHog UI). L'email d'alerte est visible dans la boîte de réception.
🗂️ Mini-Projet
Créez un docker-compose.yml complet avec Prometheus + Alertmanager + MailHog et une règle d'alerte sur le CPU :
groups:
- name: system.rules
rules:
- alert: HighCPU
expr: 100 - (avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 2m
labels:
severity: warning
annotations:
summary: "CPU élevé sur {{ $labels.instance }}"
description: "CPU à {{ $value | humanize }}%"Checkpoints :
docker compose up -ddémarre les 3 services- Les règles d'alerte s'affichent dans Status → Rules
- L'alerte
TargetDownse déclenche en arrêtant un service - L'email d'alerte est reçu dans MailHog