Skip to content

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

text
your apps (OTLP gRPC/HTTP)


edge:
  otelcol (subprocess plugin)
    └─ remote OTLP → tempo:4317

                          ├─ trace storage (S3-compatible blob)

                          └─ metrics_generator → traces_spanmetrics_*


                                                 prometheus:9090

otelcol 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:

SerieQuelle
traces_spanmetrics_calls_totalein Counter pro (Service, Operation, status_code)
traces_spanmetrics_latency_bucketHistogramm der Span-Dauer
traces_spanmetrics_size_bucketoptional, 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

json
{
  "kind": "trace_latency",
  "scope_type": "global",
  "conditions_json": {
    "service": "payments-api",
    "operation": "POST /v1/charge",
    "quantile": "p95",
    "window": "5m",
    "threshold_ms": 800
  }
}

Kompiliert zu:

promql
histogram_quantile(
  0.95,
  sum by (le) (rate(traces_spanmetrics_latency_bucket{
    service_name="payments-api", span_name="POST /v1/charge"
  }[5m]))
) * 1000 > 800

operation 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

json
{
  "kind": "trace_error_rate",
  "scope_type": "global",
  "conditions_json": {
    "service": "payments-api",
    "window": "5m",
    "operator": ">",
    "threshold_pct": 1.0
  }
}

Kompiliert zu:

promql
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.0

Das 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."

text
{ resource.service.name="payments-api" } | duration > 800ms

Der 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