Production tracing (OTLP export)

August 17, 2026 · View on GitHub

Quick demo (no signup required)

Spin up Jaeger locally — one Docker command, full trace UI in the browser:

# Start Jaeger (OTLP on 4318, UI on 16686)
docker run --rm -d --name jaeger \
  -p 16686:16686 -p 4318:4318 \
  jaegertracing/all-in-one:latest

# Export your session
agent-strace export --format otlp-genai --endpoint http://localhost:4318

# Open the UI
open http://localhost:16686

Select service agent-trace in the Jaeger UI to see the full trace.

Export sessions as OpenTelemetry spans to your existing observability stack. Sessions become traces. Tool calls become spans with duration and inputs. Errors get exception events. No new dependencies.


OTel GenAI semantic conventions

Use --format otlp-genai to export with OTel GenAI semantic conventions. This produces AI-native spans that populate token usage charts, cost views, and LLM dashboards automatically.

agent-strace export <session-id> --format otlp-genai \
  --endpoint http://localhost:4318
Aspect--format otlp--format otlp-genai
LLM callsEvents on root spangen_ai.client.operation child spans
Tool callstool/<name> spansgen_ai.tool.call/<name> spans
Root spanagent.name attributegen_ai.agent.id + gen_ai.agent.name
ErrorsCustom error spanOTel exception event format

--format otlp is unchanged for backwards compatibility. See ADR-0011 for design rationale.


Per-backend setup

Datadog

# Via the Datadog Agent's OTLP receiver (port 4318)
agent-strace export <session-id> --format otlp \
  --endpoint http://localhost:4318

# Via Datadog's OTLP intake directly
agent-strace export <session-id> --format otlp \
  --endpoint https://http-intake.logs.datadoghq.com:443 \
  --header "DD-API-KEY: $DD_API_KEY"

Honeycomb

agent-strace export <session-id> --format otlp \
  --endpoint https://api.honeycomb.io \
  --header "x-honeycomb-team: $HONEYCOMB_API_KEY" \
  --service-name my-agent

Grafana Tempo / Jaeger

# Local collector
agent-strace export <session-id> --format otlp \
  --endpoint http://localhost:4318

New Relic

agent-strace export <session-id> --format otlp \
  --endpoint https://otlp.nr-data.net \
  --header "api-key: $NEW_RELIC_LICENSE_KEY"

Splunk

agent-strace export <session-id> --format otlp \
  --endpoint https://ingest.<realm>.signalfx.com \
  --header "X-SF-Token: $SPLUNK_ACCESS_TOKEN"

Langfuse

Sessions appear as Traces, tool calls as Spans, LLM calls as Generations, and eval scores as Langfuse Scores.

export LANGFUSE_PUBLIC_KEY=pk-lf-...
export LANGFUSE_SECRET_KEY=sk-lf-...

# Export latest session with eval scores
agent-strace export --scores --backend langfuse

# Export last 7 days
agent-strace export --since 7d --scores --backend langfuse

# Self-hosted Langfuse
agent-strace export --scores --backend langfuse \
  --langfuse-host https://langfuse.your-domain.com

Live OTLP streaming

Stream events to an OTLP endpoint in real-time as the session runs, rather than exporting after it ends. Use watch --stream-to to enable:

agent-strace watch --stream-to http://localhost:4318/v1/traces

Each tool call is flushed as a span immediately on completion. The session root span is closed when the session ends or the watchdog kills it.

Configure batch size and flush interval:

agent-strace watch \
  --stream-to https://api.honeycomb.io/v1/traces \
  --stream-batch-size 10 \
  --stream-flush-interval 5
FlagDefaultDescription
--stream-to URLnoneOTLP HTTP endpoint to stream to
--stream-batch-size N10Flush after N events
--stream-flush-interval S5Flush every S seconds regardless of batch size

Baseline anomaly detection

Build a statistical baseline from completed sessions that started recently and alert when a new session deviates:

# Build a baseline from completed sessions that started in the last 30 days
agent-strace baseline update --since 30

# Check a session against the baseline
agent-strace baseline check <session-id>

# Show baseline statistics
agent-strace baseline show

Metrics tracked: cost, tool call count, duration, error rate, and LLM request count. Each metric gets a mean and sample standard deviation. A session is flagged when any comparable metric exceeds --sigma standard deviations from the mean (default: 2.0). At least three baseline samples are required before a metric is compared.

agent-strace baseline check <session-id> --sigma 2.5

Use the same custom profile path when updating, checking, and displaying a baseline:

agent-strace baseline update --since 14 --output .agent-traces/ci-baseline.json
agent-strace baseline check <session-id> --baseline .agent-traces/ci-baseline.json
agent-strace baseline show --baseline .agent-traces/ci-baseline.json

Use baseline check as a CI gate — it exits 1 when the session is anomalous:

agent-strace baseline check "$SESSION_ID"

EU AI Act Audit Packages

agent-strace export --format eu-ai-act creates a local JSON package for Article 12 logging evidence and Article 13 transparency documentation:

agent-strace export <session-id> --format eu-ai-act --output compliance-report.json

agent-strace export --all --since 2026-01-01 --until 2026-03-31 \
  --format eu-ai-act --output Q1-2026-audit.json

The export includes event summaries, data categories processed, tools and models observed, human oversight points, and hash-chain integrity metadata. Verify the exported chain links with:

agent-strace verify --from-export compliance-report.json

Before exporting a store for review, run:

agent-strace audit-readiness

Behavioral metrics

Export per-session behavioral metrics as OTLP gauge metrics:

export OTEL_EXPORTER_OTLP_ENDPOINT=https://api.honeycomb.io

agent-strace export --metrics --backend otlp --since 30d
MetricDescription
agent_strace.session.cost_usdEstimated cost per session
agent_strace.session.error_rateErrors / tool calls
agent_strace.session.retry_rateConsecutive same-tool retries / tool calls
agent_strace.session.blast_radiusDistinct files written
agent_strace.session.duration_sWall-clock session duration
agent_strace.eval.scoreJudge score per session

How sessions map to OpenTelemetry

agent-traceOpenTelemetry
sessiontrace
tool_call + tool_resultspan (with duration)
errorspan with error status + exception event
user_promptevent on root span
assistant_responseevent on root span
session_idtrace ID
event_idspan ID
parent_idparent span ID

Inspect the OTLP payload

agent-strace export <session-id> --format otlp > trace.json