Mature LLMOps stacks rely on four signals: OTel-style traces, online sampled evals, golden-set CI regression gates, and drift alerts on rolling baselines.
Picture running a busy restaurant kitchen. You need four pieces of feedback. First, a live order ticker so you see every dish in flight (traces). Second, a head chef randomly tasting plates as they go out (online evals). Third, a tasting panel that runs new recipes against a fixed menu before they ship (CI golden set). Fourth, a manager watching weekly trends to spot when one chef's dishes are slowly getting saltier (drift alerts). Without any one of the four, you find out the kitchen has problems from a bad review instead of from your own dashboard.
Concept explanation~2 min read
Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example. Click to expand.
Concept explanation~2 min read
Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example. Click to expand.
Mature LLMOps stacks rely on four data signals that together cover the failure modes of an LLM-powered service: traces, online sampled evaluations, golden-set regression gates in CI, and drift alerts on rolling baselines. Two are continuous (traces, online evals) and two are triggered (CI gate runs on PRs, drift alerts fire on threshold breach). All four feed into the same dashboards and the same closed loop, where production failures grow the eval set and the eval set hardens the gate.
LLM observability and LLMOps are not two separate disciplines; they are the same plumbing seen from two angles. Observability is the data layer that emits the signals; LLMOps is the operational discipline that consumes them to gate deploys, run incidents, and ship improvements. This walkthrough breaks down each signal, what it catches, what it misses, and how the four wire together into a coherent operational loop.
Mental model: four signals, four blind spots if you drop one. Traces give you per-call truth; online evals give you in-flight quality; CI gates give you pre-deploy safety; drift alerts give you trend and cohort safety. Together they close the loop.
Traces and spans: the per-request truth
OpenTelemetry GenAI conventions
The OpenTelemetry GenAI semantic conventions standardize the trace attribute schema across providers and tools. The canonical attributes:
gen_ai.system(provider:openai,anthropic,google, etc.)gen_ai.request.model(model id at the API)gen_ai.request.temperature,gen_ai.request.top_p,gen_ai.request.max_tokensgen_ai.usage.input_tokens,gen_ai.usage.output_tokensgen_ai.response.finish_reasons(stop, length, content_filter, tool_calls)gen_ai.response.id(provider request id)
Auto-instrumentors from Langfuse, LangSmith, Phoenix, Datadog LLM Observability, and Honeycomb emit these attributes for the major SDKs (OpenAI Python, Anthropic Python, Google Generative AI, the Vercel AI SDK). The cross-vendor schema means a trace from one tool can be ingested by another.
Multi-step span trees
Agents and chains produce span trees: an outer chain span with child spans for each LLM call, tool call, retriever call. The tree structure is essential for debugging multi-step failures because the parent span carries the user-facing context while the child spans carry the per-step detail.
Sampling strategy
Full-trace ingestion at production scale gets expensive fast. Two patterns:
- Head sampling. Decide at ingest whether to keep the trace. Saves cost but loses error traces randomly.
- Tail sampling. Buffer at the collector, decide after seeing the full trace. Keeps all error traces, downsamples successful traces.
Most production setups use tail sampling for errors plus head sampling for the success path.
Situations where this technique stops working.
2–4 min · Everything important, quickly.
Real products, models, and research that use this idea.
- OpenTelemetry GenAI semantic conventions are the cross-vendor schema for trace attributes, adopted by Langfuse, LangSmith, Phoenix, Datadog, and Honeycomb.
- Anthropic and OpenAI both document online sampled eval patterns where a judge model scores a percentage of production traffic and writes scores back as metadata.
What an interviewer would ask next. Try answering before peeking at the approach.
QHow would you decide the sample rate for online evals on a high-traffic feature?
Start with the eval budget (judge cost you can absorb). Divide by judge cost per call to get max samples per day. Convert to a sample rate against current QPS. Floor at 1 percent for a usable signal; ceiling where judge cost overtakes generation cost. Bias sampling toward flagged cohorts and known failure prone routes.
Red flags & common mistakes
The phrases that signal junior thinking. Click to expand.
Red flags & common mistakes
The phrases that signal junior thinking. Click to expand.
Treating traces alone as observability. A trace tells you what happened on one call; you need the other three signals to know whether the system is healthy in aggregate.
60 second bullets to scan on the way to the call.
Which four signals does a mature LLMOps stack carry, and what does each catch?
Which OpenTelemetry GenAI attributes belong on every LLM span?
Primary sources. Browse if you want the original framing.
Same topic, related formats. Practice these next.