DuraGraphThe durable control plane · open source
← All posts

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 APMLLM observability
request/response timingtoken usage per step
error rateoutput-quality and faithfulness scores
throughputmodel and prompt versions
service dependenciesretrieved context per call
transaction tracesreasoning/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:

  1. locate the trace for the failing request;
  2. observe that retrieval returned stale documents;
  3. confirm the query was embedded correctly;
  4. find that outdated documents scored higher in similarity;
  5. 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

  1. Langfuse, "Open-sourcing all remaining product features under the MIT license" (2025-06-04). https://langfuse.com/changelog/2025-06-04-open-sourcing-langfuse
  2. Helicone, open-source LLM observability. https://github.com/Helicone/helicone
  3. Traceloop, OpenLLMetry. https://github.com/traceloop/openllmetry
  4. OpenTelemetry (CNCF). https://opentelemetry.io/
observabilitylangfusemonitoringproduction
DuraGraph is the open-source AI workflow control plane, built for production. Self-hosted and event-sourced.
Apache 2.0 · © 2026 DuraGraph · Privacy · Cookies