Aller au contenu
medium

SLI, SLO et Error Budget : le langage commun entre ops et métier

12 min de lecture

Vendredi 17 h, un développeur veut déployer une fonctionnalité avant le week-end. L'ops hésite : "Le service a été instable cette semaine." Débat sans fin, décision au feeling. Avec un SLO et un error budget, la réponse est immédiate : "Il reste 60 % du budget ce mois-ci, on peut déployer", ou "Le budget est à 8 %, on gèle et on stabilise." Les SLI (Service Level Indicators), SLO (Service Level Objectives) et error budgets sont les outils du SRE (Site Reliability Engineering) qui transforment la question subjective "est-ce assez fiable ?" en une décision mesurable et partagée entre équipes techniques et métier.

  • SLI, SLO, SLA : définitions, différences et relations entre ces concepts
  • Error budget : le calcul et pourquoi 100 % n'est jamais un bon objectif
  • Burn rate : mesurer la vitesse de consommation du budget pour alerter intelligemment
  • Politique d'error budget : que faire concrètement quand le budget s'épuise
  • Exemples concrets : SLI/SLO pour une API web, un paiement et un pipeline de données

Ces trois termes se confondent souvent, alors qu'ils appartiennent à trois registres distincts. Le SLI est une mesure : un pourcentage de requêtes réussies, une latence au 99e centile. Le SLO est un objectif interne fixé sur ce SLI, que l'équipe se donne pour arbitrer entre fiabilité et vitesse de livraison. Le SLA est un engagement contractuel envers un client, assorti de pénalités. On mesure donc un SLI, on se fixe un SLO, on signe un SLA.

Ce tableau fixe le vocabulaire de tout le reste du guide. Lisez-le dans l'ordre des colonnes : chaque terme se distingue du suivant par qui le fixe et pour qui. Le piège classique est de croire que le SLA est simplement un SLO « officiel » : ce sont deux objets différents, l'un est un objectif de pilotage interne, l'autre un engagement juridique assorti de pénalités.

ConceptCe que c'estExemple concret
SLI (Service Level Indicator)Une métrique qui reflète l'expérience utilisateur"Proportion de requêtes HTTP avec un code 2xx/3xx"
SLO (Service Level Objective)Un objectif interne sur un SLI, défini par l'équipe"99,9 % des requêtes doivent renvoyer un code 2xx/3xx sur 30 jours"
SLA (Service Level Agreement)Un engagement contractuel avec le client, assorti de pénalités"Disponibilité mensuelle ≥ 99,5 %, sinon crédit de 10 %"

La ligne qui porte le plus de conséquences est « Si non atteint ». Manquer un SLO déclenche une réaction interne, un gel de fonctionnalités ; manquer un SLA coûte de l'argent, sous forme de crédits ou de pénalités. C'est précisément pour absorber cet écart de gravité qu'on garde le SLO plus strict que le SLA, sujet de l'encadré qui suit.

SLOSLA
À quiÉquipe interneClient ou utilisateur externe
Formalisé dansDocumentation interne, dashboardsContrat commercial
Si non atteintGel des features, focus fiabilitéPénalités financières, crédits
Niveau habituelPlus strict que le SLAPlus souple (marge de sécurité)

L'error budget : pourquoi 100 % n'est pas un bon objectif

Section intitulée « L'error budget : pourquoi 100 % n'est pas un bon objectif »

L'error budget est l'inverse du SLO. Si votre SLO est 99,9 %, votre error budget est 0,1 %. C'est la quantité d'indisponibilité tolérée sur une période donnée.

Pourquoi ne pas viser 100 % ? Parce que la fiabilité a un coût exponentiel. Passer de 99,9 % à 99,99 % coûte souvent 10 fois plus cher en infrastructure, en complexité et en temps d'ingénierie. Et pendant ce temps, vous ne livrez aucune fonctionnalité. L'error budget formalise ce compromis : chaque point de fiabilité gagné est un point de vélocité perdu.

