Letzte Aktualisierung am 6. Juni 2025

Im vorangegangenen Abschnitt habe ich gezeigt wie ich Prometheus mit NodeExporter für das Einsammeln von Metrik-Daten des Raspberry Pi eingerichtet habe. Diese Metrik-Daten werden mit Grafana in einem Dashboard visualisiert.
In diesem Abschnitt wird es nun darum gehen weitere Metrik-Daten anderer Container einzusammeln. Dazu werden wir die Container von Cloudflare und Traefik so erweitern, dass beide Container Metrik-Daten erzeugen. Die Daten werden wieder in Grafana in zwei unterschiedlichen Dashboards visualisiert.
Die hier beschriebene Vorgehensweise für das Sammeln der Metrik-Daten von Traefik lehnt sich an an den Artikel „Native Traefik-Metriken mit Prometheus sammeln“ von Ralf Geschke, insb. bzgl. des Tipps zur benutzten Basic Authentication. Die Dashboards für die Visualisierung der Traefik-Metrik-Daten sind dem Artikel „Visualizing Traefik Metrics with Grafana and Prometheus: Step-by-Step“ von Tomer Klein entnommen.
Container-Konfiguration
In Dienstebereitstellung im Internet haben wir die Container für Cloudflare und Traefik in einem docker-compose.yml
zusammengefasst, um damit einen Cloudflare-Tunnel zur Docker-Umgebung aufzubauen und um mit Traefik als Reverse Proxy das notwendige Routing zum richtigen Docker-Container zu realisieren. Dieses docker-compose.yml
wird nun erweitert, um sowohl für Cloudflare als auch für Traefik Metrik-Daten zu protokollieren. Für Traefik muss zusätzlich die statische Konfiguration in der Datei traefik.yml
erweitert werden.
Für Cloudflare werden die Metriken für den cloudflared
-Container aktiviert. Es gibt auch die Möglichkeit weitere Daten von Cloudflare über eine entsprechenden API mit dem Cloudflare Exporter einzusammeln. Allerdings funktioniert das nach meinen letzten Recherchen nicht mit dem Free Plan von Cloudflare. Daher muss ich diese Möglichkeit an dieser Stelle schuldig bleiben.
Änderungen für Cloudflare
Die Änderungen in der docker-compose.yml
beschränken sich auf die drei zusätzlichen Zeilen 8-10.
- Zeile 8
Hier wird die Adresse und der Port definiert, über die die eingesammelten Daten für cloudflared abgerufen werden können. Die Verwendung von 0.0.0.0 als IP-Adresse hat zur Folge, dass die IP-Adresse des Pi verwendet wird zusammen mit Port 9101. - Zeile 9-10
Da wir einen zusätzlichen Port nutzen, müssen wir diesen im Abschnittsports
bekannt machen. Der Port wird für den Zugriff auf die Metriken-Daten benutzt wie in Zeile 8 angegeben.
Änderungen für Traefik
Für den Traefik-Container muss ebenfalls die service-Definition in docker-compose.yml
erweitert werden.
- Zeile 38
Hier wird die Subdomain definiert, unter der die Metrik-Daten in Rohform einsehbar sind. Die URL lautet in diesem Fall dashboad.mein-domain.de/trafic-metrics. Diese Angabe musst du deinen Anforderungen entsprechend abändern. - Zeile 39
Die Service-Definition in Traefik verwendet den internen Serviceprometheus@internal
. - Zeile 40
Damit nicht jeder über die o.g. URL auf deine Metrik-Daten zugreifen kann, wird über eine Middleware dieselbe BasicAuthtraefikauth
verwendet, die bereits für das Traefik-Dashboard eingerichtet ist. D.h. du kommst mit den gleichen Benutzerangaben zu den Metrik-Daten. - Zeile 41
Analog zu allen anderen Verbindungen kommt auch hier TLS zum Einsatz.
An dieser Stelle der eingangs erwähnte Tipp zur Basic Authentication von Ralf Geschke vor einem Neustart des Traefik-Containers das Traefik-Dashboard im Browser zu schließen, denn:
Achtung – das Traefik-Dashboard sollte zuvor geschlossen werden! Denn falls es im selben Browser, aber einem anderen Tab geöffnet bleibt, kommen die Nachteile von HTTP-Basic-Authentication zum Tragen. Das Dashboard stellt regelmäßig Anfragen an das Backend, authentifiziert sich dabei, überschreibt damit die Zugangsdaten für die Metriken, weshalb es so wirkt, als wären diese ungültig. Insgesamt ein ziemliches Chaos, doch dieses Verhalten ist in der Praxis irrelevant, da Prometheus nur die URL der Metriken mit den entsprechenden Zugangsdaten nutzt, für den Zugriff auf das Dashboard besteht überhaupt kein Anlass. Und umgekehrt – man wird die Metriken in Rohform wohl nie mittels Browser auslesen wollen, es sei denn für einen ersten Test.
Zusätzlich muss für Traefik die statische Konfiguration in der Datei traefik.yml
erweitert werden. Die Änderung muss in der traefik.yml
in deiner eingerichteten Datenablage vorgenommen werden und wird erst nach dem Neustart des Containers bzw. Stacks wirksam.
- Zeilen 35-41
Über die vier Zeilen werden die Buckets definiert, in die Prometheus die eingesammelten Daten einsortiert (vgl. https://doc.traefik.io/traefik/observability/metrics/prometheus/) - Zeile 42
Die Angabe vonmanualRouting: true
ist notwendig, da wir in derdocker-compose.yml
ein eigenes Routing für die Metrik-Daten definiert haben.
docker-compose.yml
services:
cloudflare:
image: cloudflare/cloudflared:latest
container_name: cloudflare-tutorial
command: tunnel run
environment:
- TUNNEL_TOKEN=${TUNNEL_TOKEN}
- TUNNEL_METRICS=0.0.0.0:9101
ports:
- 9101:9101
restart: unless-stopped
networks:
- nw-dekayone-clf
traefik:
image: traefik:3.2
container_name: traefik-tutorial
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /etc/localtime:/etc/localtime:ro
- ${DATA_ROOT}/dmz/config/traefik.yml:/traefik.yml:ro
- ${DATA_ROOT}/dmz/config/dynamic_conf.yml:/dynamic_conf.yml:ro
- ${DATA_ROOT}/dmz/certificates/origin-certificates:/origin-certificates:ro
- ${DATA_ROOT}/dmz/logs:/logs
labels:
- traefik.enable=true
# Traefik's dashoard
- traefik.http.routers.dashboard.rule=Host(`dashboard.meine-domain.de`)
- traefik.http.routers.dashboard.service=dashboard@internal
- traefik.http.routers.dashboard.middlewares=traefikauth
- traefik.http.routers.dashboard.tls=true
- traefik.http.routers.api.rule=Host(`dashboard.meine-domain.de`) && PathPrefix(`/api`)
- traefik.http.routers.api.service=api@internal
- traefik.http.routers.api.middlewares=traefikauth
- traefik.http.routers.api.tls=true
# Metrics
- traefik.http.routers.traefik-metrics.rule=Host(`dashboard.meine-domain.de`) && PathPrefix(`/traefik-metrics`)
- traefik.http.routers.traefik-metrics.service=prometheus@internal
- traefik.http.routers.traefik-metrics.middlewares=traefikauth
- traefik.http.routers.traefik-metrics.tls=true
# Auth
- traefik.http.middlewares.traefikauth.basicauth.users=test:$apr1$ztPz9Iln$mXWxOyWBFx4iN225A6ma2/
networks:
- nw-dekayone-clf
- nw-dekayone-dmz
networks:
nw-dekayone-clf: # network to cloudflare
external: true
nw-dekayone-dmz: # internal network for attaching exposed services
external: true
traefik.yml
# Static configuration file of traefik
# use dashboard, access configured in dynanmic_conf.yml
api:
dashboard: true
insecure: true
# configure logging
log:
level: DEBUG
filePath: "/logs/traefik.log"
maxSize: 10
maxBackups: 3
accessLog:
filePath: "/logs/access.log"
bufferingSize: 100
# only HTTPS-entrypoint
entryPoints:
https:
address: ":443"
# the providers
providers:
# Definition of provider 'docker' with dynamic configuration file 'dynamic_conf.yml'
docker:
endpoint: "unix:///var/run/docker.sock"
exposedByDefault: false
watch: true
file:
filename: dynamic_conf.yml
watch: true
# enable prometheus metrics
metrics:
prometheus:
buckets:
- 0.1
- 0.3
- 1.2
- 5.0
manualRouting: true
Nachdem du alle Änderungen vorgenommen und diese per „Commit and push“ ins Repository übertragen bzw. die Änderungen an der traefik.yml
in deiner Datenablage für deine Docker-Umgebung vorgenommen hast, kannst du den Stack für Cloudflare und Traefik in Portainer per „Pull and redeploy“ aktualisieren und neu starten.
Die Metrik-Daten von Traefik in Rohform erreichst du über die Eingabe der URL dashboard.meine-domain.de/traefik-metrics, die Rohdaten von cloudflared über Eingabe der IP-Adresse deines Pi und des Ports 9101 gefolgt /metrics.
Prometheus-Konfiguration
Im vorangegangen Kapitel haben wir Cloudflare und Traefik so konfiguriert, dass beide Container fleißig Metrik-Daten sammeln. Nun müssen wir Prometheus noch mitteilen, wo es die Metrik-Daten einsammeln soll. Das machen wir über eine Erweiterung der prometheus.yml
um neue Jobs für Cloudflare und Traefik.
Die Änderungen müssen in der prometheus.yml
vorgenommen werden, die in der Datenablage deiner Docker-Umgebung abgelegt ist. Die Änderungen werden nach einem Neustart des Containers bzw. Stacks für Prometheus aktiv.
- Zeilen 15-17
Hier wird analog zu den bereits vorhandenen Jobs ein neuer statischer Job für die Cloudflare-Daten ergänzt. IP-Adresse und Port musst du ggf. deinen eigenen Bedürfnissen anpassen. - Zeilen 19-27
In diesem Block wird der Job für die Metrik-Daten von Traefik definiert, der etwas umfangreicher als die statischen Job zuvor ausfällt.- Zeile 19
Die Definition beginnt wie üblich mit dem Job-Namen. - Zeile 20
Es wird eine HTTPS-Verbindung benutzt. - Zeile 21
Der URL-Präfix aus der Service-Definition für Traefik in der docker-compose.yml - Zeilen 22-24
Die statische Angabe der URL, ebenfalls aus der Service-Definition für Traefik in der docker-compose.yml - Zeilen 25-27
Die Angaben zu Benutzernamen und Kennwort für die BasicAuth. Achtung: Die Angaben stehen im Klartext in der prometheus.yml. Du musst diese Angaben anpassen an die Benutzerdaten, die du für das Traefik-Dashboard erstellt hast. Ich verwende hier die Beispieldaten.
- Zeile 19
prometheus.yml
global:
scrape_interval: 30s
evaluation_interval: 30s
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 30s
static_configs:
- targets: ['192.168.1.222:9090']
- job_name: 'dk2docker'
static_configs:
- targets: ['192.168.1.222:9100']
- job_name: 'cloudflare'
static_configs:
- targets: ['192.168.1.222:9101']
- job_name: 'traefik'
scheme: https
metrics_path: '/traefik-metrics'
static_configs:
- targets:
- dashboard.meine-domain.de
basic_auth:
username: test
password: 'dk1tutorial'
Nach dem Neustart deiner Prometheus-Instanz findest du in der Prometheus-GUI im Reiter „Status > Target health“ zwei neue Einträge „cloudflare“ und „traefik“. Hinterlegt sind dort die beiden URLs aus der prometheus.yml
, über die du auf die Rohdaten zugreifen kannst.
Dashboards
Von Grafana.com selbst werden Dashboard-Template im Internet zum Download angeboten. Der Download und die Einbindung als neues Dashboard in deine eigene Grafana-Instanz habe ich im vorgegangenen Kapitel beschrieben. Das Verzeichnis auf Grafana.com bietet eine Suchfunktion, sodass du sicherlich für deine Anforderungen das richtige Dashboard findest.
Exemplarisch zeige ich dir in den folgenden beiden Abschnitten, welche Dashboards ich für die Visualisierung der Metrik-Daten von Cloudflare und Traefik nutze, die wie zuvor beschrieben von Prometheus eingesammelt werden.
Cloudflare
Wie bereits weiter oben erwähnt habe ich die Metriken für cloudflared eingeschaltet. Ein passendes Dashboard für die Visualisierung dieser Daten trägt die ID 17457.

Für Cloudflare gibt es viele weitere Dashboard auf Grafana.com, die allerdings auf den Daten der Cloudflare-API aufsetzen. Das Einsammeln der Metrik-Daten über diesen Weg mit dem Cloudflare Exporter funktioniert allerdings nicht mit dem Cloudflare Free Plan und ist daher hier nicht dargestellt.
Traefik
Für Traefik nutze ich das Dashboard-Template 11462, dass du wie hier beschrieben in deine Grafana-Instanz einbinden kannst, um es deinen eigenen Bedürfnissen anzupassen. Persönlich nutze ich derzeit das Traefik-Dashboard häufiger, um die Aufrufe meiner ins Internet gestellten Dienste (u.a. diese Website) zu tracken.

Quellen
- Metriken von Traefik
https://doc.traefik.io/traefik/observability/metrics/overview/ - Tutorial: Monitor Cloudflare Tunnel with Grafana
https://developers.cloudflare.com/cloudflare-one/tutorials/grafana/ - Native Traefik-Metriken mit Prometheus sammeln von Ralf Geschke
https://www.kuerbis.org/2021/01/native-traefik-metriken-mit-prometheus-sammeln/ - Visualizing Traefik Metrics with Grafana and Prometheus: Step-by-Step von Tomer Klein
https://tomerklein.dev/visualizing-traefik-metrics-with-grafana-and-prometheus-step-by-step-a6a1e9b5fb2c - Grafana Dashboard-Templates
https://grafana.com/grafana/dashboards/ - Grafana Dashboard 17457 für Cloudflare
https://grafana.com/grafana/dashboards/17457-cloudflare-tunnels-cloudflared/ - Grafana Dashboard 11462 für Traefik
https://grafana.com/grafana/dashboards/11462-traefik-2/ - Cloudflare Exporter
https://github.com/lablabs/cloudflare-exporter - Keine Metriken mit Cloudflare Free Plan
https://github.com/lablabs/cloudflare-exporter/issues/93