How do you get meaningful observability for agentic AI systems, not just logs?
I'm trying to figure out real observability for multi-agent systems, not just single models. Flat logs don't cut it once agents are calling tools, spawning sub-agents, and hitting real systems with side effects.
I'm tracking agent decisions (what it was given, what it picked), tool and API calls (params, latency, errors), and end-to-end traces across agents. There's also a shared session where multiple agents and humans collaborate, so I tag spans with both a trace ID and a session ID.
Metrics like latency and call volume are free but don't tell you why an agent made a decision or which step caused a failure. That needs parent-child span structure plus some captured reasoning. Reasoning capture is messier than it sounds though. With reasoning models you usually get a summarized trace, not the real chain of thought, and what's exposed varies by provider.
Outcome labeling is the part people skip. Volume and latency show up automatically. "Did this trace actually succeed" doesn't, someone has to apply that label, whether it's rules, human review, or LLM-as-judge. Judges have their own issues: inconsistent across runs, costly at scale, and prone to missing the same failure class the agent itself missed.
Biggest open question for me is where instrumentation should live. Network-level interception is framework-agnostic but you lose semantics (was that a plan step or a tool call?). SDK-level gets you semantics but means per-framework work and breaks across mixed runtimes.
Anyone running this across multiple run times in prod. How are you splitting the instrumentation layer, and what's your sampling approach once trace volume gets expensive?