RousselTMLEARNING

Proxy & réseau

Traefik : les logs (journaux applicatifs et access logs)

Configurer les deux journaux de Traefik : le journal de fonctionnement (niveaux, format) et les access logs (format JSON, champs, filtres, en-têtes), puis les exploiter avec jq, Loki ou CrowdSec.

1. Deux journaux différents #

Fonctionnement et trafic.

Distinguer #

JournalContenuConfiguration
Journal de Traefik (log)Démarrage, erreurs de configuration, certificats, providerslog.level : ERROR (défaut), WARN, INFO, DEBUG
Access logs (accessLog)Une ligne par requête : client, routeur, service, statut, duréedé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 #

ChampSignification
ClientHostAdresse IP du client
RequestMethod, RequestPathMéthode et chemin
RouterName, ServiceNameRouteur et service qui ont traité la requête
DownstreamStatusStatut renvoyé au client
OriginStatusStatut renvoyé par le backend (0 s'il n'a pas répondu)
DurationDurée totale en nanosecondes
TraceIdIdentifiant de trace si le tracing est activé

Requêtes avec jq #

Chaîne de collecte des logs
Les access logs JSON se collectent sans règle d'analyse.
# 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.log

3. 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.

Articles liés

Traefik : sécuriser et transformer les requêtes avec les middlewares (BasicAuth, ForwardAuth…)

Les middlewares Traefik modifient les requêtes et réponses entre le routeur et le service : authentification …

Traefik : les providers (Docker, Kubernetes, Nomad, Consul, fichiers, clés-valeurs)

Les providers alimentent la configuration dynamique de Traefik : découverte des services Docker, Swarm, Kuber…

Traefik comme Ingress Controller pour Kubernetes (Helm, IngressRoute, Gateway API)

Installer Traefik dans Kubernetes avec Helm et publier des applications avec Ingress, les CRD IngressRoute et…

Pour aller plus loin

Soutenir

♥ SOUTENIR

Soutenez RousselTM Learning

Les formations, articles, TP et attestations restent gratuits et sans publicité intrusive. Une contribution libre, du montant de votre choix, finance l’hébergement, les environnements de TP et l’écriture de nouveaux contenus.

Contribuer avec PayPal Montant libre · carte bancaire ou compte PayPalEn savoir plus
QR code PayPal
Ou scannez ce QR code avec votre téléphone

Merci, chaque contribution compte !