Docker Compose et Traefik : superviser les services éphémères avec des métriques dynamiques

Docker Compose et Traefik : superviser les services éphémères avec des métriques dynamiques

Introduction

Dans les environnements de développement et de staging, les conteneurs Docker sont souvent créés pour des tests rapides, puis détruits aussitôt. Cette nature éphémère rend difficile la collecte de métriques fiables et la corrélation d’incidents. En combinant Docker Compose, les labels Docker et le reverse‑proxy Traefik, on peut générer des métriques dynamiques dès le lancement du service. Ce guide pas à pas montre comment structurer le projet, configurer chaque composant et intégrer Lescopr pour disposer d’un tableau de bord complet.


1. Architecture du projet

1.1. Choix technologiques

  • Docker Compose : orchestration légère adaptée aux environnements locaux et de pré‑production.
  • Traefik : reverse‑proxy dynamique qui lit les labels Docker pour configurer automatiquement le routage et les points d’exposition des métriques.
  • Lescopr : plateforme d’observabilité qui consomme les métriques Prometheus exposées par Traefik et enrichit les données avec des tags de contexte.

1.2. Diagramme simplifié

graph LR
  A[Docker Compose] --> B[Traefik]
  B --> C[Prometheus endpoint]
  C --> D[Lescopr]
  D --> E[Dashboard SRE]

Le diagramme montre le flux de données : chaque service expose un endpoint /metrics que Traefik agrège, puis Lescopr collecte et visualise.


2. Mise en place du projet

2.1. Initialisation du dépôt

mkdir projet-observabilite && cd projet-observabilite
git init
cat > docker-compose.yml <<'EOF'
version: '3.8'
services:
  traefik:
    image: traefik:v2.10
    command:
      - --api.insecure=true
      - --providers.docker=true
      - --entrypoints.web.address=:80
      - --metrics.prometheus=true
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.api.rule=Host(`traefik.localhost`)"
      - "traefik.http.routers.api.service=api@internal"
      - "traefik.http.routers.api.entrypoints=web"
EOF

Ce fichier crée le reverse‑proxy Traefik avec l’API et le endpoint Prometheus activés.

2.2. Définition des services éphémères

Ajoutons un service de démonstration :

  demo-app:
    image: hashicorp/http-echo:latest
    command: ["-text=Hello from demo"]
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.demo.rule=Host(`demo.localhost`)"
      - "traefik.http.routers.demo.entrypoints=web"
      - "traefik.http.services.demo.loadbalancer.server.port=5678"
      - "traefik.http.routers.demo.middlewares=metrics"
      - "traefik.http.middlewares.metrics.addHeaders.headers.customResponseHeaders.X-Env=staging"

Les labels traefik.http.routers.demo définissent le routage, tandis que le middleware metrics ajoute un header qui sera exploité par Lescopr pour enrichir les métriques.


3. Exposition des métriques dynamiques

3.1. Labels de métriques

Traefik lit les labels Docker et crée automatiquement un endpoint /metrics au format Prometheus. Pour chaque conteneur, les métriques suivantes sont disponibles :

  • traefik_service_requests_total
  • traefik_service_response_duration_seconds
  • traefik_service_up

En ajoutant le label traefik.http.services.<service>.loadbalancer.server.port, on expose le port exact, ce qui permet à Lescopr de distinguer les instances même lorsqu’elles sont créées et détruites rapidement.

3.2. Configuration de Lescopr

Dans l’interface Lescopr :

  1. Créez une source Prometheus pointant sur http://localhost:8080/metrics.
  2. Activez le tagging dynamique en sélectionnant le header X-Env comme label.
  3. Définissez un tableau de bord "Services éphémères" affichant :
    • Nombre de requêtes par service.
    • Temps moyen de réponse.
    • État d’activité (up/down).

Ces visualisations se mettent à jour dès qu’un conteneur démarre ou s’arrête, grâce aux labels Docker.


4. Gestion du cycle de vie des conteneurs

4.1. Automatisation avec Docker Compose

# Lancement du stack complet
docker compose up -d
# Vérification du tableau de bord Lescopr
open https://app.lescopr.io/dashboard/services-ephemeres

Lorsque vous supprimez un service :

docker compose rm -f demo-app

Traefik retire automatiquement le routage et les métriques disparaissent du endpoint Prometheus, ce qui se reflète immédiatement dans Lescopr.

4.2. Nettoyage des métriques orphelines

Dans certains cas, les métriques peuvent persister pendant quelques secondes. Pour éviter les faux positifs, configurez scrape_interval à 5 s dans Prometheus et activez le stale_markers de Lescopr : les séries disparues sont marquées comme obsolètes.


5. Bonnes pratiques et pièges courants

  • Utiliser des labels explicites : traefik.enable=true doit être présent sur chaque conteneur qui doit être observé.
  • Éviter les collisions de noms : préfixez les services (demo-, api-) pour que Lescopr les différencie facilement.
  • Limiter la granularité : ne surchargez pas Traefik avec trop de middlewares, sinon le temps de routage augmente (impact sur la latence).
  • Surveiller le taux de création : si vous créez plus de 100 conteneurs par minute, augmentez la capacité de votre endpoint Prometheus.

6. Étapes de validation

  1. Déploiement : docker compose up -d.
  2. Vérification du routage : accéder à http://demo.localhost.
  3. Inspection des métriques : curl http://localhost:8080/metrics | grep demo.
  4. Dashboard Lescopr : confirmer que le service apparaît et que les valeurs évoluent en temps réel.
  5. Suppression : docker compose rm -f demo-app puis vérifier la disparition du service du tableau de bord.

Conclusion

Superviser des services éphémères avec Docker Compose, Traefik et Lescopr permet d’obtenir des métriques dynamiques dès le lancement du conteneur, de réduire le MTTR et d’améliorer la visibilité sur les environnements de test. Cette approche repose sur des labels Docker explicites, un endpoint Prometheus fiable et l’enrichissement contextuel offert par Lescopr.

Pour aller plus loin, la documentation Lescopr détaille la mise en place pas à pas.