Traces
Distributed Tracing ist das dritte L1-Backend nach Prom und Loki. Wie sie folgt es ADR-014: Edges pushen direkt, Manager fragt nur ab.
Die Datenebene
your apps (OTLP gRPC/HTTP)
│
▼
edge:
otelcol (subprocess plugin)
└─ remote OTLP → tempo:4317
│
├─ trace storage (S3-compatible blob)
│
└─ metrics_generator → traces_spanmetrics_*
│
▼
prometheus:9090otelcol läuft als Plugin unter dem Edge-Agent (gleiches Überwachungsmodell wie promtail — siehe Logs). Der Collector akzeptiert sowohl gRPC (:4317) als auch HTTP (:4318) auf dem Host, batcht und leitet zu Tempos der Cloud über HTTPS weiter.
Apps müssen nichts über Ongrid wissen
Konfigurieren Sie den OTel-Exporter Ihrer Anwendung, um auf http://localhost:4318 (oder das gRPC-Äquivalent) zu zeigen. Der lokale otelcol handhabt Auth + Batching + die Reise zur Cloud. Ongrid zu entfernen bedeutet, eine env var zu entfernen — Ihr Code wird nicht angefasst.
Der Spanmetrics-Generator
Die Tempo-Bereitstellung in der Compose hat metrics_generator aktiviert. Jeder Span-Batch produziert drei abgeleitete Metriken, die zurück in dasselbe Prom emittiert werden:
| Serie | Quelle |
|---|---|
traces_spanmetrics_calls_total | ein Counter pro (Service, Operation, status_code) |
traces_spanmetrics_latency_bucket | Histogramm der Span-Dauer |
traces_spanmetrics_size_bucket | optional, standardmäßig aus |
Das ist der tragende Trick, der Trace-Alarme wie Metrik-Alarme fühlen lässt: der Alarm-Evaluator fragt Prom ab, die Daten leben in Tempo.
Alarmarten
trace_latency
{
"kind": "trace_latency",
"scope_type": "global",
"conditions_json": {
"service": "payments-api",
"operation": "POST /v1/charge",
"quantile": "p95",
"window": "5m",
"threshold_ms": 800
}
}Kompiliert zu:
histogram_quantile(
0.95,
sum by (le) (rate(traces_spanmetrics_latency_bucket{
service_name="payments-api", span_name="POST /v1/charge"
}[5m]))
) * 1000 > 800operation ist optional — weglassen für Dienst-weite Latenz. Siehe compileTraceLatencyRule.
Unterstützte Quantile: p50 / p95 (Default) / p99. Die String-Form existiert, damit der UI-Form-Picker knapp bleibt; der Compiler mappt auf den Float, den histogram_quantile will.
trace_error_rate
{
"kind": "trace_error_rate",
"scope_type": "global",
"conditions_json": {
"service": "payments-api",
"window": "5m",
"operator": ">",
"threshold_pct": 1.0
}
}Kompiliert zu:
100 * (
sum by (service_name) (rate(traces_spanmetrics_calls_total{
service_name="payments-api", status_code="STATUS_CODE_ERROR"
}[5m]))
/ sum by (service_name) (rate(traces_spanmetrics_calls_total{
service_name="payments-api"
}[5m]))
) > 1.0Das STATUS_CODE_ERROR-Literal ist das, was der Spanmetrics-Generator emittiert; alternative Span-Status-Konventionen brauchen ihre eigene Art.
Tools
query_traceql
Direktes Passthrough zu Tempos TraceQL-Endpunkt (query_traceql_basetool.go). Wird von der Investigator-Persona verwendet, wenn der Operator nach spezifischen Trace-IDs fragt — z. B. „find a slow trace for payments-api in the last 30 minutes."
{ resource.service.name="payments-api" } | duration > 800msDer zugrundeliegende Client ist internal/pkg/tracequery; absichtlich backend-entkoppelter Paketname — Jaeger- / Zipkin-Clients können später ohne Umbenennung der Oberfläche eingefügt werden.
correlate_incident
Das Composite-Tool, mit dem die Investigator-Persona startet. Zieht Prom- + Loki- + Tempo-Signale rund um das Feuerfenster des Incidents in einem einzigen Fan-out-Aufruf. Reduziert 4-5 sequentielle Tool-Aufrufe auf einen — wichtig, wenn das Per-Investigation-Budget 10 Tool-Aufrufe beträgt.
Siehe correlate_incident_basetool.go.
Siehe auch
- Alarme — die Regelarten.
- Monitoring — das Prom-Backend, das die Trace-Alarme abfragen.
- Topologie — Service-to-Service-Edges, die Tempos
metrics_generatorautomatisch ableitet. - Telemetrie-Datenebene — ADR-014 vollständig.