physar / LLM Production Ops / Observability & Telemetrie

Observability & Telemetrie

Das System sehen: was pro Request erfassen, verteiltes Tracing über die Pipeline, Sampling, Laufzeit-Provenienz und die Metrik-vs-Trace-vs-Log-Entscheidung.

Observability & Telemetrie: das laufende LLM-System sichtbar machen

Einführung · 8 Abschnitte · ~9 Min Lesezeit · Stand

Warum ein LLM-System ohne Telemetrie blind läuft

Ein LLM-Dienst in Produktion ist eine Blackbox mit probabilistischem Kern: keine Exceptions, keine Stacktraces, kein „geht/geht nicht“. Eine Antwort kann formal ein 200 OK sein und trotzdem inhaltlich falsch. Wenn du nicht pro Request festhältst, was hineinging, was herauskam und womit es bedient wurde, kannst du einen Incident weder erkennen noch reproduzieren.

Observability ist die Grundlage der ganzen Betriebsschleife: beobachten → erkennen → ändern → betreiben. Dieses Modul baut den ersten Schritt — die anderen drei bauen darauf auf. Alles Weitere im Track (Drift erkennen, sicher ausrollen, SLOs halten) setzt voraus, dass das System sichtbar ist.

Was pro Request erfassen — Umfang gegen Volumen

Der brauchbare Minimalumfang je Request ist mehr als nur die Antwort. Ohne Input, Versionen und Retrieval-Kontext ist ein Fall nicht reproduzierbar; mit rohem Volltext von allem sprengst du bei hohem Traffic Speicher und Kosten.

Input & OutputWortlaut oder gekürzt/referenziert — nötig, um den Fall nachzuspielen
Token-ZahlenPrompt- und Completion-Tokens — Basis für Kosten und Latenz-Diagnose
Latenzgesamt UND pro Pipeline-Stufe (siehe Tracing)
Kostenpro Request abgeleitet, für Anomalie-Erkennung
Modell- & Prompt-Versionwelcher Snapshot/welche Vorlage bediente den Request (siehe Provenienz)
Retrieval-KontextReferenzen (Doc-IDs, Scores) statt Volltext — spart Volumen, bleibt nachvollziehbar

Verteiltes Tracing: eine Latenzzahl reicht nicht

Eine LLM-Antwort durchläuft meist mehrere Stufen. Eine einzige aggregierte Latenzzahl sagt dir, dass es langsam ist — aber nicht wo.

  1. Retrieval
  2. Rerank
  3. LLM
  4. Postprocess

Mit verteiltem Tracing wird jede Stufe zu einem Span unter einer gemeinsamen Trace-/Korrelations-ID. Der Trace zeigt die Zeit pro Stufe und ihre Verschachtelung (parent/child). So sieht man, dass die p95-Regression aus dem Retrieval kommt — und kann einen einzelnen langsamen Request durch alle Stufen verfolgen.

Sampling: welche Traces vollständig behalten

100 % aller Traces mit vollem Payload zu speichern ist bei hohem Traffic zu teuer und PII-lastig. Sampling entscheidet, welche Traces bleiben — und wann die Entscheidung fällt:

Head-basedEntscheidung am Trace-Start, meist zufällig (z. B. 5 %). Billig, aber outcome-blind — der Ausgang ist noch unbekannt, also fallen die meisten Fehler weg.
Tail-basedEntscheidung nachdem alle Spans da sind. Erlaubt outcome-basierte Regeln, braucht aber einen Puffer für alle laufenden Traces.
Error-/latency-biasedeine Tail-Regel: behalte alle Fehler und langsamen Traces, plus eine kleine Zufallsbasis normaler Traces.

Laufzeit-Provenienz: womit wurde dieser Request bedient?

Ein Nutzer meldet eine schlechte Antwort von vor drei Tagen. Seitdem wurde ein neuer Prompt deployt und der Provider hat sein Modell still aktualisiert. Ohne festgehaltene Provenienz ist der Fall nicht reproduzierbar.

Stemple jeden Request mit der exakten Prompt-Version (Hash/Tag), der Modell-Identität inkl. Snapshot/Version und der aufgelösten Config (Temperatur, Retrieval-Parameter, aktive Feature-Flags/Experiment-Zuweisung). Diese Provenienz reist mit dem Trace.

Feedback-Signale als Telemetrie

