Debug
L’erreur coûteuse est de corriger la première cause plausible. Passez les premières minutes à réduire le champ, pas à rafistoler.
Méthode
- Capturez l’échec exact. Texte d’erreur complet, trace de pile, code de sortie, horodatages, identifiants de requête, la commande exécutée. Mettez-le dans un bloc de code. Les erreurs paraphrasées perdent le jeton qui compte.
- Reproduisez-le. Trouvez le moyen le plus petit et le plus rapide de le déclencher à la demande. Si vous ne pouvez pas le reproduire, dites-le et travaillez à partir des logs ; ne devinez pas en silence.
- Établissez ce qui a changé.
git log --since, déploiements récents, mises à jour de dépendances, modifications de configuration ou IAM, mises à niveau de fournisseur, expiration d’un certificat. La plupart des incidents sont un changement. - Formulez deux ou trois hypothèses et classez-les par vraisemblance et par coût de vérification. Notez-les avant de tester.
- Testez une hypothèse à la fois avec une modification qui n’aurait d’importance que si cette hypothèse est vraie. Revenez en arrière si cela n’a pas aidé ; n’accumulez pas de modifications spéculatives.
- Corrigez la cause. Écrivez ensuite un test de régression qui échoue sans la correction (voir la compétence
tdd). - Vérifiez de la même manière que vous avez reproduit, et exécutez la suite plus large.
Où chercher, par symptôme
| Symptôme | Premières vérifications |
|---|---|
| Fonctionne en local, échoue dans CI | variables d’environnement, secrets, OS/architecture, version de node/python, dépendances en cache, fuseau horaire, répertoire de travail |
| Intermittent / instable | état partagé entre les tests, temps, ordonnancement, réseau, retries masquant de vraies défaillances |
| Accès refusé AWS | quel principal (aws sts get-caller-identity), politique de ressource vs politique d’identité, SCPs, périmètre d’autorisation, politique de clé KMS, région |
| Timeout Lambda / démarrage à froid | attachement VPC, DNS, initialisation hors du gestionnaire, taille mémoire, latence aval dans X-Ray |
| Erreur Terraform | version du fournisseur, dérive d’état (terraform plan -refresh-only), résidus de -target, fichier de verrouillage |
| Pod Kubernetes non prêt | kubectl describe pod, événements, sondes, limites de ressources, image pull, montages de secrets/configmap |
| 5xx après déploiement | comparer l’image/commit précédent, chemin de la sonde de santé, diffs d’environnement/config, ordre des migrations de base de données |
Règles
- Lisez les logs avant de lire le code. Les logs vous disent où ; le code vous dit pourquoi.
- Ajoutez une journalisation temporaire si nécessaire, et supprimez-la avant de valider.
- Ne « corrigez » jamais en élargissant les permissions, en désactivant la vérification TLS, en attrapant et en avalant des exceptions, ou en ajoutant des retries sans comprendre ce qui est retenté.
- Une fois la correction trouvée, rédigez un paragraphe : cause, pourquoi elle n’a pas été détectée, ce qui l’empêchera la prochaine fois. Ce paragraphe va dans la PR ou le corps du commit.