Zum Inhalt springen

Traefik

Der Reverse-Proxy: durch einen Konfigurationsfehler deaktivierte Router, Backend-Server, die ihren Health-Check nicht bestehen, Zertifikate, die ein Resolver nie erhalten hat oder die nicht erneuert werden, und der Anteil der 5xx-Antworten.

DumbMonit liest die API von Traefik, die nur liest: /api/overview, /api/http/routers, /api/http/services, /api/certificates (von Traefik 3.7 bereitgestellt) und /api/version. Werden die Prometheus-Metriken von Traefik auf demselben Port ausgeliefert, ergänzt /metrics die Anfragerate und den Anteil der 5xx-Antworten. Keine Methode der API ändert etwas, und DumbMonit sendet keine.

Die Fehler, auf die es ankommt, sind die stillen. Ein Router, dessen Service oder Middleware nicht existiert oder dessen Regel sich nicht parsen lässt, ist deaktiviert: Seine Websites antworten 404, und Traefik sagt das nur in seinem Log. Ein Service, dessen Server alle ihren Health-Check nicht bestehen, antwortet 503 „no available server“. Ein Router, der von einem ACME-Resolver ein Zertifikat verlangt, das dieser nicht erhalten kann, bekommt das selbstsignierte Standardzertifikat von Traefik, das Browser ablehnen.

Alle Metriken haben das Präfix dumbmonit_traefik_. Summen sind Zähler: Diagramme und Regeln wandeln sie in Raten um.

MetrikWasLabels
version_infoWert 1version
routers, routers_errors, routers_warningsRouter aller Protokolle und solche mit Fehler oder Warnung
services, services_errors, middlewares_errorsdasselbe für Services und Middlewares
router_statuspro HTTP-Router: 0 aktiviert, 1 Warnung, 2 deaktiviertrouter, provider
router_error_infoWert 1, für einen nicht aktivierten Router: der erste Fehler von Traefikrouter, error
service_error_infoWert 1, für einen nicht aktivierten Service: der erste Fehler von Traefikservice, error
service_statuspro Service: 0 aktiviert, 1 Warnung, 2 deaktiviertservice
service_servers, service_servers_upServer eines lastverteilten Services und solche, die ihren Health-Check bestehenservice
server_up1, wenn der Server seinen Health-Check besteht (oder keinen hat)service, server
resolver_routersRouter, die von einem Zertifikat-Resolver ihr Zertifikat verlangenresolver
resolver_routers_uncoveredsolche, deren Hostnamen noch kein von Traefik gehaltenes Zertifikat abdeckt (braucht /api/certificates)resolver
certificates, cert_expiry_daysvon Traefik gehaltene Zertifikate und die verbleibenden Tage bis zum Ablauf jedes einzelnencert
requests_total, requests_5xx_totalmit Metriken: Anfragen aller Entry Points und solche, die mit 5xx beantwortet wurden
router_requests_total, router_requests_5xx_totalmit Metriken und Router-Labels: dasselbe pro Routerrouter
config_reloads_totalmit Metriken: Neuladungen der Konfiguration

Die eigenen Router und Services von Traefik (@internal) bleiben außen vor. Router, Services und Server werden bis zu je 500 einzeln beschrieben; die Summen decken immer alles ab.

Ein Router, Service oder Server, den Traefik nicht mehr auflistet (der Docker-Provider entfernt die Router eines gestoppten Containers sofort), wird einfach nicht mehr gemeldet: DumbMonit behält dafür keinen Wert „gesund“, und seine Serien enden. Diagramme und Regeln zeigen seinen letzten Wert möglicherweise noch einige Minuten, bis der Metrikspeicher die veraltete Serie verwirft. Traefik antwortet für eine solche Route mit 404, was keine Regel meldet: Nur ein aufgelisteter und deaktivierter Router tut das.

Die zutreffenden integrierten Regeln: Traefik-Router deaktiviert, Traefik-Backend-Server ausgefallen, Traefik-Service ohne Server, Traefik-Zertifikat nicht erhalten, Proxy-Zertifikat nicht erneuert, Reverse-Proxy antwortet mit 5xx, außerdem Monitor nicht erreichbar.