Ohne Labels ist Nutzer-Feedback ein wertvolles Qualitätssignal. Explizit ist 👍/👎 — aber freiwilliges Feedback ist spärlich und verzerrt (meist nur sehr verärgerte oder begeisterte Nutzer, oft unter wenigen Prozent Klickrate).

Implizite Signale aus dem Nutzerverhalten ergänzen das Bild und decken die Mehrheit ab:

  • Regenerate / „nochmal“ — die Antwort taugte nicht
  • Copy-to-Clipboard — die Antwort war brauchbar (mit Vorsicht: kann auch Eskalation sein)
  • Folgefrage als Umformulierung — das Ziel wurde verfehlt
  • schneller Abbruch der Sitzung — kein Erfolg

Metrik vs. Trace vs. Log — und die Kardinalitäts-Falle

Nicht jedes Signal gehört in denselben Store. Die richtige Wahl hängt an der Kardinalität — der Anzahl unterschiedlicher Werte:

Metrikaggregierbar, günstig, niedrige Kardinalität (Labels wie Modell, Endpoint, Status). Für Dashboards & Alerts.
Traceein Request über alle Stufen, mit hoher Detailtiefe. Für Ursachensuche eines konkreten Requests.
Logdiskrete Ereignisse mit Kontext. Für nachträgliche Detail-Recherche.

In Zeitreihen-Backends erzeugt jede eindeutige Kombination aus Metrik-Name und Label-Werten eine eigene Zeitreihe. Hochkardinale Labels wie user_id oder prompt_id (tausende Werte) multiplizieren sich mit den übrigen Labels und sprengen Speicher und Ingestion — die „Cardinality Bomb“. Solche per-Request-Details gehören in Traces/Logs, nicht in Metrik-Labels.

Zusammenfassung — gleich entscheidest du

Du kennst jetzt die Achsen, ein LLM-System sichtbar zu machen: Telemetrie-Umfang, Tracing & Spans, Trace-Sampling, Laufzeit-Provenienz, Feedback-Signale und die Metrik-vs-Trace-vs-Log-Entscheidung mit ihrer Kardinalitäts-Falle.

Gelesen ist nicht geprüft: Im Modul entscheidest du die Fälle selbst und siehst danach, wo dein Urteil trägt.

6 Checks starten →

Modul-Aufbau

EINFÜHRUNGObservability & Telemetrie: das laufende LLM-System sichtbar machen~9 Min
ADR-001TELEMETRY-SCOPEsolide
ADR-002TRACING-SPANSsolide
ADR-003TRACE-SAMPLINGsenior
ADR-004RUNTIME-PROVENANCEsolide
ADR-005FEEDBACK-SIGNALeinstieg
ADR-006METRIC-CARDINALITYsenior

Quellen

  1. 01OpenTelemetry — Concepts: Traces, Spans and Context Propagation (offizielle Dokumentation)
  2. 02OpenTelemetry — Semantic Conventions for Generative AI Systems (gen_ai.* Attribute)
  3. 03OpenTelemetry — Sampling: Head-based vs. Tail-based (offizielle Dokumentation)
  4. 04Prometheus — Metric and Label Naming Best Practices (Kardinalität: jede Label-Kombination ist eine neue Zeitreihe)
  5. 05Cindy Sridharan — Distributed Systems Observability (O'Reilly, 2018)
  6. 06Google SRE Book — Monitoring Distributed Systems
  7. 07Joachims et al. — Accurately Interpreting Clickthrough Data as Implicit Feedback (SIGIR 2005)
  8. 08OpenTelemetry — Semantic Conventions for Generative AI Systems (gen_ai.* Attribute pro Request)
  9. 09OpenTelemetry Blog — Tail Sampling: why it is useful, how to do it, what to consider
  10. 10Sculley et al. — Hidden Technical Debt in Machine Learning Systems (NeurIPS 2015; Configuration Debt, Reproduzierbarkeit)
  11. 11OpenTelemetry — Semantic Conventions for Generative AI Systems (Modell-/Request-Attribute auf Spans)
  12. 12Hu, Koren, Volinsky — Collaborative Filtering for Implicit Feedback Datasets (ICDM 2008)
  13. 13Prometheus — Metric and Label Naming Best Practices (jede Label-Kombination ist eine neue Zeitreihe; keine unbeschränkten Label-Werte wie User-IDs)
  14. 14Cindy Sridharan — Distributed Systems Observability (O'Reilly, 2018; Metrics vs. Traces vs. Logs)

Verfasst von Julian Zentgraf