Déploiement
Déploiement • Chapitre 13 : Maintenance et dépannage en production

Consultation des logs

Traquer un bug intermittent en production sans logs structurés équivaut à chercher une aiguille dans une meule de foin. Maîtrisez la corrélation par X-Request-ID, les bibliothèques de logs JSON (Pino, Winston) et les outils de centralisation cloud.

🆔
X-Request-ID Unique

Identifiant UUID traversant le frontend, Nginx et la BDD pour isoler une requête précise.

📄
Logs Structurés JSON

Formatage machine {level, time, msg, userId} facilitant le filtrage et les alertes.

🔍
grep / awk / jq

Puissance des filtres en ligne de commande Unix pour extraire 10 lignes parmi 1 million.

☁️
Centralisation Cloud

Envoi des journaux vers BetterStack, Sentry ou Datadog pour conservation sécurisée.

structured-logging-filter.sh
# 1. Exemple de log structuré JSON émis par notre API Node.js (via Pino) :
{"level":50,"time":1773328800000,"pid":14820,"reqId":"req_7f3a9bc","userId":42,"err":{"message":"Cannot read properties of null (reading 'price')","stack":"TypeError: Cannot read properties of null... at calculateTotal (/var/www/api/cart.js:84:19)"},"msg":"Order checkout crashed"}

# 2. Filtrer instantanément toutes les erreurs de niveau ERROR (level 50) avec jq
$ cat /var/log/app/app.log | jq 'select(.level >= 50) | {time: .time, reqId: .reqId, msg: .msg}'

# 3. Retrouver l'intégralité du parcours d'un utilisateur ayant rencontré un bug
$ grep "req_7f3a9bc" /var/log/nginx/access.log /var/log/app/app.log
/var/log/nginx/access.log: [11/Oct/2026:15:45:10] "POST /api/v1/checkout" 500 "req_7f3a9bc"
/var/log/app/app.log: {"reqId":"req_7f3a9bc","msg":"Order checkout crashed"}

Guide Approfondi & Architecture Système

1. La Magie du Header X-Request-ID

Lorsqu'un utilisateur vous contacte au support : « J'ai eu une erreur sur le site vers 15h40 » :

Sans identifiant unique, vous devez parcourir des dizaines de milliers de lignes de logs à l'aveugle.

Avec un middleware qui génère un X-Request-ID unique renvoyé dans l'en-tête de réponse et affiché à l'utilisateur (ex: « Code d'erreur : req_7f3a »), vous tapez simplement grep req_7f3a /var/log/app.log et obtenez la ligne exacte et la cause en 2 secondes !

2. Les Niveaux de Gravité de Logs (RFC 5424)

Ne logguez pas tout au même niveau :
  • DEBUG : Informations verbeuses désactivées en production.
  • INFO : Événements normaux du cycle de vie (ex: « Serveur démarré », « Paiement reçu »).
  • WARN : Situation anormale mais non bloquante (ex: « Tentative de connexion avec mauvais mot de passe »).
  • ERROR : Échec d'une opération nécessitant une action (ex: « Échec de connexion BDD », « Exception 500 »).

Tableau Comparatif : Outils de Consultation et de Gestion des Logs

OutilEmplacementPoints FortsCoût Typique
tail -f / grep / jqEn direct sur le serveur VPSInstantané, zéro dépendance externe, gratuitGratuit (inclus dans Linux)
SentryCloud SaaS externeCapture automatique des exceptions avec ligne de code et alertes SlackPlan gratuit généreux
BetterStack / LogtailCloud SaaS externeRecherche SQL ultra-rapide sur des gigaoctets de logsPlan gratuit (1 Go/mois)
Grafana Loki + PromtailAuto-hébergé sur le VPSVisualisation puissante intégrée aux métriques CPU/RAMGratuit (consomme de la RAM locale)