Explore traces
The Trace Explorer is where you search, filter, and inspect every trace flowing through your AI applications. It's available in Studio at Observability → Traces.
Before you can explore traces, your application needs to be instrumented. See Send traces for setup instructions.
What traces contain
Every trace is a tree of spans. Each span represents one operation in the execution chain.
| Field | Description |
|---|---|
| Trace ID | Unique identifier for the full execution chain |
| Spans | Individual operations: LLM calls, tool calls, workflow steps |
| Duration | Time taken for each span and the total trace |
| Token counts | Input and output tokens per LLM call |
| Status | Success or error, with error messages when applicable |
| Source | Which product generated the trace (SDK, Workflows, Vibe Code, Vibe Work) |
| Tags | Custom tags from SDK usage, plus automatic metadata such as model name |
Click any trace in the list to open the span tree. Expand individual spans to inspect inputs, outputs, latency, and token usage at each step.
Search and filter
Explorer accepts a search expression language: write conditions on trace fields and combine them with AND, OR, and NOT.
Operators
| Category | Operators | Example |
|---|---|---|
| Comparison | =, !=, <, <=, >, >= | duration_ns > 5000000000 |
| Pattern matching | LIKE, ILIKE, NOT LIKE | service_name LIKE '%agent%' |
| Substring | CONTAINS, NOT CONTAINS | service_name CONTAINS 'sdk' |
| Regex | REGEXP, NOT REGEXP | service_name REGEXP '^my-' |
| Range | BETWEEN ... AND ... | duration_ns BETWEEN 1000000 AND 5000000000 |
| List | IN (...), NOT IN (...) | status_code IN ('Error', 'Ok') |
| Null check | EXISTS, NOT EXISTS | error_message EXISTS |
| Boolean | AND, OR, NOT, () | status_code = 'Error' AND duration_ns > 1000000 |
Available fields
| Field | Type | Description |
|---|---|---|
service_name | string | Name of the service that produced the trace |
status_code | string | Trace status: Ok or Error |
duration_ns | number | Total trace duration in nanoseconds |
error_message | string | Error message if the trace failed |
start_time | timestamp | When the trace started (ISO 8601) |
models_used | array | Models called within the trace |
span_attributes['key'] | map value | Any span attribute, using bracket syntax |
Span attribute queries
Use bracket syntax to filter on any OpenTelemetry span attribute:
span_attributes['gen_ai.request.model'] CONTAINS 'mistral-large'
span_attributes['gen_ai.operation.name'] = 'chat'
span_attributes['custom.tag'] EXISTSArray fields
For array fields like models_used:
| Function | Example |
|---|---|
CONTAINS | models_used CONTAINS 'mistral-medium-latest' |
has(field, value) | has(models_used, 'mistral-medium-latest') |
hasany(field, [values]) | hasany(models_used, ['mistral-large-latest', 'mistral-small-latest']) |
hasall(field, [values]) | hasall(models_used, ['mistral-large-latest', 'mistral-small-latest']) |
Common examples
# All failed traces from a specific service
service_name = 'my-agent' AND status_code = 'Error'
# Traces slower than 5 seconds
duration_ns > 5000000000
# Traces using a specific model
span_attributes['gen_ai.request.model'] CONTAINS 'mistral-large'Query traces programmatically
All trace data is accessible via the REST API. The endpoints are documented in the API reference:
- Traces: search traces, get a single trace, list fields and field options.
- Spans: list spans for a trace, query span evaluations.
Access
Reading traces requires an Enterprise organization and one of the following roles:
| Role | Access |
|---|---|
| Org Admin | All traces across all workspaces |
| Workspace Admin | All traces in their workspace |
| Observability Viewer | All traces in their workspace (read-only) |
A Workspace Admin or Org Admin can assign the Observability Viewer role to grant read-only access without admin privileges.