Aller au contenu

Prometheus Alertmanager

L’intégration Alertmanager transfère les changements de statut d’un monitor vers une instance Prometheus Alertmanager. À chaque changement, OKStatus envoie un POST vers ‹votre-url›/api/v2/alerts, et Alertmanager route l’alerte vers les receivers que vous avez configurés (email, Slack, PagerDuty…).

Disponible à partir du plan Pro.

Une alerte par changement de statut, au format Alertmanager v2 :

ChampValeur
labels.alertnameOKStatusMonitorDown
labels.severitycritical (down) · warning (dégradé)
labels.monitorle nom du monitor
labels.instancel’URL surveillée
labels.sourceokstatus
annotations.summarydescription lisible
annotations.statusdown · degraded · up · paused
annotations.regionla région qui a signalé le changement
annotations.targetl’URL surveillée

Les labels ne désignent que le monitor : le rétablissement ferme exactement l’alerte ouverte par la panne.

  • Down déclenche l’alerte critical (et ferme l’alerte warning si le monitor était d’abord dégradé) ; dégradé déclenche l’alerte warning. Une alerte active porte un endsAt à 7 jours : OKStatus n’envoie qu’une fois par changement d’état, et sans cela Alertmanager la résoudrait au bout de son resolve_timeout (5 min) alors que le monitor est toujours en panne.
  • Up et pause ferment les deux alertes (endsAt fixé à maintenant).

Routez sur le label source="okstatus" pour séparer les alertes OKStatus du reste de votre alerting.

  1. Dans OKStatus, allez dans Alerting → Canaux.
  2. Cliquez sur Ajouter un canal → Alertmanager / Prometheus.
  3. Saisissez l’URL de base de votre Alertmanager — pas le chemin /api/v2/alerts, OKStatus l’ajoute lui-même.
  4. (Optionnel) Ajoutez des identifiants basic auth si votre Alertmanager est protégé.
  5. Cliquez sur Tester, puis attachez le canal à vos monitors.

Vous pouvez pointer OKStatus vers un Alertmanager qui tourne dans le même cluster Kubernetes. Utilisez le nom DNS du Service Alertmanager, en faisant attention à ces trois points :

  1. Utilisez le nom DNS, pas la ClusterIP. Par sécurité, OKStatus refuse les URL qui pointent vers une IP privée/réservée littérale (ex. 10.x, 192.168.x) — mais un nom DNS interne comme *.svc.cluster.local est accepté.
  2. Incluez le port — Alertmanager écoute sur 9093, pas 80.
  3. Saisissez uniquement l’URL de base — OKStatus ajoute /api/v2/alerts.

Le cross-namespace fonctionne avec le nom pleinement qualifié, par exemple :

http://alertmanager.monitoring.svc.cluster.local:9093

Le bouton Tester envoie une seule alerte firing OKStatusMonitorDown (labels ci-dessus, monitor="Test Monitor", instance="https://example.com"), qui expire au bout de 5 minutes.

Vous pouvez aussi vérifier l’accessibilité depuis l’intérieur du cluster, depuis le namespace où tourne OKStatus :

Fenêtre de terminal
kubectl run amtest --rm -i --restart=Never --image=curlimages/curl \
-n <namespace-okstatus> -- \
curl -s -o /dev/null -w '%{http_code}\n' \
-X POST http://alertmanager.monitoring.svc.cluster.local:9093/api/v2/alerts \
-H 'Content-Type: application/json' -d '[]'

Un 200 signifie qu’Alertmanager a accepté la charge utile.

  • Dans l’UI Alertmanager → Alerts, le test apparaît comme un groupe firing alertname="OKStatusMonitorDown". Il se résout tout seul au bout de 5 minutes : il n’est donc visible que brièvement — ouvrez l’UI juste après le test, ou filtrez sur source="okstatus".
  • Dans vos receivers (email, Slack…), il arrive comme une notification normale et y reste — la confirmation la plus fiable que le pipeline fonctionne.
  • Une vraie panne reste firing dans Alertmanager jusqu’à ce que le monitor se rétablisse — moment où OKStatus envoie la résolution et Alertmanager marque l’alerte comme résolue.
SymptômeCause / solution
« injoignable » / ENOTFOUNDMauvais hostname, ou le Service a 0 endpoint — vérifiez kubectl get endpoints.
« injoignable » / ECONNREFUSEDMauvais port — utilisez :9093.
« private or reserved IP address »Vous avez utilisé une ClusterIP brute — utilisez le nom DNS du Service.
200 mais rien dans les receiversAlertmanager a bien reçu l’alerte mais aucune route ne correspond — ajoutez une route sur source="okstatus".
Le test marche une fois, puis plus rien dans l’UINormal : l’alerte de test se résout toute seule au bout de 5 minutes.
Marche en local mais pas depuis le clusterUne NetworkPolicy bloque peut-être l’egress du namespace OKStatus vers Alertmanager.