Aller au contenu principal

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