OpenTelemetry GenAI semantic conventions — canonical span tree
span tree with GenAI attributes
invoke_agent research_bot [INTERNAL]
gen_ai.agent.name, gen_ai.provider.name, gen_ai.request.model
chat gen_ai.operation.name=chat
gen_ai.response.model if it differs from request
tool_call search_tool gen_ai.tool.name, gen_ai.data_source.id
chat (continuation turn)
chat (final answer)
content capture — opt-in only
gen_ai.input.messages.reference_id
gen_ai.output.messages.reference_id
gen_ai.system_instructions (if opt-in)
external store: S3, SQLite, log pipeline
stays out of span body; PII-safe
span kinds + technology specific
CLIENT: remote agent services (Assistants, Bedrock)
INTERNAL: in-process (LangChain, CrewAI, local ReAct)
per-provider conventions: Anthropic, Azure AI, Bedrock, OpenAI
Datadog v1.37+ maps natively
OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental
spec: opentelemetry.io/docs/specs/semconv/gen-ai/ — most conventions still experimental (Mar 2026).