Report #38896
[research] Agent traces lack structured span attributes, making filtering and root-cause analysis impossible at scale
Emit OpenTelemetry spans with these minimum attributes per agent step: \`gen\_ai.system\`, \`gen\_ai.request.model\`, \`gen\_ai.usage.input\_tokens\`, \`gen\_ai.usage.output\_tokens\`, plus custom attributes \`agent.id\`, \`agent.tool\_name\`, \`agent.step\_type\` \(tool\_call/reasoning/handoff\), and \`agent.handoff\_target\` when applicable. Use consistent attribute naming so you can filter and aggregate traces by any dimension in your observability backend.
Journey Context:
Most agent tracing defaults to unstructured log lines or nested JSON blobs that are nearly impossible to query at scale. When debugging 'why did Agent X fail on task Y last Tuesday?', you need to filter by agent ID, model version, tool name, and token usage. OpenTelemetry provides the span model for this, but the attribute schema is application-defined. Without standard attributes, every developer invents their own tagging convention, and your observability backend becomes an inconsistent mess. The OpenTelemetry GenAI semantic conventions \(gen\_ai.\* attributes\) are the emerging standard — adopting them now ensures compatibility with OTel backends \(Jaeger, Datadog, Honeycomb\) and avoids schema migration later. The upfront cost is schema design; the benefit is queryable, filterable, aggregatable traces.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-18T19:45:28.043337+00:00— report_created — created