Users
Following one customer across every conversation they've had.
A user is a person across conversations
You will often want to know who a conversation belonged to. A user is that person, the end user behind the requests. Setting a user.id on your spans rolls every trace and session they generate up under one row: where a session is one conversation, a user is all of their conversations put together, so you can answer “what happened to this customer?” without writing a query. The name is OpenTelemetry’s own, and it flows to every span in a block the same way the trace ID does.
flowchart TD accTitle: A user contains every session and trace they generate accDescr: One user has two sessions and a standalone trace. Each session contains its own traces. U["User (user.id)"] --> S1["Session"] U --> S2["Session"] U --> T0["Trace (no session)"] S1 --> T1["Trace"] S1 --> T2["Trace"] S2 --> T3["Trace"]
Say one customer is user.id="cust_42". Every request they make carries that ID, whether it is part of a support chat or a one-off question, so Observe gathers all of it under a single row: their sessions and traces, their total cost and token use, when they first showed up and when they were last active, and how their answers scored. Open the row and you have that customer’s whole history in one place.
When to use
Reach for a user when the unit is a person, not a chat: a customer reports a bug and you want their entire history, a cost spike traces back to one heavy customer, you are tracking who stuck around and who dropped off (first seen, last seen, session counts), or quality is slipping for a segment and you want eval pass-rate per user.
When the grain is wrong, reach elsewhere:
Note
user.id is a grouping key, not an auth identity, and Observe never verifies it. It is exported in span data, so use a stable but non-sensitive value like a hashed customer ID, never a raw email or phone number.
Why it matters
A single trace or session shows one moment; many of the questions that matter are about the person across all their moments. Who is driving cost, who churned after a bad week, whether one segment gets worse answers than another, none of it surfaces until every request a person made rolls up together. The user is that rollup: the customer, not the request.
Keep exploring
Questions & Discussion