Aller au contenu

Disponibilité vue de dehors et budget d'erreur dans Grafana

Mettez les checks d’OKStatus à côté des métriques de votre application pour savoir en un coup d’œil d’où vient une panne, et alertez sur la vitesse de consommation du budget d’erreur plutôt que sur chaque check raté. La page Prometheus et Grafana reste la référence pour le scrape, le tableau de bord prêt à importer et les métriques.

  • un panneau qui superpose l’état vu par les sondes OKStatus et le taux d’erreurs mesuré par votre application ;
  • trois règles d’enregistrement qui calculent la vitesse de consommation du budget d’erreur ;
  • deux alertes : une qui réveille quand le budget fond, une qui ouvre un ticket quand il s’use lentement.
  • L’export Prometheus configuré, disponible dès l’offre Pro (voir Prometheus et Grafana).
  • Une cible de disponibilité par monitor (sloTarget, offres Max et Enterprise, voir SLO et budget d’erreur). Sans elle, l’étape 3 montre comment utiliser la cible SLA de l’organisation.
  • Une métrique de requêtes côté application, par exemple http_requests_total avec un label code.

OKStatus étiquette chaque série avec monitor_host : l’hôte (et le port) du service surveillé, jamais son chemin ni ses identifiants. Sélectionnez votre service avec lui, ou avec monitor_name :

okstatus_monitor_up{monitor_host="api.shop.example.com"}

Dans un panneau Time series, deux requêtes sur le même axe de temps :

# A · seen from outside: 1 up, 0 down (majority of regions)
okstatus_monitor_up{monitor_host="api.shop.example.com"}
# B · seen from inside: share of 5xx responses
sum(rate(http_requests_total{service="api", code=~"5.."}[5m]))
/ sum(rate(http_requests_total{service="api"}[5m]))

Placez B sur un axe de droite de 0 à 1. La lecture tient en quatre cas :

Vu de dehorsVu de dedansOù chercher
en panneerreurs 5xxl’application ou ses dépendances
en pannenormal, ou sans traficle chemin d’accès : DNS, CDN, certificat, load balancer
en ligneerreurs 5xxune partie des routes seulement : le check ne couvre pas le chemin cassé
en ligne, une région en échecnormalle réseau entre cette région et vous ; personne n’a été alerté

Le dernier cas a sa propre série : okstatus_region_up == 0 pendant que okstatus_monitor_up == 1.

Avec une cible de 99,9 % sur 30 jours, le budget est de 0,1 % : environ 43 minutes de panne. La vitesse de consommation dit à quel rythme vous l’épuisez. À 1, il dure exactement 30 jours. À 3, il fond en 10 jours.

okstatus-slo.yml
groups:
- name: okstatus-slo
rules:
- record: okstatus:budget_burn:24h
expr: |
(1 - okstatus_monitor_availability_ratio{window="24h"})
/ on (monitor_id) (1 - okstatus_monitor_sla_target_ratio)
- record: okstatus:budget_burn:7d
expr: |
(1 - okstatus_monitor_availability_ratio{window="7d"})
/ on (monitor_id) (1 - okstatus_monitor_sla_target_ratio)
- record: okstatus:budget_left:30d
expr: |
1 - (1 - okstatus_monitor_availability_ratio{window="30d"})
/ on (monitor_id) (1 - okstatus_monitor_sla_target_ratio)

okstatus:budget_left:30d va de 1 (budget intact) à 0 (épuisé), et passe sous 0 une fois la cible manquée. Affichez-le dans une jauge par monitor.

Sans cible par monitor, divisez par la cible SLA de l’organisation : remplacez chaque / on (monitor_id) (1 - okstatus_monitor_sla_target_ratio) par / on () group_left () (1 - okstatus_org_sla_target_ratio).

Elles lisent les règles d’enregistrement de l’étape 3, dans un second fichier :

okstatus-slo-alerts.yml
groups:
- name: okstatus-slo-alerts
rules:
- alert: OKStatusBudgetFastBurn
expr: okstatus:budget_burn:24h > 3
for: 15m
labels:
severity: page
annotations:
summary: "{{ $labels.monitor_name }}: 10 % of the monthly budget spent in a day"
- alert: OKStatusBudgetSlowBurn
expr: okstatus:budget_burn:7d > 1
for: 1h
labels:
severity: ticket
annotations:
summary: "{{ $labels.monitor_name }}: at this rate the budget runs out before the month ends"

Chargez les deux fichiers avec rule_files: dans prometheus.yml, ou enveloppez chaque groups: dans une PrometheusRule pour le Prometheus Operator.

  • L’export fournit des fenêtres de 24 heures, 7 jours et 30 jours. Les alertes classiques sur 1 heure ou 6 heures ne sont pas possibles avec ces seules métriques.
  • La disponibilité exportée est celle du tableau de bord et des rapports SLA, calculée selon la règle de majorité et actualisée toutes les 5 minutes. Grafana et le PDF concordent.
  • Un monitor en pause, ou pendant une maintenance, ne consomme pas de budget.