Traces
Distributed Tracing verfolgt eine Anfrage über mehrere Services hinweg und ermöglicht die Analyse von Latenzen und Fehlerquellen.
Konzept
HTTP Request
│
▼ Trace (trace_id)
[dice-server] ──Span──▶ [postgres]
│
└──Span──▶ [redis]
Jeder Span enthält: Service-Name, Dauer, Status, Attribute.
OTEL Traces mit Python (rolldice)
pip install opentelemetry-sdk opentelemetry-exporter-otlp
opentelemetry-bootstrap -a install
export OTEL_SERVICE_NAME="dice-server"
export OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:4318"
export OTEL_EXPORTER_OTLP_PROTOCOL="http/protobuf"
opentelemetry-instrument flask run -p 8080 -h 0.0.0.0
Alloy – Traces an Grafana Tempo weiterleiten
In config.alloy:
otelcol.receiver.otlp "default" {
grpc { endpoint = "0.0.0.0:4317" }
http { endpoint = "0.0.0.0:4318" }
output {
traces = [otelcol.exporter.otlp.tempo.input]
}
}
otelcol.exporter.otlp "tempo" {
client {
endpoint = env("TEMPO_ENDPOINT")
auth = otelcol.auth.basic.grafana_cloud.handler
}
}
otelcol.auth.basic "grafana_cloud" {
username = env("TEMPO_USERNAME")
password = env("TEMPO_PASSWORD")
}
Traces in Grafana Cloud abfragen
Grafana → Explore → Tempo:
service.name = "dice-server"
duration > 100ms
status = error
Trace-Waterfall zeigt alle Spans einer Anfrage mit Zeitstempeln und Attributen.
TraceQL
{ span.http.route = "/rolldice" && duration > 50ms }
{ .service.name = "dice-server" } | rate()