Pour un SLO de 99,9 % sur 30 jours :

  • Error budget = 100 % − 99,9 % = 0,1 %
  • Budget en minutes = 30 jours × 24 h × 60 min × 0,001 = 43,2 minutes

Cela signifie que le service peut être indisponible ou dégradé pendant environ 43 minutes sur un mois sans violer l'objectif.

Tableau de référence : SLO → budget d'indisponibilité

Section intitulée « Tableau de référence : SLO → budget d'indisponibilité »

Ce tableau traduit chaque niveau de SLO en temps d'indisponibilité toléré, la forme la plus parlante pour une équipe. Repérez d'abord la ligne qui correspond à votre objectif, puis lisez la colonne mensuelle : c'est le temps total, cumulé, pendant lequel le service peut être dégradé sur un mois sans manquer l'objectif. Ce n'est pas un temps par incident, mais une enveloppe globale que plusieurs pannes se partagent.

SLOError budgetIndisponibilité/moisIndisponibilité/an
99 %1 %~7 h 12 min~3,65 jours
99,5 %0,5 %~3 h 36 min~1,83 jour
99,9 %0,1 %~43 min~8,76 h
99,95 %0,05 %~21 min~4,38 h
99,99 %0,01 %~4 min 19 s~52 min

Hypothèses : mois = 30 jours, année = 365 jours.

Un bon SLI reflète ce que l'utilisateur perçoit, pas ce que le serveur mesure en interne. "CPU < 80 %" n'est pas un SLI : le CPU peut être à 95 % sans que l'utilisateur le ressente, ou à 40 % pendant une panne réseau.

Presque tous les SLI utiles se rangent dans l'une de ces quatre familles. Elles vous servent de liste de contrôle au moment de définir vos indicateurs : commencez par la disponibilité et la latence, qui couvrent la majorité des services. Notez la nuance de la ligne latence : une réponse rapide mais en erreur n'est pas un bon événement, une erreur 500 servie en 10 ms ne compte pas comme « traitée en moins de 200 ms ».

