Was ist Distributed Tracing?
Problem ohne Tracing:
Request → [Service A] → [Service B] → [DB] → [Service C]
50ms? 200ms? 1ms? 30ms?
Wo ist der Bottleneck?? Unbekannt!
Mit Tracing:
Trace ID: abc123
Span: frontend (50ms)
Span: api-service (200ms) ← HIER ist das Problem!
Span: database-query (1ms)
Span: notification-service (30ms)
Jaeger installieren
# docker-compose.yml
services:
jaeger:
image: jaegertracing/all-in-one:latest
container_name: jaeger
environment:
COLLECTOR_OTLP_ENABLED: "true"
ports:
- "16686:16686" # Web-UI
- "4317:4317" # OTLP gRPC
- "4318:4318" # OTLP HTTP
- "6831:6831/udp" # Jaeger Agent UDP
restart: unless-stopped
Node.js Anwendung instrumentieren
npm install @opentelemetry/api @opentelemetry/sdk-node @opentelemetry/auto-instrumentations-node @opentelemetry/exporter-trace-otlp-http
// tracing.js (vor app.js laden!)
const { NodeSDK } = require('@opentelemetry/sdk-node');
const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-http');
const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node');
const sdk = new NodeSDK({
traceExporter: new OTLPTraceExporter({
url: 'http://jaeger:4318/v1/traces',
}),
instrumentations: [getNodeAutoInstrumentations()],
serviceName: 'mein-service',
});
sdk.start();
# Start mit Tracing
node -r ./tracing.js app.js
Python Flask instrumentieren
pip install opentelemetry-distro opentelemetry-exporter-otlp
opentelemetry-bootstrap --action=install
# Automatische Instrumentierung
OTEL_SERVICE_NAME=flask-api OTEL_EXPORTER_OTLP_ENDPOINT=http://jaeger:4318 opentelemetry-instrument flask run
Jaeger Web-UI nutzen
http://jaeger-server:16686
1. Service auswählen (Dropdown)
2. Operation (alle oder spezifische Route)
3. Zeitraum: letzte 1h
4. Min Duration: >500ms (langsame Requests)
5. "Find Traces" klicken
Trace-Detail:
→ Gantt-Chart aller Spans
→ Klick auf Span: Tags, Logs, Fehler
→ "Compare Traces": zwei Anfragen vergleichen
Drei Säulen der Observability
Metrics (Prometheus): WANN und WIE OFT gibt es ein Problem?
Logs (Loki/Graylog): WAS ist passiert?
Traces (Jaeger): WARUM ist es passiert?
Grafana Tempo:
Alternative zu Jaeger, besser Grafana-integriert
→ Traces direkt aus Grafana-Dashboards
FAQ
Ab wann lohnt sich Distributed Tracing?
Bei mehr als 2-3 miteinander kommunizierenden Services. Monolithische Anwendungen profitieren von Profiling statt Tracing.
Fazit
OpenTelemetry + Jaeger ist die moderne Standard-Lösung für Distributed Tracing – essentiell wenn Microservices in Kubernetes-Umgebungen Latenzprobleme haben.
Observability und Tracing für KMU in Heidelberg, Mannheim und der Rhein-Neckar-Region. Anfragen.