SLOs & alertes
Transformez « tout le monde sait que payments est le plus important » en
configuration : classez les services en tiers de criticité, donnez à chaque
tier un budget d'erreur et un objectif de latence, et routez down vers le
pager pendant que degraded part dans un canal Slack. Ce guide est
Helm-first — le chemin de production.
Prérequis
- avuru obs installé via Helm avec les modules
service-healthetalertingactifs (ils le sont par défaut). - Du trafic en cours, pour que les services aient des données RED à juger.
Étapes
-
Classez les services en tiers. Nommez les groupes qui comptent et laissez le reste se regrouper automatiquement par namespace au tier par défaut :
serviceGroups:defaultTier: T2groups:- name: paymentstier: T0selector: { namespaces: [payments] }- name: storefronttier: T1selector: { services: [web, catalog, search] } -
Fixez des objectifs par tier. Les seuils se résolvent par précédence — services > tiers > defaults — vous resserrez donc le T0 sans toucher à la longue traîne :
serviceGroups:thresholds:defaults:errorRateWarn: 0.01 # 1 % → degradederrorRateCrit: 0.05 # 5 % → downlatencyP95ObjectiveMs: 500minSampleCount: 5tiers:T0: { errorRateWarn: 0.005, errorRateCrit: 0.02, latencyP95ObjectiveMs: 300 }services:reports: { latencyP95ObjectiveMs: 2000 } # lent par conceptionChaque jugement montre son raisonnement sur le tableau
/health:error rate 4.2% ≥ 1% budget,p95 780ms ≥ 500ms objective. -
Routez par audience, pas seulement par gravité. Deux règles, deux canaux — le pager n'entend parler que des ennuis T0 qui durent :
alerting:channels:- name: pagertype: webhookurl: https://events.pagerduty.com/integration/xxx/enqueuesecret: "secret-de-signature-hmac"- name: team-slacktype: webhookurl: https://hooks.slack.com/services/xxxrules:- name: t0-downwhen: not-healthy # degraded OU downfor: 5m # soutenu — un accroc ne réveille personneselector: { tiers: [T0] }channel: pager- name: t1-early-warningwhen: degradedfor: 10mselector: { tiers: [T1] }channel: team-slack -
Appliquez, ou éditez en direct.
helm upgrade— oukubectl editsur les ConfigMaps rendues : le hub recharge les deux fichiers à chaud en ~15 s, sans restart. Une configuration invalide (tier inconnu, canal non déclaré, sélecteur vide) est rejetée bruyamment, pas ignorée en silence.
Vérifier
# Les seuils visiblement appliqués — les statuts portent leurs raisons :
curl -s 'http://<hub>/api/v1/health/groups' | jq '.groups[] | {name, status, reason}'
# Les règles chargées (les secrets de canaux ne sont jamais sérialisés) :
curl -s 'http://<hub>/api/v1/alerts/rules' | jq
Périmètre honnête
Les règles ci-dessus alertent sur un statut de santé soutenu — une cible
qui reste down/degraded pendant une durée — pas sur un taux de
combustion du budget d'erreur multi-fenêtres. L'alerte sur burn rate est sur
la feuille de route ; d'ici là, les objectifs par tier vous
donnent le langage des SLO et les transitions de statut le mécanisme.
Ensuite
- Santé des services — comment statuts et consolidations sont calculés.
- Alertes — cycle de vie, charge utile, signature HMAC, garde SSRF.
- Savoir quand checkout est down — la même chaîne, en direct sur un laptop en quinze minutes.