sre

SRE outils

Les calculs SRE sans esquive : en quoi SLI, SLO et SLA diffèrent, ce que chaque cible de disponibilité coûte en minutes réelles, et comment le taux de consommation transforme un SLO en seuil d'astreinte.

3 outils

§01 GUIDE DU DOMAINE

SLI, SLO et SLA sont trois nombres différents

Un SLI est une mesure : bons événements sur événements valides — les requêtes répondues en moins de 300 ms avec un statut non 5xx, sur l’ensemble des requêtes parvenues au répartiteur de charge. Un SLO est une cible pour ce ratio sur une fenêtre, par exemple 99,9 % sur 30 jours glissants. Un SLA est un contrat attachant de l’argent à une cible généralement plus souple. Les confondre, c’est ainsi qu’une équipe réveille quelqu’un à 3 h du matin pour un nombre que personne ne s’était engagé à défendre.

Le difficile est la définition du SLI, pas le pourcentage. Deux équipes revendiquant 99,9 % peuvent parler de choses différentes selon que 429 compte comme une erreur, que les contrôles de santé figurent au dénominateur, et que la mesure a lieu à la périphérie du CDN ou à l’intérieur du service. Fixez numérateur et dénominateur avant de débattre du nombre de neufs.

Le SLO produit ensuite le seul nombre qui change les comportements : le budget d’erreur, 100 % − SLO. À 99,9 % sur 30 jours, vous pouvez échouer sur 0,1 % des requêtes, ou être totalement indisponible pendant 43,2 minutes. C’est une monnaie — les livraisons et les migrations la dépensent, une nouvelle fenêtre la reconstitue, et un mois qui se termine à 100 % signifie généralement que vous avez livré trop lentement.

Cibles de disponibilité en minutes réelles

Les neufs sont contre-intuitifs ; les minutes ne le sont pas. Chaque neuf supplémentaire divise par dix l’indisponibilité autorisée.

DisponibilitéPar an (365 j)Par mois de 30 joursPar semainePar jour
99 %3 j 15,6 h7,2 h1,68 h14,4 min
99,5 %1 j 19,8 h3,6 h50,4 min7,2 min
99,9 %8,76 h43,2 min10,1 min1,44 min
99,95 %4,38 h21,6 min5,04 min43,2 s
99,99 %52,6 min4,32 min60,5 s8,64 s
99,999 %5,26 min25,9 s6,05 s0,86 s

Jusqu’à 99,9 %, un humain peut remarquer, diagnostiquer et corriger dans le budget. À 99,99 % l’allocation mensuelle vaut 4,32 minutes — c’est une affirmation sur le basculement automatisé, pas sur l’astreinte.

Taux de consommation : du SLO au seuil d’alerte

Le taux de consommation est le taux d’erreur observé divisé par le taux que le SLO autorise. L’identité qui compte est budget consommé = taux de consommation × (fenêtre ÷ période du SLO) : elle transforme une courte observation en affirmation sur le mois entier.

Taux de consommationTaux d’erreur pour un SLO de 99,9 %Budget neuf de 30 jours épuisé enRéponse typique
0,1 %30 jourspas d’alerte
0,6 %5 joursalerte (fenêtre de 6 h, 5 % consommé)
14,4×1,44 %50 halerte (fenêtre de 1 h, 2 % consommé)
100×10 %7,2 halerte immédiate
1000×100 %, arrêt total43,2 minincident

Associez chaque seuil rapide à une fenêtre de confirmation plus courte (5 min à 14,4×, 30 min à ) pour que l’alerte se lève quand l’incident se termine. Les consommations lentes relèvent du ticket, pas de l’astreinte.

Quel outil répond à quelle question

Saisissez le Calculateur SLA quand vous détenez un pourcentage et qu’il vous faut l’équivalent en temps : il transforme n’importe quelle valeur de 0 à 100 en indisponibilité autorisée par an, par mois de 30 jours, par semaine et par jour, avec des préréglages de 90 % à 99,999 %. C’est l’outil de revue de contrat.

Utilisez Error Budget dès lors que le nombre doit piloter des décisions d’ingénierie. Donnez-lui un SLO, une fenêtre en jours et le trafic attendu ; il renvoie le budget en pourcentage, en indisponibilité autorisée, et en nombre de requêtes pouvant échouer — 1 000 sur un million à 99,9 % sur 30 jours, le chiffre qui survit à une dégradation partielle là où un nombre d’indisponibilité n’y survit pas.

