An AI support turn is one exchange: the customer message, the retrieval step, the model call, and the decision to answer, clarify or escalate. Most teams log the prompt and the reply and call it observability. That is not enough. A prompt log tells you what the model saw but not which passages it used, how sure it was, or why it moved to a human, and those are the three questions you ask when a customer says the bot gave wrong information.
Agent observability is broader than infrastructure monitoring. It means seeing what an agent did on a request, why it behaved the way it did, and how well it performed, using token usage, model responses, tool calls, decision paths and output quality mapped to metrics, logs and traces the groundcover guide. Microsoft's framing adds two components to the classic three pillars of metrics, logs and traces: evaluations and governance, because agents are non-deterministic and add autonomy and reasoning that conventional monitoring does not capture the Azure agent observability post.
A single support turn is the right unit of logging. It is small enough to store millions of, and complete enough to answer the three debug questions. Here is the field table to work from.
| Field | Type | Why it matters | Example |
|---|---|---|---|
session_id | string (ULID or UUIDv7) | Ties every turn in one conversation together, and sorts by time if you use a sortable ID | sess_01J8ZK4M2Q |
turn_index | integer | Orders turns inside a session and shows loops or retries | 3 |
timestamp | RFC 3339 UTC | Correlates with agent tool calls and handoff events | 2025-11-04T14:22:07Z |
retrieved | array of objects | Shows which passages grounded the answer and how relevant the retriever judged them | [{"doc_id":"kb_4471","score":0.81}] |
confidence | float plus source label | Supports the answer, clarify or escalate decision and later calibration | {"value":0.42,"source":"posterior"} |
action | enum | The decision the agent made this turn | answer, clarify, escalate |
handoff_reason | enum or null | Explains every transfer to a human in a way you can group and count | policy_authority |
The OpenTelemetry community has been defining shared names for spans, events and attributes in agent systems so telemetry from different frameworks can be queried consistently, which is the same argument for fixing your field names early the OpenTelemetry AI agent observability post. Pick names once, document them, and treat a rename as a schema migration.



