Un runbook est une procédure pas-à-pas qui transforme une alerte en action : symptôme constaté → diagnostic → remédiation → escalade si nécessaire. Sans runbook, le SRE de garde à 3 h du matin ouvre le dashboard, regarde l’alerte, et passe 30 minutes à chercher quoi faire. Avec un runbook, il sait en moins de 5 minutes : quel est l’impact, comment diagnostiquer, quoi corriger, et qui appeler si ça ne suffit pas. Ce guide vous apprend à écrire des runbooks actionnables, à structurer le triage des incidents par sévérité, à mener des postmortems blameless, et à mesurer votre progression avec les bonnes métriques.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Runbook vs Playbook : la différence entre une procédure pour une alerte et une procédure pour un type d’incident
- Le format standard d’un runbook : les 4 sections (symptôme, diagnostic, remédiation, escalade) plus les prérequis d’accès
- Bonnes pratiques de rédaction : toolbox pod, classification des erreurs, commandes copier-coller, vérifications standardisées
- Triage 60 secondes : le protocole réflexe pour évaluer impact, blast radius, dernier changement, et choisir la stratégie
- Mapping severity ↔ SEV : la relation entre la sévérité d’alerte (critical/warning) et le niveau d’incident (SEV-1/2/3)
- Rôles pendant un incident : incident commander, ops lead, scribe, communicateur — qui fait quoi
- Templates de communication : messages copiables pour Slack et la status page
- Postmortem blameless : structure complète avec 5 catégories d’action items (prévention, détection, mitigation, remédiation, résilience)
- Validation CI : automatiser la vérification des runbook_url et dashboard_url
Runbook vs Playbook
Section intitulée « Runbook vs Playbook »Avant de plonger, clarifions la terminologie :
| Type | Scope | Exemple | Quand l’utiliser |
|---|---|---|---|
| Runbook | Une alerte spécifique | PaymentErrorRateHigh.md | L’alerte X vient de sonner — que faire ? |
| Playbook | Un type d’incident | database-outage-playbook.md | La base de données est down — quel que soit l’alerte qui l’a signalé |
Un runbook est court, direct, lié à une alerte précise. Un playbook est plus large : il couvre un scénario d’incident (saturation réseau, panne DB, attaque DDoS) et peut référencer plusieurs runbooks.
Le problème : une alerte sans runbook
Section intitulée « Le problème : une alerte sans runbook »Imaginez : 3 h du matin, votre téléphone sonne.
PaymentErrorRateHigh — critical. Vous ouvrez le dashboard. Le taux
d’erreur est à 4 %. Et maintenant ? Qu’est-ce qui cause ces erreurs ? Est-ce
la base de données, un déploiement récent, un fournisseur externe ? Faut-il
rollback ? Qui prévenir ?
Sans runbook, chaque incident est une improvisation. Le SRE de garde doit reconstituer le diagnostic à partir de zéro, dans le stress, avec une visibilité partielle. Le résultat : un MTTR qui se compte en heures au lieu de minutes, des actions incohérentes d’un incident à l’autre, et une équipe qui s’épuise.
Avec un runbook, le SRE lit la procédure, suit les étapes, et résout — ou escalade — en quelques minutes. Le diagnostic n’est plus un art réservé aux experts : c’est une procédure documentée que n’importe quel membre de l’équipe de garde peut exécuter.
Le format standard d’un runbook
Section intitulée « Le format standard d’un runbook »Un runbook efficace se structure en 5 sections : les prérequis d’accès, puis les 4 sections du cycle incident.
Structure complète
Section intitulée « Structure complète »| Section | Question | Contenu |
|---|---|---|
| 0. Prérequis | De quoi ai-je besoin pour exécuter ce runbook ? | Accès kubectl, Grafana, logs, traces, toolbox pod |
| 1. Symptôme | Que se passe-t-il vu de l’utilisateur ? | Impact, métriques affectées, classification des erreurs |
| 2. Diagnostic | Quelle est la cause probable ? | Commandes toolbox, checklists ordonnées, arbre de décision |
| 3. Remédiation | Comment corriger ? | Actions par cause, rollback, vérification après action |
| 4. Escalade | Et si je n’arrive pas à résoudre ? | Qui, quand, par quel canal, quelles infos transmettre |
Prérequis : la section souvent oubliée
Section intitulée « Prérequis : la section souvent oubliée »Un runbook “copier-coller” ne sert à rien si le SRE de garde n’a pas les accès nécessaires. Listez explicitement :
## 0. Prérequis
### Accès requis- kubectl avec contexte `production` (RBAC : rôle `sre-oncall`)- Grafana : https://grafana.example.com (SSO)- Loki : via Grafana → Explore- Traces : Tempo via Grafana → Explore
### Outils- Toolbox pod : `kubectl -n tools run -it --rm debug --image=nicolaka/netshoot -- bash`- Feature flags : LaunchDarkly → projet "payments"- Rollback : ArgoCD → Application "payment-api"
### Conventions- Namespace production : `payments`- Service : `payment-api`- Dashboard principal : https://grafana.example.com/d/payment-red- Logs query : `{namespace="payments", app="payment-api"}`Exemple complet : PaymentErrorRateHigh (version production-ready)
Section intitulée « Exemple complet : PaymentErrorRateHigh (version production-ready) »# Runbook : PaymentErrorRateHigh
**Alerte** : PaymentErrorRateHigh**Sévérité alerte** : critical**Owner** : équipe payments (@payments-oncall)**Dernière mise à jour** : 2026-02-05**Dashboard** : https://grafana.example.com/d/payment-red
---
## 0. Prérequis
### Accès requis- kubectl contexte `production` (RBAC : `sre-oncall`)- Grafana (SSO)- LaunchDarkly (feature flags)- ArgoCD (rollback)
### Toolbox kubectl -n payments run -it --rm debug --image=nicolaka/netshoot -- bash
### Conventions- Namespace : `payments`- Deployment : `payment-api`- Dashboard : https://grafana.example.com/d/payment-red
---
## 1. Symptôme
Les utilisateurs voient des erreurs lors du paiement. Le taux d'erreurdu service payment-api dépasse 1 % sur les 5 dernières minutes.
**Impact** : paiements échoués — perte de revenus directe.
### Classification des erreurs
Avant de diagnostiquer, identifier le **type d'erreur** :
| Type | Symptôme | Cause probable | Section diagnostic ||------|----------|----------------|-------------------|| **5xx** | Erreurs serveur (500, 502, 503) | Bug applicatif, DB down, dépendance en erreur | 2.1, 2.2, 2.3 || **4xx** | Erreurs client (400, 401, 403) | Changement d'API, auth cassée | Pas d'action infra — remonter au dev || **Timeout** | Requêtes qui n'aboutissent pas | Saturation, DB lente, réseau | 2.4 || **TLS/DNS** | Erreurs de connexion | Certificat expiré, DNS mal configuré | 2.5 |
Vérifier dans le dashboard "Error breakdown" quel type domine.
---
## 2. Diagnostic
Suivre dans l'ordre — s'arrêter dès qu'une cause est identifiée.
### 2.1 Déploiement récent ?
kubectl -n payments rollout history deployment/payment-api
Si déploiement dans les 30 dernières minutes → **rollback** (section 3.1).
### 2.2 Base de données accessible ?
Depuis le pod toolbox :
# Lancer le toolbox kubectl -n payments run -it --rm debug --image=nicolaka/netshoot -- bash
# Tester la connectivité PostgreSQL nc -zv postgres.payments.svc 5432 # Si OK : "Connection to postgres.payments.svc 5432 port [tcp/postgresql] succeeded!"
# DNS résout ? dig postgres.payments.svc
Si la DB ne répond pas → escalader à l'équipe DBA (section 4.2).
### 2.3 Fournisseur de paiement externe ?
**Isoler si c'est nous ou le provider** :
1. Vérifier les pages de statut : - Stripe : https://status.stripe.com - Adyen : https://status.adyen.com
2. Dans les logs, chercher le pattern d'erreur :
```plaintext {namespace="payments"} |= "stripe" or "adyen" | json | status >= 500 ```
3. Si les erreurs viennent **du provider** (leur 5xx, pas le nôtre) : - Rien à faire côté infra - Communiquer au product owner - Attendre résolution provider
4. Si les erreurs sont **notre côté** (timeouts, TLS, DNS vers provider) :
Depuis le toolbox : ```bash curl -v https://api.stripe.com/v1/health dig api.stripe.com ```
### 2.4 Saturation des ressources ?
kubectl -n payments top pods -l app=payment-api
**Si OOMKilled** : ne pas scaler aveuglément. Vérifier d'abord :- Requests/limits actuels : `kubectl get pod <pod> -o jsonpath='{.spec.containers[*].resources}'`- Pic soudain ou croissance lente ? (dashboard mémoire)- Logs applicatifs pour fuite mémoire (heap, GC)
**Si CPU > 90 %** : vérifier le **throttling** avant de scaler :- Dashboard cAdvisor : `container_cpu_cfs_throttled_seconds_total`- Si throttling élevé avec p99 dégradé → scale-up justifié- Si CPU haut mais pas de throttling → peut-être juste un pic normal
### 2.5 Problème TLS / DNS / egress ?
Depuis le toolbox :
# Test egress vers dépendance externe curl -v https://api.stripe.com/v1/health
# Vérifier le certificat openssl s_client -connect api.stripe.com:443 -servername api.stripe.com
# DNS interne dig kubernetes.default.svc
---
## 3. Remédiation
### 3.1 Rollback du dernier déploiement
kubectl -n payments rollout undo deployment/payment-api
**Vérification** : le taux d'erreur redescend sous 1 % dans les 5 minutes.
### 3.2 Désactiver une feature flag
Si un feature flag récent est suspecté :
1. LaunchDarkly → projet "payments"2. Désactiver le flag suspecté3. Vérifier le taux d'erreur
### 3.3 Redémarrage des pods
kubectl -n payments rollout restart deployment/payment-api
Utile si état incohérent (connexions DB stale, cache corrompu).
### 3.4 Scale-up (après vérification saturation)
kubectl -n payments scale deployment/payment-api --replicas=6
Seulement si la section 2.4 a confirmé une saturation réelle.
---
## 4. Escalade
| Délai | Action | Contact ||-------|--------|---------|| T+0 | Acquitter l'alerte, commencer le diagnostic | SRE de garde || T+15 min | Si non résolu → appeler le secondaire | @payments-oncall-secondary || T+30 min | Si non résolu → escalader au lead | @payments-eng-lead || T+1 h | Si non résolu → incident commander | @incident-commander |
### 4.2 Escalade DBA
Si la base de données ne répond pas :
- Contact : @dba-oncall- Slack : #dba-incidents- Infos à transmettre : résultat du `nc -zv`, erreurs dans les logs pods
**Informations à transmettre lors de toute escalade** :- Heure de début de l'incident- Type d'erreur dominant (5xx, timeout, TLS...)- Impact (% d'erreur, estimation utilisateurs affectés)- Étapes de diagnostic déjà effectuées- Hypothèses testées et résultatsLier les runbooks aux alertes
Section intitulée « Lier les runbooks aux alertes »Chaque alerte Prometheus doit contenir des annotations standardisées :
annotations: runbook_url: "https://wiki.example.com/runbooks/payment-error-rate" dashboard_url: "https://grafana.example.com/d/payment-red" log_query_url: "https://grafana.example.com/explore?query={namespace=\"payments\"}" owner: "payments-team"| Annotation | Usage |
|---|---|
runbook_url | Lien direct vers le runbook de l’alerte |
dashboard_url | Dashboard principal pour le diagnostic visuel |
log_query_url | Requête Loki pré-remplie pour les logs |
trace_query_url | Requête Tempo pré-remplie (optionnel) |
owner | Équipe responsable (@team ou email) |
Quand l’alerte sonne, le SRE clique sur runbook_url et arrive directement
sur la procédure.
Validation CI des liens
Section intitulée « Validation CI des liens »Un lien cassé est pire que pas de lien. Intégrez une validation dans votre pipeline CI :
Logique de gating :
- Parser les fichiers de règles Prometheus (
.yaml) - Extraire chaque
runbook_urletdashboard_url - Pour chaque URL : vérifier qu’elle retourne HTTP 200
- Si une alerte
severity: criticaln’a pas derunbook_url→ échec du build
Exemple de script (pseudo-code) :
#!/bin/bashRULES_DIR="prometheus/rules"FAILED=0
for rule_file in $RULES_DIR/*.yaml; do # Extraire les URLs de runbook_url urls=$(yq '.groups[].rules[].annotations.runbook_url' "$rule_file" | grep -v null)
for url in $urls; do status=$(curl -s -o /dev/null -w "%{http_code}" "$url") if [ "$status" != "200" ]; then echo "FAILED: $url returns $status" FAILED=1 fi done
# Vérifier que les alertes critical ont un runbook critical_without_runbook=$(yq '.groups[].rules[] | select(.labels.severity == "critical") | select(.annotations.runbook_url == null) | .alert' "$rule_file")
if [ -n "$critical_without_runbook" ]; then echo "FAILED: Critical alert without runbook: $critical_without_runbook" FAILED=1 fidone
exit $FAILEDTriage par sévérité : le protocole 60 secondes
Section intitulée « Triage par sévérité : le protocole 60 secondes »Quand un incident survient, les 60 premières secondes sont critiques. Voici le protocole réflexe :
Mapping alert severity ↔ incident SEV
Section intitulée « Mapping alert severity ↔ incident SEV »La severity d’une alerte (critical/warning/info) n’est pas la même chose que le SEV d’un incident (SEV-1/2/3). La severity décrit la configuration de l’alerte ; le SEV décrit l’impact réel constaté.
| Alert severity | Incident SEV probable | Exemple |
|---|---|---|
critical | SEV-1 ou SEV-2 selon impact réel | Alerte critical mais 2 % des users → SEV-2 |
warning | SEV-2 ou SEV-3 selon durée et impact | Warning persistant 2 h → peut monter en SEV-2 |
info | Pas d’incident | Notification, pas d’action immédiate |
Grille de sévérité incident
Section intitulée « Grille de sévérité incident »| Niveau | Critères | Exemples | Qui mobiliser | Délai réponse |
|---|---|---|---|---|
| SEV-1 | > 50 % utilisateurs affectés, service core down, perte de données, brèche sécurité | Checkout en panne, fuite de données, base corrompue | IC + équipe complète + management | < 15 min |
| SEV-2 | < 50 % utilisateurs, fonctionnalité importante dégradée, contournement possible | Recherche lente, notifications retardées, 1 provider sur 2 en erreur | Équipe on-call + engineering lead | < 30 min |
| SEV-3 | Impact limité, fonctionnalité secondaire, pas d’impact revenu | Page marketing en erreur, outil interne lent | Équipe on-call uniquement | < 4 h (heures ouvrées) |
Évaluation impact × urgence
Section intitulée « Évaluation impact × urgence »| Urgence haute (empire rapidement) | Urgence basse (stable) | |
|---|---|---|
| Impact fort (service core, > 50 % users) | SEV-1 | SEV-2 |
| Impact modéré (fonctionnalité secondaire, < 50 % users) | SEV-2 | SEV-3 |
| Impact faible (cosmétique, outil interne) | SEV-3 | Pas d’incident — ticket |
Rôles pendant un incident
Section intitulée « Rôles pendant un incident »Un incident SEV-1 avec 5 personnes qui font toutes la même chose est pire qu’un incident avec 4 personnes aux rôles définis.
Les 4 rôles essentiels
Section intitulée « Les 4 rôles essentiels »| Rôle | Responsabilité | Qui |
|---|---|---|
| Incident Commander (IC) | Coordonne la réponse, décide des actions, gère les priorités, déclare la fin de l’incident. Ne tape pas de commandes. | SRE senior ou engineering lead |
| Ops Lead | Exécute les actions techniques : diagnostic, remédiation, surveillance | SRE de garde ou dev de l’équipe owner |
| Scribe | Note en temps réel : actions, timestamps, décisions, liens, hypothèses testées. Alimente le postmortem. | Membre de l’équipe dédié |
| Communicateur | Tient informés management, support client, status page à intervalles réguliers (15-30 min) | Engineering manager ou membre dédié |
Pour un SEV-3, le SRE de garde cumule les 4 rôles. Pour un SEV-1, séparer les rôles est indispensable.
Templates de communication
Section intitulée « Templates de communication »Update interne (Slack incident channel)
Section intitulée « Update interne (Slack incident channel) »Postez une mise à jour toutes les 15-30 minutes :
🔴 **Incident Update — [timestamp]**
**Impact** : Checkout en erreur pour ~15 % des utilisateurs**Status** : Diagnostic en cours**Mitigation** : Rollback v2.4.1 en cours**Next step** : Vérifier taux d'erreur post-rollback**ETA** : 10 min pour confirmation**Owner** : @alice-martin (IC) / @bob-dupont (Ops Lead)Update externe (status page)
Section intitulée « Update externe (status page) »Pour les utilisateurs et clients :
**[Investigating] Difficultés de paiement**
Nous avons identifié un problème affectant les paiements sur notreplateforme. Certains utilisateurs peuvent rencontrer des erreurs lorsdu checkout.
**Services impactés** : Paiement par carte**Workaround** : Réessayer dans quelques minutes ou utiliser PayPal**Prochaine mise à jour** : dans 30 minutes
_Dernière mise à jour : 14h45 UTC_Déroulement type d’un incident
Section intitulée « Déroulement type d’un incident »-
Détection
L’alerte sonne. Le chronomètre MTTD commence — c’est le temps entre le début réel du problème et sa détection.
-
Acquittement
Le SRE de garde acquitte l’alerte dans l’outil d’astreinte. Le chronomètre MTTA s’arrête ici.
-
Triage 60 secondes
Appliquer le protocole : impact, blast radius, dernier changement, stratégie. Décider du SEV.
-
Mobilisation (si SEV-1/2)
Créer un canal Slack dédié (
#incident-2026-02-07-payments). Assigner les rôles : IC, Ops Lead, Scribe, Communicateur. -
Diagnostic
Suivre le runbook : vérifier les causes probables dans l’ordre. Le scribe note chaque action et résultat.
-
Remédiation
Appliquer le correctif. Mitigation d’abord (rollback, disable flag), RCA ensuite. Vérifier le retour à la normale.
-
Communication
Informer les parties prenantes que l’incident est résolu. Mettre à jour la status page. Le chronomètre MTTR s’arrête ici.
-
Postmortem
Dans les 48 h, rédiger un postmortem blameless avec action items typés. Mettre à jour le runbook si nécessaire.
Postmortem blameless
Section intitulée « Postmortem blameless »Un postmortem est un document écrit qui analyse un incident après sa résolution. L’objectif : comprendre ce qui s’est passé et éviter que ça se reproduise. Le mot clé est blameless : focus sur les systèmes et processus, pas sur les individus.
Pourquoi “blameless” ?
Section intitulée « Pourquoi “blameless” ? »Si un ingénieur a fait une erreur, c’est que le système lui a permis de la faire. Un déploiement qui casse la production n’est pas la faute de l’ingénieur — c’est la faute du pipeline qui n’a pas détecté le problème.
Google SRE : “un postmortem blameless fait que les ingénieurs se sentent en sécurité pour rapporter les détails sans craindre de représailles — ce qui permet d’obtenir les informations nécessaires pour corriger les causes racines.”
Les 5 catégories d’action items
Section intitulée « Les 5 catégories d’action items »Des action items vagues (“améliorer le monitoring”) ne seront jamais faits. Classez chaque action dans une catégorie :
| Catégorie | Objectif | Exemples |
|---|---|---|
| Prévention | Empêcher que l’erreur se produise | Tests CI, validation schéma DB, review obligatoire |
| Détection | Détecter plus vite si ça se reproduit | Nouvelle alerte, SLO, dashboard, Watchdog |
| Mitigation | Réduire l’impact quand ça arrive | Rollback automatique, feature flags, autoscaling safe |
| Remédiation | Corriger la cause racine | Bugfix, refactoring, changement de design |
| Résilience | Tolérer la panne | Timeouts, circuit breakers, bulkheads, retry with backoff |
Template postmortem
Section intitulée « Template postmortem »# Postmortem : [Titre descriptif de l'incident]
**Date** : 2026-02-07**Durée** : 14h32 — 15h47 (1 h 15 min)**Sévérité** : SEV-1**Incident Commander** : Alice Martin**Ops Lead** : Bob Dupont**Scribe** : Charlie Durand**Auteur du postmortem** : Bob Dupont**Statut** : Action items en cours
---
## Résumé
Le service payment-api a retourné un taux d'erreur 5xx de 12 % pendant1 h 15 entre 14h32 et 15h47, impactant environ 8 000 transactions depaiement. Cause racine : migration de schéma DB non rétrocompatible.
## Impact
- ~8 000 tentatives de paiement échouées- Perte de revenu estimée : ~24 000 €- 47 tickets support client ouverts- Status page en "major outage" pendant 1 h
## Timeline
| Heure | Événement ||-------|-----------|| 14h28 | Déploiement v2.4.1 avec migration de schéma || 14h32 | Alerte PaymentErrorRateHigh (critical) || 14h34 | Acquittement, ouverture runbook, triage SEV-1 || 14h35 | Canal #incident-2026-02-07-payments créé || 14h38 | Diagnostic : déploiement récent identifié || 14h42 | Tentative rollback kubectl || 14h45 | Rollback échoué — migration DB irréversible || 14h50 | Escalade équipe DB || 15h05 | Fix identifié : code compatible ancien+nouveau schéma || 15h35 | Fix déployé (v2.4.2) || 15h47 | Taux d'erreur < 0.1 %. Incident résolu |
## Causes racines
Migration de schéma v2.4.1 : colonne `payment_method` renommée en`payment_type`. Pods en rolling update utilisaient l'ancien nom →erreurs SQL.
**Cause contribuante** : pas de validation rétrocompatibilité schéma DBdans le pipeline CI.
## Ce qui a bien fonctionné
- MTTD = 4 min (alerte rapide)- Runbook a orienté vers "déploiement récent"- MTTA = 2 min
## Ce qui doit être amélioré
- Rollback applicatif insuffisant si migration DB irréversible- Pipeline CI n'a pas détecté l'incompatibilité- Communication support client : 25 min de délai
## Action items
| Catégorie | Action | Owner | Deadline ||-----------|--------|-------|----------|| **Prévention** | Check rétrocompatibilité schéma DB dans CI | @platform | 2026-02-15 || **Prévention** | Documenter pattern expand-then-contract | @dba | 2026-02-20 || **Détection** | Alerte sur erreurs SQL liées aux colonnes | @payments | 2026-02-25 || **Mitigation** | Runbook : cas "rollback DB impossible" | @payments-oncall | 2026-02-12 || **Résilience** | Feature flag pour activer/désactiver migration | @platform | 2026-03-01 |
## Leçons apprises
Les migrations de schéma doivent être **rétrocompatibles** (expand thencontract) : l'ancien et le nouveau code doivent pouvoir coexister pendantle rolling update.Les 5 erreurs de postmortem à éviter
Section intitulée « Les 5 erreurs de postmortem à éviter »| Erreur | Pourquoi c’est un problème | Solution |
|---|---|---|
| Chercher un coupable | Les gens cachent les détails | Focus systèmes et processus |
| Action items sans owner | ”Améliorer le monitoring” ne sera jamais fait | Owner + deadline obligatoires |
| Action items non typés | Tickets vagues sans direction | Catégoriser : prévention/détection/mitigation/remédiation/résilience |
| Pas de timeline | Impossible de comprendre la chronologie | Minute par minute, du scribe |
| Postmortem trop tardif | Souvenirs flous après 2 semaines | Rédiger dans les 48 h |
Métriques d’incident : MTTD, MTTA, MTTR, MTBF
Section intitulée « Métriques d’incident : MTTD, MTTA, MTTR, MTBF »Les métriques d’incident mesurent l’efficacité de votre processus.
Les 4 métriques essentielles
Section intitulée « Les 4 métriques essentielles »| Métrique | Nom complet | Ce qu’elle mesure |
|---|---|---|
| MTTD | Mean Time To Detect | Temps entre le début du problème et sa détection |
| MTTA | Mean Time To Acknowledge | Temps entre l’alerte et l’acquittement |
| MTTR | Mean Time To Resolve | Temps entre la détection et le retour à la normale |
| MTBF | Mean Time Between Failures | Temps moyen entre deux incidents |
Convention MTTR recommandée
Section intitulée « Convention MTTR recommandée »MTTR a plusieurs définitions (Resolve, Recover, Repair). Adoptez une convention d’équipe et documentez-la :
MTTR = retour à une expérience utilisateur acceptable (pas “tous les systèmes parfaits”)
Si les utilisateurs peuvent à nouveau payer, l’incident est résolu — même si le fix définitif n’est pas encore déployé.
Cibles et leviers
Section intitulée « Cibles et leviers »| Métrique | Cible | Si hors cible | Levier |
|---|---|---|---|
| MTTD | < 5 min | Alertes trop lentes | Améliorer seuils, alertes symptom-first, Watchdog |
| MTTA | < 15 min | Équipe ne réagit pas | Planning astreinte, outil de paging, alert fatigue |
| MTTR | < 1 h (SEV-1) | Résolution trop lente | Meilleurs runbooks, automatisation, formation |
| MTBF | En augmentation | Mêmes incidents récurrents | Suivre les action items postmortem |
Anti-patterns
Section intitulée « Anti-patterns »| Anti-pattern | Problème | Solution |
|---|---|---|
| Runbook “fourre-tout” | 30 pages pour 15 alertes | 1 runbook = 1 alerte |
| Pas de prérequis | SRE n’a pas les accès le jour J | Section 0. Prérequis explicite |
| Commandes vagues | ”Vérifiez que la base fonctionne” | Commandes exactes, toolbox pod |
| Scale-up réflexe | OOMKilled → scale sans vérifier | D’abord requests/limits, leak, GC |
| Pas de classification erreurs | Traiter 5xx et 4xx de la même façon | Tableau 5xx/4xx/timeout/TLS |
| Runbook jamais testé | Procédure cassée le jour J | Game day trimestriel |
| Postmortem = blâme | Personne ne rapporte les détails | Blameless : systèmes, pas individus |
| Action items vagues | ”Améliorer le monitoring” | Owner + deadline + catégorie |
| Pas de scribe | Timeline reconstituée de mémoire | Scribe dédié en SEV-1 |
| Pas de communication | Management appelle le SRE | Templates + updates réguliers |
Workflow : mettre en place le processus
Section intitulée « Workflow : mettre en place le processus »-
Inventoriez vos alertes critical
Listez toutes les alertes
critical. Ce sont vos candidats prioritaires. -
Écrivez le premier runbook
Choisissez l’alerte la plus fréquente. Écrivez les 5 sections (prérequis
- 4 sections incident). Faites relire par un junior.
-
Standardisez les annotations
Ajoutez
runbook_url,dashboard_url,ownerdans chaque alerte. -
Configurez la validation CI
Script qui vérifie : HTTP 200 sur chaque URL, runbook obligatoire si
severity: critical. -
Définissez votre grille de sévérité
SEV-1/2/3 avec critères clairs, mapping severity ↔ SEV, rôles par niveau.
-
Formalisez les rôles
IC, Ops Lead, Scribe, Communicateur. Templates de communication.
-
Rédigez votre premier postmortem
Après le prochain incident, utilisez le template avec les 5 catégories d’action items.
-
Itérez chaque trimestre
Revue runbooks, suivi action items, game day pour tester les procédures.
À retenir
Section intitulée « À retenir »-
Runbook = procédure pour une alerte (court, direct). Playbook = procédure pour un type d’incident (DB down, saturation) qui regroupe plusieurs alertes
-
Un runbook a 5 sections : prérequis (accès, toolbox, conventions) + symptôme + diagnostic + remédiation + escalade
-
Utilisez un pod toolbox (
nicolaka/netshoot) pour le diagnostic — n’attendez pas d’avoir les outils dans vos images applicatives -
Classification des erreurs : 5xx, 4xx, timeout, TLS — chaque type a une remédiation différente
-
Protocole triage 60 secondes : impact, blast radius, dernier changement, stratégie (mitigation d’abord, RCA ensuite)
-
4 rôles en SEV-1 : IC (coordonne), Ops Lead (exécute), Scribe (note la timeline), Communicateur (informe)
-
Postmortem blameless avec 5 catégories d’action items : prévention, détection, mitigation, remédiation, résilience
-
Convention MTTR : retour à une expérience utilisateur acceptable (pas tous les systèmes parfaits). Documentez votre définition.
- Google SRE Book — Postmortem Culture : sre.google/sre-book/postmortem-culture
- Google SRE Workbook — Postmortem Culture : sre.google/workbook/postmortem-culture
- Google SRE Book — Example Postmortem : sre.google/sre-book/example-postmortem
- PagerDuty — Incident Response Guide : response.pagerduty.com
- PagerDuty — Postmortem Guide : postmortems.pagerduty.com
- Atlassian — Incident Management Metrics : atlassian.com/incident-management/kpis/common-metrics