D’abord, tranchez la question de savoir quelles réponses sont « mauvaises ». Les Codes HTTP sont une consultation code → signification — nom, classe et description d’une ligne par code, filtrable par numéro ou mot-clé — si bien que 400 (« n’a pas pu comprendre la requête ») contre 422 (« bien formé mais sémantiquement invalide ») se règle sur le champ. Ils marquent 307 et 308 comme préservant la méthode, mais ne disent rien de ce que 301 fait à un POST : les clients peuvent le réécrire en GET et abandonner le corps, raison pour laquelle un point POST déplacé définitivement a besoin de 308. Pour voir ce que renvoie un point en production, En-têtes HTTP charge depuis api.sitekits.dev et rapporte le statut final, les sauts de redirection, le temps de réponse et chaque en-tête ; le corps n’est jamais récupéré, et les cibles privées ou localhost sont refusées par sa protection SSRF. Besoin d’un corps, d’en-têtes d’authentification ou d’un POST ? Le Testeur REST API émet depuis votre navigateur droit vers la cible, si bien que sa politique CORS s’applique. Davantage dans le hub HTTP, dont la matrice de redirections compare 301, 302, 303, 307 et 308 côte à côte.

Pour des preuves de latence, ouvrez un export DevTools dans la Visionneuse HAR : méthode, statut, type, taille et temps par requête, les 4xx/5xx surlignés. Assainissez-le avec le Nettoyeur HAR avant de le joindre à un ticket — authorization, cookie, x-api-key, les paramètres ressemblant à des jetons et tous les corps deviennent [REDACTED].

Planifications, fenêtres et horloges

C’est dans cron que le travail de fiabilité se casse discrètement. L’ Éditeur Crontab analyse une expression à cinq champs et liste les huit prochains déclenchements dans le fuseau local de votre navigateur. Lisez le tableau comme deux choses à la fois : les plages de champs que tout cron partage, et la grammaire plus étroite que cet éditeur analyse réellement — des entiers combinés avec *, des listes, des plages et des pas, et rien d’autre.

ChampPlageFormes acceptées par l’éditeurValide ailleurs, rejeté ici
minute0–59*, 5,20, 0-30, */15
heure0–23idem
jour du mois1–31idemL, W (Quartz, AWS)
mois1–12idemles noms JANDEC (Vixie, cronie)
jour de la semaine0–6 (0 = dim.)idem7 pour dimanche et SUNSAT (Vixie, cronie) ; 5#3 (Quartz)

Tout ce qui figure dans cette dernière colonne échoue avec un seul message — Invalid cron expression (expected 5 fields) — même quand cinq champs sont présents, si bien que 0 3 * * 7 ressemble à une erreur de comptage alors qu’il s’agit en réalité d’une erreur de vocabulaire. Écrivez dimanche 0. Les macros de ligne (@daily, @reboot) et les dialectes à six champs avec secondes sont refusés de la même façon, comme le sont les plages inversées — écrivez 22-2 sous la forme 22-23,0-2. Une forme échoue en revanche silencieusement : 5/15 est lu comme la valeur unique 5, là où des analyseurs de style Kubernetes le développent en 5-59/15 ; explicitez donc la plage.

Trois choses que le tableau ne peut pas montrer. Sur la combinaison des jours, l’éditeur applique la règle POSIX de correspondance alternative — jour du mois et jour de la semaine tous deux restreints, 0 0 1 * 1 signifie le 1er et tous les lundis — mais il décide du caractère restreint par le texte, comptant comme non restreint tout champ de jour commençant par *. Un pas passe à travers ce test : */3 en jour du mois se lit comme non restreint, si bien que 0 0 */3 * 1 est combiné en ET et ne se déclenche que les lundis tombant le 1er, le 4, le 7 et ainsi de suite. Écrivez ces jours 1-31/3 pour retrouver la règle de correspondance alternative. Les pas divisent le champ, pas l’horloge — */7 sur les minutes s’exécute de :00 à :56, puis repart avec un écart de 4 minutes. Et l’aperçu utilise le fuseau de votre navigateur alors que l’horloge de la machine est généralement en UTC.

Les chronologies d’incident exigent la même rigueur : Unix Time lit les valeurs inférieures à 1e12 comme des secondes et les plus grandes comme des millisecondes, et le Convertisseur de Fuseau Horaire fixe un instant unique à travers 12 zones IANA avec le bon décalage d’heure d’été avant que vous n’annonciez une fenêtre de maintenance. Le reste de la trousse d’astreinte : outils pour les SRE.

Erreurs courantes

Le mois du contrat n’est pas le mois du calculateur

Le calculateur utilise un mois fixe de 30 jours et une année de 365 jours. Par mois calendaire, un SLO de 99,9 % autorise 40,32 minutes pour un février de 28 jours et 44,64 en juillet — 10 % d’écart pour un libellé identique.

La disponibilité se multiplie le long de la chaîne de dépendances

Trois dépendances dures à 99,9 % chacune, en série, donnent 0,999³ = 99,70 % : soit environ 2,16 heures d’indisponibilité mensuelle, pas 43,2 minutes. Sans redondance, vous ne pouvez pas promettre plus que le produit du chemin critique.

Les budgets fondés sur le temps et sur les requêtes ne sont pas interchangeables

Le chiffre d’indisponibilité autorisée suppose un taux d’erreur de 100 % pendant la panne. Une dégradation qui échoue sur 5 % des requêtes consomme un budget de requêtes à 99,9 % à 50× tout en bougeant à peine une horloge de disponibilité pilotée par des sondes synthétiques.

Votre intervalle de sondage est le plancher de votre résolution

Un contrôle synthétique à 60 secondes ne peut pas voir une panne de 20 secondes, et chaque sonde manquée enregistre environ une minute — déjà 23 % d’un budget mensuel à 99,99 %. Au-delà de trois neufs, mesurez depuis les journaux de requêtes, pas par interrogation périodique.

FAQ
Combien d'indisponibilité 99,9 % de disponibilité autorise-t-il réellement ?
8,76 heures par an, 43,2 minutes par mois de 30 jours, 10,1 minutes par semaine, ou 1,44 minute par jour. Si votre contrat mesure par mois calendaire, la même cible de 99,9 % varie avec la longueur du mois : 40,32 minutes pour un février de 28 jours et 44,64 minutes pour un mois de 31 jours. Vérifiez la clause de mesure du SLA avant de comparer des nombres.
Qu'est-ce que le taux de consommation du budget d'erreur, et quand doit-il alerter quelqu'un ?
Le taux de consommation est votre taux d'erreur observé divisé par le taux que le SLO autorise : un SLO de 99,9 % voyant 1,44 % d'erreurs consomme donc à 14,4×. Le budget consommé vaut taux de consommation × (fenêtre d'alerte ÷ fenêtre du SLO), ce qui explique pourquoi 14,4× soutenu pendant 1 heure dépense 2 % d'un budget de 30 jours et mérite une alerte, tandis que 1× soutenu pendant 3 jours dépense 10 % et mérite un ticket. Associer chaque seuil à une fenêtre de confirmation plus courte (5 minutes à 14,4×, 30 minutes à 6×) évite que l'alerte oscille après le rétablissement.
Mon SLO interne doit-il être identique au SLA que je vends ?
Non — gardez le SLO plus serré que le SLA, car l'écart est votre marge d'exploitation. Un SLO interne de 99,9 % derrière un SLA contractuel de 99,5 % laisse environ 2,9 heures de jeu mensuel entre le fait de manquer votre propre cible (43,2 min) et celui de devoir des avoirs de service (3,6 h). Si les deux sont égaux, la première violation est un signal d'ingénierie et un événement de facturation au même instant.
Pourquoi ma tâche cron se déclenche-t-elle au mauvais moment ?
Trois causes habituelles. L'horloge de la machine est en UTC alors que vous avez raisonné en heure locale : 0 3 * * * sur un serveur en UTC se déclenche donc à 12:00 en Asia/Tokyo. L'heure d'été fait qu'une tâche locale à 02:30 s'exécute deux fois ou pas du tout les jours de transition. Et le cron POSIX applique un OU entre jour du mois et jour de la semaine quand les deux champs sont restreints : 0 0 1 * 1 s'exécute donc le 1er du mois et tous les lundis — pas seulement les lundis tombant le 1er.
À quelle fréquence un contrôle synthétique doit-il tourner pour mesurer un SLO de 99,99 % ?
Plus souvent que ce n'est praticable, et c'est là la vraie réponse : à 99,99 % le budget entier de 30 jours vaut 4,32 minutes, si bien qu'une sonde à 60 secondes ne peut absolument pas voir une panne de 20 secondes, et une seule sonde manquée enregistre environ une minute — 23 % du mois parti sur un unique point de donnée. L'intervalle de sondage est un plancher sur la résolution de mesure : au-delà de trois neufs, mesurez le SLI depuis les journaux de requêtes (bons événements sur événements valides) et gardez les sondes synthétiques pour la joignabilité grossière et les contrôles de tiers. À 99,9 %, où le budget vaut 43,2 minutes, une sonde à 60 secondes est proportionnée.