1. Deux journaux différents #
Fonctionnement et trafic.
Distinguer #
| Journal | Contenu | Configuration |
|---|---|---|
Journal de Traefik (log) | Démarrage, erreurs de configuration, certificats, providers | log.level : ERROR (défaut), WARN, INFO, DEBUG |
Access logs (accessLog) | Une ligne par requête : client, routeur, service, statut, durée | désactivés par défaut |
Configuration #
log:
level: INFO
format: json
accessLog:
filePath: /var/log/traefik/access.log
format: json
bufferingSize: 100 # écriture groupée
filters:
statusCodes: ["400-599"] # n'enregistrer que les erreurs…
minDuration: 500ms # …ou les requêtes lentes
fields:
headers:
defaultMode: drop
names: { User-Agent: keep, Authorization: redact }2. Lire les access logs #
Les champs utiles.
Champs JSON principaux #
| Champ | Signification |
|---|---|
ClientHost | Adresse IP du client |
RequestMethod, RequestPath | Méthode et chemin |
RouterName, ServiceName | Routeur et service qui ont traité la requête |
DownstreamStatus | Statut renvoyé au client |
OriginStatus | Statut renvoyé par le backend (0 s'il n'a pas répondu) |
Duration | Durée totale en nanosecondes |
TraceId | Identifiant de trace si le tracing est activé |
Requêtes avec jq #
# Erreurs 5xx par service
jq -r 'select(.DownstreamStatus >= 500) | .ServiceName' access.log | sort | uniq -c | sort -rn
# Requêtes les plus lentes (ms)
jq -r '[(.Duration/1e6|floor), .RequestPath] | @tsv' access.log | sort -rn | head
# Le backend n'a pas répondu (502/504) : OriginStatus vaut 0
jq -c 'select(.OriginStatus == 0) | {RouterName, ServiceName, DownstreamStatus}' access.log3. Bonnes pratiques #
Utile, maîtrisé, conforme.
Règles #
- Format JSON, horodatage UTC et rotation (logrotate avec envoi de
USR1à Traefik pour rouvrir le fichier). - Masquer les en-têtes sensibles (
Authorization, cookies) : ce sont des données personnelles ou des secrets. - Filtrer en production à fort trafic (erreurs et requêtes lentes) et produire les volumes par des métriques plutôt que par les logs.
- Activer le tracing pour relier une ligne de log à une trace (
TraceId).
RGPD : Les adresses IP sont des données personnelles au sens du RGPD : définissez une durée de conservation.
