Explore sessions & users

Read, filter, and sort the Sessions and Users views in Observe.

Once your spans carry session.id and user.id, Observe groups them into two views: Sessions, one row per conversation, and Users, one row per end user. This page is how to read, filter, and sort them. To attach the IDs in the first place, see Set session and user IDs; for the concepts, see Sessions and Users.

The Sessions view

Open the project and switch to the Sessions tab. Each row is one conversation.

Observe Sessions tab for the support-agent project listing conversations chat_1001 and chat_1002 with first and last message, duration, total cost, and trace count

One row per conversation. Sort by total cost or total traces to find the longest or most expensive sessions.

The columns roll each conversation up at a glance:

ColumnWhat it shows
Session IdThe shared identifier for the conversation
First MessageThe opening message
Last MessageThe most recent message
DurationHow long the conversation lasted
Total CostCombined cost of all calls in the session
Total TracesHow many requests were part of it

Open a session for its detail view, the traces in order, each with its eval scores and annotations. From there you open any trace for the full span tree.

Session detail with the Session History conversation and a Trace Details panel showing trace ID, evaluations, and metadata

A session opened: the conversation turn by turn, with each turn’s trace, evals, and metadata.

Narrow the list with the filter bar, by session.id, metadata, or any span attribute (see the filter syntax reference), and scope it to a time window with the date-range picker, which recomputes the column metrics for the window. For voice and other replayable sessions, configure session replay to step back through a conversation as it happened.

The Users view

Switch to the Users view. Each row is one end user.

Observe Users view for the support-agent project listing end users cust_42 and cust_77 with User ID, First Active, Last Active, number of traces, and number of sessions columns

One row per user, with trace and session counts rolled up. Sort by trace or session count to find your most active users.

The columns roll each user up:

ColumnWhat it shows
User IDThe user.id value you set in code
First ActiveWhen the user’s first trace arrived
Last ActiveWhen their most recent trace arrived
No. of TracesHow many traces are attributed to the user
No. of SessionsHow many conversations they had

Open a user for their detail view, where cost, evals, and guardrail results break down per session and trace, across a Traces tab and a Sessions tab.

User detail Traces tab listing every trace for user cust_77 with input, output, status, and latency

The Traces tab: every trace attributed to cust_77.

User detail Sessions tab listing every conversation for user cust_77 with first and last message, duration, cost, and trace count

The Sessions tab: every conversation cust_77 had.

Filter and scope the same way as sessions, by user.id, metadata, or any span attribute, and by date range.

Not seeing your groupings?

SymptomCauseFix
Traces not groupingThe call ran outside the using_session / using_user block, so spans never got the IDMake the call inside the block (or a decorated function)
One conversation split across sessionsA different session.id was used on some turnsReuse one stable string for the whole conversation
One person split across usersA different user.id was used on some requestsReuse one stable string for that person
Row exists but no metricsSpans carried the ID but no cost or token attributesConfirm the LLM spans are auto-instrumented

For every way to attach the IDs, see Set session and user IDs.

Was this page helpful?

Questions & Discussion