FamilleCe qu'elle mesureExemple de SLI
DisponibilitéLe service répondProportion de requêtes HTTP avec code ≠ 5xx
LatenceLe service répond viteProportion de requêtes traitées en < 200 ms et sans erreur (un 500 rapide n'est pas un "good event")
QualitéLe service répond correctementProportion de réponses complètes (pas de dégradation gracieuse)
FraîcheurLes données sont à jourProportion de lectures dont l'âge < 1 minute

Un SLI s'exprime toujours comme une proportion :

  • Numérateur : les bonnes expériences (requêtes réussies, requêtes rapides, données fraîches)
  • Dénominateur : les expériences valides (toutes les requêtes utilisateur légitimes)

Le dénominateur doit exclure le trafic qui ne reflète pas l'expérience utilisateur : healthchecks, sondes internes, endpoints techniques, trafic canary. Sans cette exclusion, on obtient un SLI artificiellement élevé ("99,99 % parce qu'on a compté les /health").

Un SLI utile vérifie trois critères :

  • Centré utilisateur : il mesure ce que l'utilisateur voit, pas une métrique technique interne
  • Quantifiable : on peut le calculer automatiquement à partir de données existantes (logs, métriques, sondes)
  • Compréhensible : un product manager ou un manager non technique peut comprendre ce que "99,9 % des requêtes en < 200 ms" signifie
  1. Identifier les parcours utilisateur critiques

    Ne mesurez pas tout. Concentrez-vous sur les interactions qui comptent pour le business : connexion, recherche, paiement, consultation de compte. Ce sont les CUJ (Critical User Journeys) dans la terminologie Google SRE.

  2. Choisir un SLI pour chaque parcours

    Associez au moins un SLI de disponibilité et un de latence à chaque parcours critique. Par exemple, pour un checkout : "proportion de paiements réussis" + "P95 latence du checkout < 2 s".

  3. Fixer un objectif initial conservateur

    Mesurez d'abord votre fiabilité actuelle pendant 2 à 4 semaines. Fixez un SLO légèrement en dessous de cette mesure. Il est beaucoup plus facile d'assouplir un SLO que de le durcir une fois que les équipes se sont habituées à un niveau de confort.

  4. Calculer l'error budget

    Error budget = 100 % − SLO. Traduisez-le en minutes par mois pour que tout le monde comprenne. "43 minutes par mois" est plus parlant que "0,1 %".

  5. Instrumenter et visualiser

    Créez un dashboard qui montre en temps réel le SLI actuel et la consommation du budget. L'équipe doit voir d'un coup d'œil combien de budget il reste.

  6. Définir une politique d'error budget

    Documentez explicitement ce qui se passe quand le budget atteint certains seuils. Sans politique, le budget s'épuise et rien ne change, c'est l'anti-pattern le plus courant.

L'error budget n'a de valeur que s'il déclenche des actions concrètes. Le SRE Workbook de Google recommande de définir une politique formelle, documentée et approuvée par les parties prenantes (engineering et product).

Budget restantComportement attendu
> 50 %Business as usual, déploiements normaux
25 % – 50 %Revue des déploiements risqués, tests renforcés
< 25 %Gel des features non critiques, focus stabilité
ÉpuiséFeature freeze complet, convenu à l'avance, seuls les correctifs de sécurité et les P0 passent

Quand le budget est épuisé, les développeurs consacrent leur temps à la fiabilité (dette technique, tests, résilience) plutôt qu'aux nouvelles fonctionnalités. Le budget se régénère naturellement à la fin de la fenêtre de mesure (généralement 30 jours glissants).

Scénario concret : consommation progressive du budget

Section intitulée « Scénario concret : consommation progressive du budget »

Prenons un SLO de 99,9 % sur 30 jours, soit un budget de 43 minutes.

  1. Jour 3, un incident réseau cause 15 minutes d'indisponibilité. Budget restant : 28 min (65 %)

  2. Jour 12, un déploiement raté provoque 10 minutes de temps de réponse dégradé. Budget restant : 18 min (42 %)

  3. Jour 18, une latence anormale dure 5 minutes. Budget restant : 13 min (30 %). On entre en zone de vigilance.

À ce stade, la politique impose de revoir les déploiements à venir. Si un quatrième incident survient, le budget tombe sous 25 % et on gèle les features.

Burn rate : alerter sur la vitesse, pas sur le seuil

Section intitulée « Burn rate : alerter sur la vitesse, pas sur le seuil »

Le burn rate (taux de combustion) mesure à quelle vitesse le budget se consomme par rapport à la vitesse "normale". Un burn rate de 1 signifie qu'on consomme le budget exactement au rythme prévu sur 30 jours. Un burn rate de 10 signifie qu'on l'épuisera en 3 jours au lieu de 30.

Pourquoi alerter sur le burn rate plutôt que sur le SLO brut ? Parce que sur une fenêtre courte et un trafic faible, la mesure est instable : un SLO à 99,85 % sur 5 minutes peut refléter du bruit statistique et non un problème réel. En revanche, un burn rate de 14× sur 1 heure signifie que 2 % du budget mensuel s'est évaporé en une heure. C'est la vitesse de dégradation qui compte, pas la valeur instantanée.

Le SRE Workbook de Google recommande l'alerting multi-window, multi-burn-rate. Le principe : combiner une fenêtre longue (pour détecter les tendances) et une fenêtre courte (pour confirmer que le problème est toujours en cours et éviter les faux positifs).

SévéritéFenêtre longueFenêtre courteBurn rateCe que ça signifie
Critique (page)1 h5 min> 14,4×2 % du budget consumé en 1 h
Urgent (ticket)6 h30 min> 6×5 % du budget consumé en 6 h
Avertissement3 jours6 h> 1×Tendance de dépassement sur le mois

L'alerte ne se déclenche que si les deux fenêtres (longue ET courte) confirment un burn rate élevé. Cela élimine la majorité des faux positifs.

Pour une API web classique, deux dimensions suffisent à cadrer l'expérience : le service répond (disponibilité) et il répond vite (latence). Remarquez qu'on fixe deux objectifs de latence distincts, au 95e et au 99e centile : le P95 protège l'expérience du plus grand nombre, le P99 borne les cas les plus lents sans exiger la perfection sur chaque requête.

SLIMesureSLO
DisponibilitéProportion de requêtes HTTP avec code ≠ 5xx≥ 99,9 % sur 30 j
Latence P9595e centile du temps de réponse< 200 ms
Latence P9999e centile du temps de réponse< 1 s

Un service de paiement remonte la barre : l'argent tolère moins d'erreurs qu'une page web. Le SLO de disponibilité passe donc à 99,95 %, et surtout apparaît une exigence d'un autre type, l'idempotence. Rejouer une requête ne doit jamais débiter deux fois, et cet indicateur n'a pas d'error budget : c'est une exigence absolue, pas un objectif statistique.

SLIMesureSLO
Taux de succèsProportion de transactions terminées sans erreur≥ 99,95 % sur 30 j
Latence P9999e centile du temps de réponse bout en bout< 2 s
IdempotenceProportion de requêtes rejouées traitées correctementZéro tolérance, SLO « must », aucun error budget alloué

Un traitement par lots ne se juge pas comme une API : personne n'attend une réponse en millisecondes, mais les données doivent arriver à temps, complètes et correctes. Les trois SLI ci-dessous couvrent ces trois angles. La fraîcheur est souvent le plus critique : une donnée juste mais vieille de plusieurs heures peut fausser une décision autant qu'une donnée erronée.

SLIMesureSLO
ComplétudeProportion de jobs terminés dans les délais≥ 99 % sur 30 j
FraîcheurÂge maximum des données en sortie< 15 min
QualitéProportion de lignes sans erreur de parsing≥ 99,9 % sur 30 j

Ces erreurs reviennent projet après projet, et la plupart naissent d'une bonne intention mal placée. La plus fréquente est le SLO trop ambitieux fixé « par sécurité » : viser 99,99 % sans raison business laisse un budget de 4 minutes par mois qu'un seul incident mineur suffit à faire exploser. Lisez la colonne de droite comme une liste d'actions correctives directement applicables.

PiègePourquoi c'est un problèmeQue faire
SLO trop ambitieux (99,99 % "par sécurité")Budget de 4 min/mois, chaque incident mineur viole l'objectifCommencer à 99,9 % et durcir si nécessaire
SLO déconnecté de l'utilisateur (CPU < 80 %)Ne prédit pas l'expérience réelleMesurer la latence et les erreurs vues par l'utilisateur
Trop de SLO (50 indicateurs par service)Personne ne les suit, perte de focus1 à 3 SLI par service critique, pas plus
Pas de politique d'error budgetLe budget s'épuise, rien ne changeDocumenter et faire signer la politique
SLO = SLAAucune marge de sécurité, alerte quand il est déjà trop tardSLO plus strict que le SLA
Pas d'ownershipPersonne ne se sent responsable du SLONommer un owner par SLO
  • Un SLI mesure ce que l'utilisateur perçoit (disponibilité, latence, qualité, fraîcheur), pas une métrique serveur interne.

  • Un SLO est un objectif interne sur un SLI, il oriente les décisions d'ingénierie et de product management.

  • Un SLA est un engagement contractuel avec le client, le SLO interne doit toujours être plus strict pour garder une marge.

  • L'error budget (100 % − SLO) transforme la fiabilité en ressource finie : on la "dépense" pour livrer des fonctionnalités.

  • Viser 100 % est contre-productif : le coût de chaque "9" supplémentaire est exponentiel, et le budget de changement tombe à zéro.

  • Le burn rate mesure la vitesse de consommation du budget, alerter sur la vitesse est plus pertinent qu'alerter sur un seuil brut.

  • Sans politique d'error budget formalisée et appliquée, tout le mécanisme SLI/SLO est cosmétique.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn