Aller au contenu
medium

Observabilité Traefik : logs, métriques Prometheus et tracing

9 min de lecture

Logo traefik

Traefik voit passer tout votre trafic : bien instrumenté, il devient votre meilleure source de diagnostic. Il expose les trois piliers de l'observabilité : des access logs détaillés, des métriques Prometheus, et des traces distribuées via OpenTelemetry. Ce guide s'adresse à ceux qui veulent passer d'une boîte noire à un reverse proxy mesurable, pour repérer une latence ou un pic d'erreurs avant les utilisateurs.

Tous les exemples ont été testés sur Traefik v3.7.6.

  • Activer les access logs au format JSON exploitable.
  • Exposer les métriques Prometheus et les scraper.
  • Envoyer métriques et traces via OpenTelemetry (OTLP).
  • Exploiter et sécuriser le dashboard.
  • Poser des alertes sur les erreurs et la latence.

L'observabilité repose sur trois signaux complémentaires, tous produits par Traefik.

PilierCe qu'il répondBackend typique
LogsQue s'est-il passé sur cette requête ?Loki, ELK
MétriquesCombien, à quelle vitesse, quel taux d'erreur ?Prometheus
TracesOù le temps est-il passé dans la chaîne ?Tempo, Jaeger

Pour relier ces signaux entre eux, voir corrélation des signaux et le standard OpenTelemetry.

Les access logs enregistrent chaque requête traversant Traefik. Activez-les au format JSON, bien plus exploitable qu'un format texte pour un agrégateur de logs.

# configuration statique
accessLog:
format: json
filters:
statusCodes:
- "400-499"
- "500-599"

Chaque ligne JSON contient notamment DownstreamStatus (le code HTTP renvoyé), RequestHost, RequestPath et Duration (la latence). En lab, une requête vers un service produit bien une entrée {"DownstreamStatus":200,"RequestHost":"...","Duration":...}, prête à être ingérée par Loki ou Elasticsearch.

Traefik expose des métriques Prometheus sur un endpoint dédié. La bonne pratique : les servir sur un entrypoint séparé (non public) plutôt que sur le trafic applicatif.

  1. Activer les métriques sur un entrypoint dédié :

    # configuration statique
    entryPoints:
    metrics:
    address: ":8082"
    metrics:
    prometheus:
    entryPoint: metrics
  2. Vérifier l'endpoint (les métriques Traefik y apparaissent) :

    Fenêtre de terminal
    curl -s http://localhost:8082/metrics | grep traefik_
    # traefik_entrypoint_requests_total{code="200",entrypoint="web",...} 5
    # traefik_service_requests_total{...,service="whoami@docker"} 5
  3. Scraper avec Prometheus en pointant sur cet endpoint :

    prometheus.yml
    scrape_configs:
    - job_name: traefik
    static_configs:
    - targets: ["traefik:8082"]

    La cible passe alors à l'état up dans Prometheus. Pour la visualisation, connectez Grafana à Prometheus.

MétriqueDescription
traefik_entrypoint_requests_totalRequêtes par entrypoint (avec le code HTTP)
traefik_entrypoint_request_duration_secondsLatence par entrypoint (histogramme)
traefik_router_requests_totalRequêtes par router
traefik_service_requests_totalRequêtes par service backend
traefik_service_server_upÉtat des backends (1 = up)
traefik_config_reloads_totalNombre de rechargements de configuration

Le code HTTP est un label (code="200"), ce qui permet de calculer directement un taux d'erreur par entrypoint ou par service en PromQL.

Traefik v3 intègre OpenTelemetry nativement, via le protocole OTLP. C'est la voie recommandée pour envoyer métriques et traces vers un collecteur unique, puis les router vers vos backends.

# métriques via OTLP
metrics:
otlp:
http:
endpoint: "http://otel-collector:4318/v1/metrics"
# traces via OTLP
tracing:
otlp:
http:
endpoint: "http://otel-collector:4318/v1/traces"

L'OpenTelemetry Collector reçoit ces données et les exporte vers Prometheus (métriques), Tempo ou Jaeger (traces). Ce découplage évite de coupler Traefik à un backend précis.

Les traces montrent le chemin d'une requête à travers vos services et où le temps est passé. Avec OTLP activé, Traefik crée un span par requête et propage le contexte aux services en aval via les en-têtes W3C traceparent.

Vous exportez ensuite vers le backend de votre choix, tous compatibles OTLP :

  • Grafana Tempo : stockage économique, requêtes TraceQL, intégration Grafana.
  • Jaeger : plateforme de tracing CNCF, UI de recherche de spans.

Le dashboard affiche en direct les routers, services, middlewares et entrypoints détectés. C'est le premier réflexe pour vérifier qu'une route est bien prise en compte.

# active l'API et le dashboard
api:
dashboard: true

Traefik expose un endpoint ping pour vérifier qu'il est vivant, utile pour un load balancer amont ou les sondes Kubernetes.

ping:
entryPoint: web

Sur Kubernetes, branchez les sondes liveness et readiness du pod Traefik sur cet endpoint. Côté backends, la métrique traefik_service_server_up signale un serveur indisponible, à surveiller de près.

Les métriques ne servent qu'exploitées. Posez des alertes Prometheus sur les signaux critiques.

# règles Prometheus (extrait)
groups:
- name: traefik
rules:
- alert: TraefikHighErrorRate
expr: |
sum(rate(traefik_service_requests_total{code=~"5.."}[5m]))
/ sum(rate(traefik_service_requests_total[5m])) > 0.05
for: 5m
labels: { severity: warning }
annotations:
summary: "Taux d'erreur 5xx supérieur à 5%"
- alert: TraefikBackendDown
expr: traefik_service_server_up == 0
for: 2m
labels: { severity: critical }

La première alerte se déclenche quand plus de 5% des requêtes renvoient une erreur serveur ; la seconde quand un backend tombe. Ajustez les seuils à votre trafic réel.

L'observabilité n'a de valeur que si elle accélère le diagnostic. Voici les réflexes.

QuestionOù regarder
Pic d'erreurs 5xx ?traefik_service_requests_total{code=~"5.."} + access logs filtrés sur 5xx
Latence anormale ?traefik_entrypoint_request_duration_seconds puis une trace pour localiser l'étape lente
Une route ne répond pas ?dashboard (le router apparaît-il ?) + access logs
Backend instable ?traefik_service_server_up
  • Traefik expose les trois piliers : access logs, métriques Prometheus, traces OpenTelemetry.
  • Les access logs JSON (avec filtrage sur les codes) alimentent Loki ou ELK.
  • Les métriques exposent le code HTTP en label : taux d'erreur et latence se calculent en PromQL.
  • OpenTelemetry (OTLP) est la voie v3 pour router métriques et traces via un collecteur.
  • Le dashboard ne s'expose jamais en insecure : protégez-le.
  • Posez des alertes sur le taux d'erreur 5xx et l'état des backends.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn