Observability for LLM Agent Systems: Tracing, Evaluation, and Debugging
Effective operation of LLM agents depends on observability: the ability to trace, evaluate, and debug non-deterministic systems. This article surveys the tooling landscape and the metrics it exposes.
Discrepancies between benchmark performance and production behaviour are a common failure mode for LLM agent systems. Because model outputs are non-deterministic and depend on prompt, retrieved context, and model version, conventional application logs are frequently insufficient to explain incorrect behaviour. This article surveys observability tooling for LLM systems and the categories of signal it exposes.
How LLM observability differs from conventional monitoring
Traditional application performance monitoring (APM) records request latency, error rates, and throughput. Observing LLM systems requires additional signals tied to the semantics of model calls:
| Conventional APM | LLM observability |
|---|---|
| request/response timing | token usage per step |
| error rate | output-quality and faithfulness scores |
| throughput | model and prompt versions |
| service dependencies | retrieved context per call |
| transaction traces | reasoning/tool-call chain visibility |
When an agent produces an incorrect answer, diagnosis typically requires inspecting which prompt was issued, which context was retrieved, and at which step the chain diverged—signals that conventional monitoring does not capture.
Tooling landscape
Langfuse
Langfuse is an open-source LLM engineering platform providing tracing, evaluation, and prompt management. In June 2025 the project open-sourced all remaining commercial product features—including LLM-as-a-judge evaluations—under the MIT license [1].
from langfuse import observe
@observe()
def research_agent(query: str):
context = retrieve_documents(query) # nested trace
return call_llm(query, context)
Helicone
Helicone [2] is an open-source platform that captures LLM traffic via a proxy integration, requiring no changes to application SDK calls:
const openai = new OpenAI({
baseURL: 'https://oai.helicone.ai/v1',
defaultHeaders: { 'Helicone-Auth': `Bearer ${HELICONE_API_KEY}` },
});
The proxy model captures cost, latency, and caching signals centrally at the gateway rather than instrumenting each call site.
OpenLLMetry / OpenTelemetry
OpenLLMetry [3], from Traceloop, extends OpenTelemetry [4]—the CNCF standard for distributed tracing—to LLM calls. Building on OpenTelemetry allows LLM traces to be exported to existing observability backends (Jaeger, Grafana, and others) without vendor lock-in.
from traceloop.sdk import Traceloop
Traceloop.init(app_name="my-agent")
What to measure
Useful signals fall into three broad categories:
graph LR
subgraph "Input"
CQ[Context relevance]
PQ[Prompt version]
end
subgraph "Output"
FA[Faithfulness]
CO[Coherence]
RE[Relevance]
end
subgraph "System"
LA[Latency]
C2[Cost]
ER[Error rate]
end
Concrete alert thresholds (for example, acceptable P95 latency or per-query cost) are necessarily application-specific; they should be derived from a system's own service-level objectives rather than adopted as universal constants.
Trace-driven debugging
The practical value of tracing is that it converts opaque quality failures into locatable defects. A representative diagnostic sequence for an agent returning an outdated answer:
- locate the trace for the failing request;
- observe that retrieval returned stale documents;
- confirm the query was embedded correctly;
- find that outdated documents scored higher in similarity;
- identify the root cause—a silently failed document-update pipeline.
Absent tracing, such a defect is easily misattributed to "model hallucination." With tracing, it is a data-pipeline fix. This illustrates a general point: observability shifts diagnosis from the model to the surrounding system, where most production defects in fact originate.
Integration with the execution layer
A recurring architectural recommendation is that observability integrate with the execution layer, so that a problem identified in a trace can be reproduced by replaying the corresponding execution. Where the execution layer is event-sourced, each recorded event is itself an observable signal, and replay from the event log provides deterministic reproduction for debugging.
Discussion
Observability for LLM systems is converging on a two-layer pattern: LLM-specific tracing and evaluation (Langfuse, Helicone, OpenLLMetry) combined with conventional infrastructure metrics. The tooling is maturing, and the open-sourcing of previously commercial capabilities [1] has lowered the barrier to adoption. The remaining engineering challenge is less about capturing signals than about connecting them to reproducible execution.
References
- Langfuse, "Open-sourcing all remaining product features under the MIT license" (2025-06-04). https://langfuse.com/changelog/2025-06-04-open-sourcing-langfuse
- Helicone, open-source LLM observability. https://github.com/Helicone/helicone
- Traceloop, OpenLLMetry. https://github.com/traceloop/openllmetry
- OpenTelemetry (CNCF). https://opentelemetry.io/