RousselTMLEARNING

Observabilité

Routage, regroupement et récepteurs dans Alertmanager

L'arbre de routage d'Alertmanager : matchers, group_by, group_wait, group_interval, repeat_interval, continue, récepteurs (e-mail, Slack, Teams, webhook, PagerDuty) et modèles de messages.

1. L'arbre de routage #

Chaque alerte descend l'arbre.

Principe #

Arbre de routage
Une alerte team=db severity=critical descend jusqu'à dba-pager.

Chaque alerte entre par la route racine puis descend dans la première route enfant dont les matchers correspondent (récursivement). Si aucune route enfant ne correspond, la route courante s'applique. Avec continue: true, l'évaluation poursuit vers les routes sœurs (pour notifier plusieurs destinataires).

route:
  receiver: defaut
  group_by: [alertname, cluster]
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 4h
  routes:
    - matchers: ['team="db"']
      receiver: dba-mail
      routes:
        - matchers: ['severity="critical"']
          receiver: dba-pager
    - matchers: ['team="web"']
      receiver: web-slack
    - matchers: ['alertname="Watchdog"']
      receiver: deadman
      repeat_interval: 1m

Les trois délais #

ParamètreDéfautSignification
group_wait30sAttente avant la première notification d'un nouveau groupe (pour y regrouper les alertes arrivant ensemble)
group_interval5mAttente avant de notifier un groupe déjà notifié qui a reçu de nouvelles alertes
repeat_interval4hRappel d'un groupe inchangé toujours actif
Bonne Pratique : Testez une route sans attendre une vraie alerte : amtool config routes test --config.file=alertmanager.yml team=db severity=critical affiche le récepteur choisi.

2. Les récepteurs #

Où partent les notifications.

Exemples #

global:
  smtp_smarthost: smtp.example.org:587
  smtp_from: alertmanager@example.org
  smtp_auth_username: alertmanager
  smtp_auth_password_file: /etc/alertmanager/smtp_password

receivers:
  - name: defaut
    email_configs:
      - to: ops@example.org
  - name: dba-mail
    email_configs:
      - to: dba@example.org
  - name: dba-pager
    pagerduty_configs:
      - routing_key_file: /etc/alertmanager/pagerduty_key
  - name: web-slack
    slack_configs:
      - api_url_file: /etc/alertmanager/slack_url
        channel: '#alertes-web'
        send_resolved: true
        title: '{{ .CommonLabels.alertname }} ({{ .Status }})'
        text: '{{ range .Alerts }}• {{ .Annotations.summary }}{{ "\n" }}{{ end }}'
  - name: teams
    msteamsv2_configs:
      - webhook_url_file: /etc/alertmanager/teams_url
  - name: deadman
    webhook_configs:
      - url: https://hc-ping.com/<uuid>

Autres intégrations natives : Opsgenie, VictorOps, Pushover, Telegram, Discord, Webex, SNS, Jira, Rocket.Chat... et le webhook générique pour tout le reste.

Bonne Pratique : Utilisez les variantes *_file (api_url_file, routing_key_file) pour garder les secrets hors du fichier de configuration versionné.

3. Les modèles de messages #

Des notifications lisibles.

Templates #

# alertmanager.yml
templates: ['/etc/alertmanager/templates/*.tmpl']
{{/* templates/slack.tmpl */}}
{{ define "slack.titre" }}[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}] {{ .CommonLabels.alertname }}{{ end }}
{{ define "slack.texte" }}{{ range .Alerts }}
*{{ .Annotations.summary }}*
{{ if .Annotations.runbook_url }}Runbook : {{ .Annotations.runbook_url }}{{ end }}
{{ end }}{{ end }}
slack_configs:
  - title: '{{ template "slack.titre" . }}'
    text: '{{ template "slack.texte" . }}'

Articles liés

Alertmanager : rôle, architecture et cycle de vie d'une alerte

Ce que fait Alertmanager entre Prometheus et vos équipes : déduplication, regroupement, routage, silences et …

Écrire de bonnes règles d'alerte Prometheus (et les tester)

Concevoir des alertes utiles : alerter sur les symptômes, choisir for et les seuils, labels de sévérité et d'…

Silences, inhibitions et intervalles de temps dans Alertmanager

Réduire le bruit des alertes : silences ponctuels avec amtool, règles d'inhibition (une alerte critique tait …

Pour aller plus loin