Infrastruktur
Jaeger
Jaeger ist ein Open-Source-Distributed-Tracing-System, das ursprünglich 2015 von Uber Technologies entwickelt und 2017 als CNCF-Projekt der Cloud Native Computing Foundation gespendet wurde. Es steht unter Apache-2.0-Lizenz, implementierte zunächst den OpenTracing-Standard und ist heute OpenTelemetry-kompatibel (OTLP). Jaeger verfolgt, wie ein eingehender Request durch verschiedene Dienste und Komponenten fließt, und misst die Dauer jedes einzelnen Schritts. Jeder Request erhält eine eindeutige Trace-ID,…
Was ist Jaeger?
Jaeger ist ein Open-Source-Distributed-Tracing-System, das ursprünglich von Uber Technologies entwickelt und 2017 als CNCF-Projekt (Cloud Native Computing Foundation) gespendet wurde. Es implementiert den OpenTracing-Standard und ist heute OpenTelemetry-kompatibel. Jaeger verfolgt, wie ein eingehender Request durch verschiedene Dienste und Komponenten fließt — und misst, wie lange jeder einzelne Schritt dauert.
Für Webseitenbetreiber mit mehrschichtigen Stacks (Nginx → PHP-FPM → WordPress → MySQL + Redis) beantwortet Jaeger Fragen, die mit Logs und Metriken allein nicht zu beantworten sind: Welcher Dienst ist schuld, wenn ein Request 800ms dauert statt 100ms? Ist es die Datenbankabfrage, der Redis-Cache-Miss oder der PHP-Code?
Wie funktioniert Distributed Tracing?
Jeder Request bekommt eine eindeutige Trace-ID. Wenn der Request durch verschiedene Dienste fließt, propagiert jeder Dienst diese ID in ausgehenden HTTP-Requests oder Datenbankabfragen. Jeder Schritt erzeugt einen Span — einen Zeitstempel-geklammerten Abschnitt mit Start, Ende und Metadaten.
Das Ergebnis ist ein Trace: ein hierarchischer Baum von Spans, der den gesamten Request-Pfad visualisiert:
Trace: GET /wp-json/wp/v2/posts (total: 820ms)
├── nginx reverse proxy (2ms)
├── PHP-FPM worker (815ms)
│ ├── WordPress bootstrap (45ms)
│ ├── MySQL query: SELECT * FROM wp_posts (380ms) ← Bottleneck!
│ ├── Redis get: post_cache_123 (1ms)
│ └── Template rendering (389ms)
└── Response compression (3ms) In diesem Beispiel zeigt Jaeger, dass die MySQL-Abfrage 380ms dauert — obwohl der gesamte Request 820ms braucht. Ohne Tracing würde man nur “langsam” sehen, nicht wo.
Jaeger für WordPress-Betreiber
Für WordPress ist die Einbindung von OpenTelemetry (das Jaeger als Backend nutzen kann) über PHP-Libraries möglich:
OpenTelemetry PHP SDK:
use OpenTelemetry\SDK\Trace\TracerProvider;
use OpenTelemetry\Contrib\Otlp\OtlpHttpTransport;
$transport = new OtlpHttpTransport('http://jaeger:4318/v1/traces');
$tracerProvider = new TracerProvider(/* ... exporters ... */); Ein Plugin oder mu-plugin kann so automatisch alle WordPress-Hooks, MySQL-Abfragen und Cache-Zugriffe instrumentieren und als Spans an Jaeger schicken.
Grafana Tempo als Alternative: Grafana Tempo ist ein weiteres Open-Source-Tracing-Backend, das tiefer in den Grafana-Stack integriert ist und häufig als modernere Alternative zu Jaeger eingesetzt wird. Beide sind OpenTelemetry-kompatibel.
Was passiert ohne Tracing?
Ohne Distributed Tracing bleibt bei Latenzen unklar, welcher Dienst die Ursache ist. Prometheus-Metriken zeigen, dass MySQL langsam ist — aber nicht welche Query. Logs zeigen Fehler — aber nicht den Request-Kontext. Tracing schließt diese Lücke und macht Optimierungen zielgerichtet statt spekulativ.
Häufige Fragen
Jaeger vs. Zipkin — was ist der Unterschied? Beide sind Distributed-Tracing-Systeme. Zipkin (von Twitter, 2012) ist älter und einfacher. Jaeger (von Uber, 2015) ist umfangreicher, hat eine bessere UI und ist OpenTelemetry-nativer. Für neue Setups ist Jaeger oder Grafana Tempo die modernere Wahl.
Wie viel Overhead erzeugt Tracing? Bei 1–10 % Sampling-Rate ist der Overhead für die Applikation typischerweise unter 1 %. Die Instrumentierung selbst erzeugt messbare CPU-Zeit, aber in der Praxis selten über 2–5 % bei normalen Web-Workloads.
Verwandte Begriffe
Jaeger in drei Sätzen
Jaeger ist ein Open-Source-Distributed-Tracing-System, das ursprünglich 2015 von Uber Technologies entwickelt und 2017 als CNCF-Projekt der Cloud Native Computing Foundation gespendet wurde. Es steht unter Apache-2.0-Lizenz, implementierte zunächst den OpenTracing-Standard und ist heute OpenTelemetry-kompatibel (OTLP). Jaeger verfolgt, wie ein eingehender Request durch verschiedene Dienste und Komponenten fließt, und misst die Dauer jedes einzelnen Schritts. Jeder Request erhält eine eindeutige Trace-ID,…