Das Panel über den Diagrammen liest, was die Prüfung gespeichert hat; das Öffnen der Seite fragt Traefik nie ab. Es nennt in einem Satz, was nicht stimmt (deaktivierte Router und der Grund von Traefik, Services ohne Server, Resolver, die nichts erhalten haben, bald ablaufende Zertifikate, ein hoher Anteil an 5xx), dann die Router, Services, Anfragerate und den 5xx-Anteil, dann die aktiven Server pro Service, die Zertifikate, das am frühesten ablaufende zuerst, und die 5xx-Antworten pro Router über 24 Stunden.

  1. Die API von Traefik liest nur: Router, Services und Zertifikate, nie eine Änderung. Aktivieren Sie sie zusammen mit den Prometheus-Metriken, die die Anfragerate und den Anteil der 5xx-Antworten liefern: Fügen Sie diese beiden Argumente zum Befehl von Traefik hinzu (oder dieselben Schlüssel zu seiner statischen Konfiguration) und starten Sie es neu. Beides wird dann auf dem Entry Point traefik, Port 8080, ausgeliefert.

    --api.insecure=true
    --metrics.prometheus=true
  2. Port 8080 antwortet ohne Passwort: Veröffentlichen Sie ihn nur auf einer Adresse, die der DumbMonit-Host erreicht, filtern Sie ihn, sodass sonst niemand ihn erreicht, und prüfen Sie, dass er antwortet.

    curl -s http://traefik.lan:8080/api/overview
  3. Um stattdessen ein Passwort zu verlangen, leiten Sie /api und /metrics über einen eigenen Entry Point mit einer basicAuth-Middleware, wie die Dokumentation zeigt, und wählen Sie unten basicAuth-Benutzer. Erstellen Sie den Benutzer dumbmonit mit htpasswd.

    htpasswd -nbB dumbmonit 'a-long-password'
  4. Geben Sie in DumbMonit den Traefik-Host ein, zum Beispiel „traefik.lan“, mit dem Port dieses Entry Points, falls er nicht 8080 ist. Haken Sie Metriken lesen ab, wenn /metrics anderswo ausgeliefert wird.

Statt --api.insecure=true geben Sie der API und den Metriken einen eigenen Entry Point und setzen eine basicAuth-Middleware vor beide. In der statischen Konfiguration:

entryPoints:
monitor:
address: ":8082"
api: {}
metrics:
prometheus:
manualRouting: true
addRoutersLabels: true

und in der dynamischen Konfiguration (File Provider gezeigt; Docker-Labels funktionieren genauso), mit der von htpasswd ausgegebenen Zeile:

http:
middlewares:
dumbmonit-auth:
basicAuth:
users:
- "dumbmonit:$2y$05$…"
routers:
monitor-api:
entryPoints: [monitor]
rule: "PathPrefix(`/api`)"
service: api@internal
middlewares: [dumbmonit-auth]
monitor-metrics:
entryPoints: [monitor]
rule: "Path(`/metrics`)"
service: prometheus@internal
middlewares: [dumbmonit-auth]

Geben Sie dann traefik.lan:8082 in DumbMonit mit dem Benutzer dumbmonit ein. addRoutersLabels liefert die 5xx-Antworten pro Router; ohne dieses werden nur die Summen pro Entry Point gezählt.

ZugangsdatenFelder
Kein PasswortNichts: Der API-Port wird so gefiltert, dass nur DumbMonit ihn erreicht.
basicAuth-BenutzerBenutzer und Passwort der basicAuth-Middleware vor /api und /metrics.

Adresse: ein Hostname oder eine IP (traefik.lan), host:port oder eine vollständige URL. Optionen: Protokoll (standardmäßig HTTP), API-Port (8080), Metriken lesen (an), Zertifikatsprüfung und Anfrage-Timeout (10 s).

Ein Service ohne Health-Check meldet jeden Server als aktiv: Traefik markiert einen Server nur dann als ausgefallen, wenn ein healthCheck fehlschlägt. Gewichtete und spiegelnde Services haben keine eigenen Server und werden nicht gezählt.