⚙️ Traefik 2, des métriques pour Prometheus

Traefik dispose d'un point d'entrée de supervision, conçu pour Prometheus. Découvrez comment le mettre en place et l'exploiter.

logo traefik
logo traefik

Lorsque Traefik est mis en place et que vos routeurs/services sont configurés, il est toujours pertinent d'ajouter de la supervision. Des métriques sont mises à disposition (après configuration) pour être monitoré via Prometheus.

Version Date Commentaires
1 05/2022 Création du document
1.1 05/2023 Mise à jour des versions, correction syntaxique, ajout du contexte d'exécution
1.2 08/2023 Mise à jour des versions

Objectif : Configurer le point d'entrée de supervision de Traefik et configurer Prometheus.

Environnement : Debian 12, Docker 24.x, docker compose (plugin) 2.20.x, Traefik 2.10.

Contexte d'exécution :

jho@vmi866042:/opt/docker/dc$ tree
.
├── conf
│   ├── acme.json
│   ├── traefik.yml
│   ├── traefikdynamic
│   │   ├── dynamic.yml
├── docker-compose.yml
└── logs
    ├── traefikAccess.log
    ├── traefik.log
Résultat de la commande "tree" dans le dossier /opt/docker/dc
  • dossier où se trouvent tous les fichiers et dossiers pour cet exemple : /opt/docker/dc
  • emplacement du fichier de configuration principal de Traefik : /opt/docker/dc/conf/traefik.yml
  • dossier où se trouvent les configurations de Traefik (fichiers dynamiques) : /opt/docker/dc/conf/traefikdynamic
  • emplacement du fichier comportant tous les certificats générés par let's encrypt (ou autre) : /opt/docker/dc/conf/acme.json
  • dossier où se trouvent les journaux d'événements (logs) : /opt/docker/dc/logs/

L'inspiration de cette documentation provient directement du site officiel. Traefik supporte 4 moyens de supervision : Datadog, Metricd, Prometheus et InfluxDB.
Les métriques permettent d'avoir des informations pertinentes et en (quasi) temps réel comme notamment des statistiques sur le nombre de rechargements de la configuration, le nombre de requêtes d'entrée sur HTTP / HTTPS, le nombre de redirections, le nombre de connexions ouvertes...

Configuration de Traefik

Ici, j'utiliserai Prometheus pour récupérer les métriques et les stocker localement. Pour ce faire, le fichier traefik.yml doit être modifié pour intégrer quelques nouveaux paramètres. Au niveau des entrypoints, insérez simplement ce bloc (le numéro de port peut être changé) :

entryPoints:
  metrics:
    address: ":9090"

En fin de fichier, ajoutez ce bloc entièrement (format YAML) :

metrics:
  prometheus:
    entryPoint: metrics
    addEntryPointsLabels: true
    addServicesLabels: true
    addRoutersLabels: true
    buckets:
      - 0.1
      - 0.3
      - 1.2
      - 5.0

N'oubliez pas de redémarrer Traefik pour prendre en compte les modifications. ATTENTION à ne pas exposer au web le port de l'entrypoint "metrics" !

Contenu complet du fichier traefik.yml :

---
global:
  sendAnonymousUsage: false
  checkNewVersion: false

api:
  dashboard: true

log:
  filePath: "/etc/traefik/applog.log"
  format: json
  level: "ERROR"

providers:
  docker:
    endpoint: unix:///var/run/docker.sock
    exposedByDefault: false
    watch: true
    swarmMode: false
  file:
    directory: "/dynamic"
    watch: true

entryPoints:
  web:
    address: ":80"
    http:
      redirections:
        entryPoint:
          to: websecure
          scheme: https
  websecure:
    address: ":443"
  metrics:
    address: ":9090"

metrics:
  prometheus:
    entryPoint: metrics
    addEntryPointsLabels: true
    addServicesLabels: true
    addRoutersLabels: true
    buckets:
      - 0.1
      - 0.3
      - 1.2
      - 5.0

Configuration pour Prometheus

Simplement, ajoutez ce bloc dans votre fichier prometheus.yml :

...

scrape_configs:
  - job_name: 'traefik'
    static_configs:
      - targets: ['traefik:9090']

N'oubliez pas de remplacer le numéro de port si vous l'avez modifié dans le fichier traefik.yml. Désormais, il vous est possible de scraper Traefik grâce à Prometheus. Toutes les métriques Traefik dans Prometheus sont intitulées traefik_.

Source