Chapitre 11.3 - Alerting
Objectifs d'Apprentissage
À la fin de ce chapitre, vous serez capable de:
- Comprendre le système d'alerting Prometheus
- Configurer Alertmanager
- Créer des règles d'alerte
- Gérer les notifications (email, Slack, PagerDuty)
- Configurer le grouping et le routing
- Implémenter le silence et l'inhibition
Introduction
L'alerting permet de notifier les équipes quand des problèmes sont détectés dans le cluster ou les applications.
Architecture d'Alerting
Prometheus
- Collecte les métriques
- Évalue les règles d'alerte
- Envoie les alertes à Alertmanager
Alertmanager
- Reçoit les alertes de Prometheus
- Groupe et route les alertes
- Envoie les notifications
Installation d'Alertmanager
Via kube-prometheus-stack
Alertmanager est inclus dans kube-prometheus-stack.
Vérification
# Voir les Pods
kubectl get pods -n monitoring | grep alertmanager
# Accéder à Alertmanager
kubectl port-forward -n monitoring svc/prometheus-kube-prometheus-alertmanager 9093:9093
Création de Règles d'Alerte
PrometheusRule
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: kubernetes-alerts
namespace: monitoring
spec:
groups:
- name: kubernetes.rules
rules:
# Pod CrashLooping
- alert: PodCrashLooping
expr: rate(kube_pod_container_status_restarts_total[15m]) > 0
for: 5m
labels:
severity: warning
annotations:
summary: "Pod {{ $labels.pod }} is crash looping"
description: "Pod {{ $labels.pod }} in namespace {{ $labels.namespace }} has restarted {{ $value }} times in the last 15 minutes"
# High CPU Usage
- alert: HighCPUUsage
expr: 100 - (avg(rate(container_cpu_usage_seconds_total[5m])) * 100) < 10
for: 5m
labels:
severity: critical
annotations:
summary: "High CPU usage on {{ $labels.instance }}"
description: "CPU usage is above 90% on {{ $labels.instance }}"
# High Memory Usage
- alert: HighMemoryUsage
expr: (container_memory_usage_bytes / container_spec_memory_limit_bytes) * 100 > 90
for: 5m
labels:
severity: warning
annotations:
summary: "High memory usage on {{ $labels.pod }}"
description: "Memory usage is above 90% on pod {{ $labels.pod }}"
Configuration Alertmanager
ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: alertmanager-config
namespace: monitoring
data:
alertmanager.yml: |
global:
resolve_timeout: 5m
route:
group_by: ['alertname', 'cluster', 'service']
group_wait: 10s
group_interval: 10s
repeat_interval: 12h
receiver: 'default'
routes:
- match:
severity: critical
receiver: 'critical-alerts'
- match:
severity: warning
receiver: 'warning-alerts'
receivers:
- name: 'default'
email_configs:
- to: 'team@example.com'
from: 'alertmanager@example.com'
smarthost: 'smtp.example.com:587'
auth_username: 'alertmanager@example.com'
auth_password: 'password'
- name: 'critical-alerts'
slack_configs:
- api_url: 'https://hooks.slack.com/services/YOUR/WEBHOOK/URL'
channel: '#alerts-critical'
title: '{{ .GroupLabels.alertname }}'
text: '{{ range .Alerts }}{{ .Annotations.description }}{{ end }}'
- name: 'warning-alerts'
email_configs:
- to: 'team@example.com'
from: 'alertmanager@example.com'
smarthost: 'smtp.example.com:587'
Notifications
Email
receivers:
- name: 'email'
email_configs:
- to: 'admin@example.com'
from: 'alertmanager@example.com'
smarthost: 'smtp.example.com:587'
auth_username: 'user'
auth_password: 'password'
headers:
Subject: 'Alert: {{ .GroupLabels.alertname }}'
Slack
receivers:
- name: 'slack'
slack_configs:
- api_url: 'https://hooks.slack.com/services/YOUR/WEBHOOK/URL'
channel: '#alerts'
title: '{{ .GroupLabels.alertname }}'
text: '{{ range .Alerts }}{{ .Annotations.description }}{{ end }}'
PagerDuty
receivers:
- name: 'pagerduty'
pagerduty_configs:
- service_key: 'YOUR_SERVICE_KEY'
description: '{{ .GroupLabels.alertname }}'
Grouping et Routing
Grouping
Les alertes similaires sont groupées ensemble:
route:
group_by: ['alertname', 'cluster']
group_wait: 10s
group_interval: 10s
repeat_interval: 12h
Routing
Route les alertes selon les labels:
route:
routes:
- match:
severity: critical
receiver: 'critical-team'
- match:
severity: warning
receiver: 'warning-team'
Silence et Inhibition
Silence
Temporairement supprimer des alertes:
# Via l'interface Alertmanager
# Ou via amtool
amtool silence add alertname=HighCPUUsage --duration=1h
Inhibition
Supprimer des alertes moins importantes quand une alerte critique est active:
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'instance']
Bonnes Pratiques
1. Règles Appropriées
Créer des règles pour les problèmes réels et actionnables.
2. Seuils Réalistes
Définir des seuils qui déclenchent des alertes significatives.
3. Grouping
Grouper les alertes pour éviter le spam.
4. Escalation
Configurer l'escalation pour les alertes critiques.
5. Documentation
Documenter chaque règle d'alerte.
Résumé
Dans ce chapitre, vous avez appris:
Alerting: Système de notification pour les problèmes
PrometheusRule: Définit les règles d'alerte
Alertmanager: Gère le routing et les notifications
Notifications: Email, Slack, PagerDuty
Grouping: Regroupe les alertes similaires
Routing: Route selon les labels
Silence/Inhibition: Gère les alertes temporairement
Bonnes pratiques: Règles appropriées, seuils réalistes, grouping
Prochaines Étapes
Module 12: Déploiement en Production
Lab 11.4: Alerting et Notifications
Chapitre créé le: Décembre 2024