Telemetry query
/api/v1/organizations/{org_id}/telemetry/tracesAuthorization
HTTPBearer In: header
Path Parameters
uuidQuery Parameters
Repeatable — values OR together (e.g. two occurrences match either service). A single occurrence is unchanged from before this field was repeatable (issue #331).
Same shape as 'service_name', negated: excludes rows matching any of these values. If a value appears in both 'service_name' and this field, it is excluded — exclude always wins on conflict.
Repeatable (issue #331) — same semantics as 'service_name'.
Same shape as 'status_code', negated — same semantics as 'service_name_exclude'.
Language q is written in (#177). lucene is the default and what every request omitting this field gets. sql reads q as a bare ClickHouse predicate, AND-joined under the tenant clamp so it can only narrow — see docs/v2/architecture/TELEMETRY_INGESTION_ARCHITECTURE.md §9.3.1.
"lucene"Value in
- "lucene"
- "sql"
Repeatable, index-aligned with 'attribute_value' (issue #331): the i-th key pairs with the i-th value. Values sharing a key OR together; distinct keys AND together. A single (key, value) pair is unchanged from before this field was repeatable.
Paired with 'attribute_key' — see its description.
Same shape as 'attribute_key', negated — pairs with 'attribute_value_exclude'. A key excluded here is excluded even if the same key/value also appears in 'attribute_key'/'attribute_value'.
Paired with 'attribute_key_exclude' — see its description.
Narrow to one Event Patterns cluster (#179). Pass a pattern_hash from the patterns endpoint back verbatim — it is a UInt64 carried as a string because the larger values exceed JavaScript's Number.MAX_SAFE_INTEGER. The hash is derived from the message, not stored, so a value produced before a change to the mask list will match nothing; see §9.11.
1 <= value <= 10001000 <= value0Comma-separated column projection (§9.9, issue #356), e.g. 'service_name,span_name'. 'row_id' is always included. Absent returns the full row, unchanged from before this parameter existed.
' asc|desc' (§9.9, issue #356). Only 'start_time' is sortable — the keyset cursor is typed against it. Absent means 'start_time desc', unchanged from before this parameter existed.
Response Body
application/json
application/json
curl -X GET "https://example.com/api/v1/organizations/497f6eca-6276-4993-bfeb-53cbbbba6f08/telemetry/traces"[ { "trace_id": "string", "span_id": "string", "service_name": "string", "span_name": "string", "duration_ns": 0, "status_code": "string", "start_time": "2019-08-24T14:15:22Z", "row_id": "string" }]/api/v1/organizations/{org_id}/telemetry/traces/tailLive-tail follow read: rows strictly newer than cursor_time/
cursor_id, ascending, plus the cursor for the next poll. Registered
ahead of GET /traces/{trace_id} — Starlette matches routes in
registration order, and "tail" would otherwise be consumed as a
trace_id path param.
Authorization
HTTPBearer In: header
Path Parameters
uuidQuery Parameters
Repeatable — values OR together (e.g. two occurrences match either service). A single occurrence is unchanged from before this field was repeatable (issue #331).
Same shape as 'service_name', negated: excludes rows matching any of these values. If a value appears in both 'service_name' and this field, it is excluded — exclude always wins on conflict.
Repeatable (issue #331) — same semantics as 'service_name'.
Same shape as 'status_code', negated — same semantics as 'service_name_exclude'.
Language q is written in (#177). lucene is the default and what every request omitting this field gets. sql reads q as a bare ClickHouse predicate, AND-joined under the tenant clamp so it can only narrow — see docs/v2/architecture/TELEMETRY_INGESTION_ARCHITECTURE.md §9.3.1.
"lucene"Value in
- "lucene"
- "sql"
Repeatable, index-aligned with 'attribute_value' (issue #331): the i-th key pairs with the i-th value. Values sharing a key OR together; distinct keys AND together. A single (key, value) pair is unchanged from before this field was repeatable.
Paired with 'attribute_key' — see its description.
Same shape as 'attribute_key', negated — pairs with 'attribute_value_exclude'. A key excluded here is excluded even if the same key/value also appears in 'attribute_key'/'attribute_value'.
Paired with 'attribute_key_exclude' — see its description.
Narrow to one Event Patterns cluster (#179). Pass a pattern_hash from the patterns endpoint back verbatim — it is a UInt64 carried as a string because the larger values exceed JavaScript's Number.MAX_SAFE_INTEGER. The hash is derived from the message, not stored, so a value produced before a change to the mask list will match nothing; see §9.11.
1 <= value <= 1000100Response Body
application/json
application/json
curl -X GET "https://example.com/api/v1/organizations/497f6eca-6276-4993-bfeb-53cbbbba6f08/telemetry/traces/tail"{ "records": [ { "trace_id": "string", "span_id": "string", "service_name": "string", "span_name": "string", "duration_ns": 0, "status_code": "string", "start_time": "2019-08-24T14:15:22Z", "row_id": "string" } ], "next_cursor": { "cursor_time": "2019-08-24T14:15:22Z", "cursor_id": "string" }, "gap": false}/api/v1/organizations/{org_id}/telemetry/traces/histogramRecord counts per time bucket for the volume-over-time chart above the trace list (§9.6). Registered ahead of GET /traces/{trace_id} — same reason as /traces/tail: Starlette matches routes in registration order, and "histogram" would otherwise be consumed as a trace_id path param.
Authorization
HTTPBearer In: header
Path Parameters
uuidQuery Parameters
Repeatable — values OR together (e.g. two occurrences match either service). A single occurrence is unchanged from before this field was repeatable (issue #331).
Same shape as 'service_name', negated: excludes rows matching any of these values. If a value appears in both 'service_name' and this field, it is excluded — exclude always wins on conflict.
Repeatable (issue #331) — same semantics as 'service_name'.
Same shape as 'status_code', negated — same semantics as 'service_name_exclude'.
Language q is written in (#177). lucene is the default and what every request omitting this field gets. sql reads q as a bare ClickHouse predicate, AND-joined under the tenant clamp so it can only narrow — see docs/v2/architecture/TELEMETRY_INGESTION_ARCHITECTURE.md §9.3.1.
"lucene"Value in
- "lucene"
- "sql"
Repeatable, index-aligned with 'attribute_value' (issue #331): the i-th key pairs with the i-th value. Values sharing a key OR together; distinct keys AND together. A single (key, value) pair is unchanged from before this field was repeatable.
Paired with 'attribute_key' — see its description.
Same shape as 'attribute_key', negated — pairs with 'attribute_value_exclude'. A key excluded here is excluded even if the same key/value also appears in 'attribute_key'/'attribute_value'.
Paired with 'attribute_key_exclude' — see its description.
Narrow to one Event Patterns cluster (#179). Pass a pattern_hash from the patterns endpoint back verbatim — it is a UInt64 carried as a string because the larger values exceed JavaScript's Number.MAX_SAFE_INTEGER. The hash is derived from the message, not stored, so a value produced before a change to the mask list will match nothing; see §9.11.
Group per-bucket counts by status_code
falseResponse Body
application/json
application/json
curl -X GET "https://example.com/api/v1/organizations/497f6eca-6276-4993-bfeb-53cbbbba6f08/telemetry/traces/histogram"{ "buckets": [ { "bucket_start": "2019-08-24T14:15:22Z", "bucket_end": "2019-08-24T14:15:22Z", "count": 0, "groups": { "property1": 0, "property2": 0 } } ], "bucket_width_seconds": 0, "scanned_rows": 0, "elapsed_seconds": 0}/api/v1/organizations/{org_id}/telemetry/traces/facetsFacet counts for the Explorer's left filter panel (§9.7, issue #147): distinct service_name/status_code values with counts, plus top attribute values per key across both Map columns, all computed under the SAME active filters GET /traces applies (minus each facet's own field, so narrowing a selection within one facet still shows its sibling values). Registered ahead of GET /traces/{trace_id} — same reason as /traces/tail and /traces/histogram: Starlette matches routes in registration order, and "facets" would otherwise be consumed as a trace_id path segment.
Authorization
HTTPBearer In: header
Path Parameters
uuidQuery Parameters
Repeatable — values OR together (e.g. two occurrences match either service). A single occurrence is unchanged from before this field was repeatable (issue #331).
Same shape as 'service_name', negated: excludes rows matching any of these values. If a value appears in both 'service_name' and this field, it is excluded — exclude always wins on conflict.
Repeatable (issue #331) — same semantics as 'service_name'.
Same shape as 'status_code', negated — same semantics as 'service_name_exclude'.
Language q is written in (#177). lucene is the default and what every request omitting this field gets. sql reads q as a bare ClickHouse predicate, AND-joined under the tenant clamp so it can only narrow — see docs/v2/architecture/TELEMETRY_INGESTION_ARCHITECTURE.md §9.3.1.
"lucene"Value in
- "lucene"
- "sql"
Repeatable, index-aligned with 'attribute_value' (issue #331): the i-th key pairs with the i-th value. Values sharing a key OR together; distinct keys AND together. A single (key, value) pair is unchanged from before this field was repeatable.
Paired with 'attribute_key' — see its description.
Same shape as 'attribute_key', negated — pairs with 'attribute_value_exclude'. A key excluded here is excluded even if the same key/value also appears in 'attribute_key'/'attribute_value'.
Paired with 'attribute_key_exclude' — see its description.
Narrow to one Event Patterns cluster (#179). Pass a pattern_hash from the patterns endpoint back verbatim — it is a UInt64 carried as a string because the larger values exceed JavaScript's Number.MAX_SAFE_INTEGER. The hash is derived from the message, not stored, so a value produced before a change to the mask list will match nothing; see §9.11.
Max attribute values returned per attribute key
1 <= value <= 5010Response Body
application/json
application/json
curl -X GET "https://example.com/api/v1/organizations/497f6eca-6276-4993-bfeb-53cbbbba6f08/telemetry/traces/facets"{ "service_name": { "values": [ { "value": "string", "count": 0 } ], "truncated": false }, "status_code": { "values": [ { "value": "string", "count": 0 } ], "truncated": false }, "attributes": [ { "key": "string", "values": [ { "value": "string", "count": 0 } ], "total_distinct": 0 } ], "resource_attributes": [ { "key": "string", "values": [ { "value": "string", "count": 0 } ], "total_distinct": 0 } ]}/api/v1/organizations/{org_id}/telemetry/traces/patternsEvent Patterns over traces (§9.11) — span names clustered by shape, each with an exact count.
No pattern_hash parameter, unlike its list/tail/histogram/facets
siblings: this endpoint produces the hashes rather than filtering by one,
and accepting it here would mean asking which patterns exist inside a
single pattern.
Registered above /traces/{trace_id} for the same reason /traces/tail
and /traces/histogram are — a path parameter declared first would
swallow the literal segment and route patterns in as a trace id.
Authorization
HTTPBearer In: header
Path Parameters
uuidQuery Parameters
Repeatable — values OR together (e.g. two occurrences match either service). A single occurrence is unchanged from before this field was repeatable (issue #331).
Same shape as 'service_name', negated: excludes rows matching any of these values. If a value appears in both 'service_name' and this field, it is excluded — exclude always wins on conflict.
Repeatable (issue #331) — same semantics as 'service_name'.
Same shape as 'status_code', negated — same semantics as 'service_name_exclude'.
Language q is written in (#177). lucene is the default and what every request omitting this field gets. sql reads q as a bare ClickHouse predicate, AND-joined under the tenant clamp so it can only narrow — see docs/v2/architecture/TELEMETRY_INGESTION_ARCHITECTURE.md §9.3.1.
"lucene"Value in
- "lucene"
- "sql"
Repeatable, index-aligned with 'attribute_value' (issue #331): the i-th key pairs with the i-th value. Values sharing a key OR together; distinct keys AND together. A single (key, value) pair is unchanged from before this field was repeatable.
Paired with 'attribute_key' — see its description.
Same shape as 'attribute_key', negated — pairs with 'attribute_value_exclude'. A key excluded here is excluded even if the same key/value also appears in 'attribute_key'/'attribute_value'.
Paired with 'attribute_key_exclude' — see its description.
Max patterns returned, most frequent first.
1 <= value <= 20050Response Body
application/json
application/json
curl -X GET "https://example.com/api/v1/organizations/497f6eca-6276-4993-bfeb-53cbbbba6f08/telemetry/traces/patterns"{ "patterns": [ { "pattern_hash": "string", "pattern": "string", "count": 0, "sample": "string", "first_seen": "2019-08-24T14:15:22Z", "last_seen": "2019-08-24T14:15:22Z" } ], "truncated": true}/api/v1/organizations/{org_id}/telemetry/traces/span-peersWhere one span's duration falls among spans sharing its name and service (#441).
Registered ahead of GET .../traces/{trace_id} for the same reason
/tail, /histogram and /facets are: otherwise span-peers is consumed
as a trace_id path segment.
The window is server-chosen (PEER_WINDOW), not a caller parameter. It is
a baseline, and letting the caller widen it turns a fixed comparison into
another unbounded scan knob of exactly the kind §9.1 bounds elsewhere.
Authorization
HTTPBearer In: header
Path Parameters
uuidQuery Parameters
The span's name, matched exactly.
The span's service, matched exactly.
The subject span's own duration, ranked against its peers.
0 <= valueResponse Body
application/json
application/json
curl -X GET "https://example.com/api/v1/organizations/497f6eca-6276-4993-bfeb-53cbbbba6f08/telemetry/traces/span-peers?span_name=string&service_name=string&subject_ns=0"{ "span_name": "string", "service_name": "string", "count": 0, "window_seconds": 0, "p50_ns": 0, "p95_ns": 0, "p99_ns": 0, "subject_ns": 0, "percentile": 0}/api/v1/organizations/{org_id}/telemetry/traces/{trace_id}Span tree for one trace_id (#148): spans assembled into a parent/child forest by parent_span_id, root spans (no parent, including orphans) at the top level, siblings ordered by start_time. Replaces the flat span-list shape this endpoint returned before.
With include_events=true each span also carries its events, which is
what the Explorer's Span Events panel (#159) and the waterfall's span-
events toggle (#176) render. Served here rather than from a per-span
endpoint because the waterfall interleaves events across every span in
the trace — one query, not one per span (§9.8).
Authorization
HTTPBearer In: header
Path Parameters
uuidQuery Parameters
Include each span's events (#304). Off by default because the Events.* arrays are the one unbounded thing on a span row — the surfaces that do not render events should not pay for them. Capped per span (MAX_SPAN_EVENTS_PER_SPAN) and per trace (MAX_TRACE_EVENTS); either cap firing sets events_truncated.
falseResponse Body
application/json
application/json
curl -X GET "https://example.com/api/v1/organizations/497f6eca-6276-4993-bfeb-53cbbbba6f08/telemetry/traces/string"{ "trace_id": "string", "roots": [ { "trace_id": "string", "span_id": "string", "service_name": "string", "span_name": "string", "duration_ns": 0, "status_code": "string", "start_time": "2019-08-24T14:15:22Z", "row_id": "string", "parent_span_id": "string", "span_kind": "string", "attributes": { "property1": "string", "property2": "string" }, "resource_attributes": { "property1": "string", "property2": "string" }, "scope_name": "", "events": [ { "timestamp": "2019-08-24T14:15:22Z", "name": "string", "attributes": { "property1": "string", "property2": "string" } } ], "events_truncated": false, "children": [ {} ] } ], "depth_flattened": false, "span_count": 0, "error_count": 0, "truncated": false, "events_truncated": false}/api/v1/organizations/{org_id}/telemetry/logsAuthorization
HTTPBearer In: header
Path Parameters
uuidQuery Parameters
Repeatable — values OR together (e.g. two occurrences match either service). A single occurrence is unchanged from before this field was repeatable (issue #331).
Same shape as 'service_name', negated: excludes rows matching any of these values. If a value appears in both 'service_name' and this field, it is excluded — exclude always wins on conflict.
Repeatable (issue #331) — same semantics as 'service_name'. Case-insensitive, matches the canonical severity (§9.1).
Same shape as 'severity_text', negated — same semantics as 'service_name_exclude'.
Language q is written in (#177). lucene is the default and what every request omitting this field gets. sql reads q as a bare ClickHouse predicate, AND-joined under the tenant clamp so it can only narrow — see docs/v2/architecture/TELEMETRY_INGESTION_ARCHITECTURE.md §9.3.1.
"lucene"Value in
- "lucene"
- "sql"
Repeatable, index-aligned with 'attribute_value' (issue #331): the i-th key pairs with the i-th value. Values sharing a key OR together; distinct keys AND together. A single (key, value) pair is unchanged from before this field was repeatable.
Paired with 'attribute_key' — see its description.
Same shape as 'attribute_key', negated — pairs with 'attribute_value_exclude'. A key excluded here is excluded even if the same key/value also appears in 'attribute_key'/'attribute_value'.
Paired with 'attribute_key_exclude' — see its description.
Narrow to one Event Patterns cluster (#179). Pass a pattern_hash from the patterns endpoint back verbatim — it is a UInt64 carried as a string because the larger values exceed JavaScript's Number.MAX_SAFE_INTEGER. The hash is derived from the message, not stored, so a value produced before a change to the mask list will match nothing; see §9.11.
1 <= value <= 10001000 <= value0Comma-separated column projection (§9.9, issue #356), e.g. 'service_name,body'. 'row_id' is always included. Absent returns the full row, unchanged from before this parameter existed.
' asc|desc' (§9.9, issue #356). Only 'timestamp' is sortable — the keyset cursor is typed against it. Absent means 'timestamp desc', unchanged from before this parameter existed.
Response Body
application/json
application/json
curl -X GET "https://example.com/api/v1/organizations/497f6eca-6276-4993-bfeb-53cbbbba6f08/telemetry/logs"[ { "timestamp": "2019-08-24T14:15:22Z", "trace_id": "string", "span_id": "string", "service_name": "string", "severity_text": "string", "severity_number": 0, "body": "string", "row_id": "string" }]/api/v1/organizations/{org_id}/telemetry/logs/tailLive-tail follow read for logs — see tail_traces for the direction rationale.
Authorization
HTTPBearer In: header
Path Parameters
uuidQuery Parameters
Repeatable — values OR together (e.g. two occurrences match either service). A single occurrence is unchanged from before this field was repeatable (issue #331).
Same shape as 'service_name', negated: excludes rows matching any of these values. If a value appears in both 'service_name' and this field, it is excluded — exclude always wins on conflict.
Repeatable (issue #331) — same semantics as 'service_name'. Case-insensitive, matches the canonical severity (§9.1).
Same shape as 'severity_text', negated — same semantics as 'service_name_exclude'.
Language q is written in (#177). lucene is the default and what every request omitting this field gets. sql reads q as a bare ClickHouse predicate, AND-joined under the tenant clamp so it can only narrow — see docs/v2/architecture/TELEMETRY_INGESTION_ARCHITECTURE.md §9.3.1.
"lucene"Value in
- "lucene"
- "sql"
Repeatable, index-aligned with 'attribute_value' (issue #331): the i-th key pairs with the i-th value. Values sharing a key OR together; distinct keys AND together. A single (key, value) pair is unchanged from before this field was repeatable.
Paired with 'attribute_key' — see its description.
Same shape as 'attribute_key', negated — pairs with 'attribute_value_exclude'. A key excluded here is excluded even if the same key/value also appears in 'attribute_key'/'attribute_value'.
Paired with 'attribute_key_exclude' — see its description.
Narrow to one Event Patterns cluster (#179). Pass a pattern_hash from the patterns endpoint back verbatim — it is a UInt64 carried as a string because the larger values exceed JavaScript's Number.MAX_SAFE_INTEGER. The hash is derived from the message, not stored, so a value produced before a change to the mask list will match nothing; see §9.11.
1 <= value <= 1000100Response Body
application/json
application/json
curl -X GET "https://example.com/api/v1/organizations/497f6eca-6276-4993-bfeb-53cbbbba6f08/telemetry/logs/tail"{ "records": [ { "timestamp": "2019-08-24T14:15:22Z", "trace_id": "string", "span_id": "string", "service_name": "string", "severity_text": "string", "severity_number": 0, "body": "string", "row_id": "string" } ], "next_cursor": { "cursor_time": "2019-08-24T14:15:22Z", "cursor_id": "string" }, "gap": false}/api/v1/organizations/{org_id}/telemetry/logs/histogramRecord counts per time bucket for the volume-over-time chart above the log list (§9.6) — logs' counterpart to histogram_traces.
Authorization
HTTPBearer In: header
Path Parameters
uuidQuery Parameters
Repeatable — values OR together (e.g. two occurrences match either service). A single occurrence is unchanged from before this field was repeatable (issue #331).
Same shape as 'service_name', negated: excludes rows matching any of these values. If a value appears in both 'service_name' and this field, it is excluded — exclude always wins on conflict.
Repeatable (issue #331) — same semantics as 'service_name'. Case-insensitive, matches the canonical severity (§9.1).
Same shape as 'severity_text', negated — same semantics as 'service_name_exclude'.
Language q is written in (#177). lucene is the default and what every request omitting this field gets. sql reads q as a bare ClickHouse predicate, AND-joined under the tenant clamp so it can only narrow — see docs/v2/architecture/TELEMETRY_INGESTION_ARCHITECTURE.md §9.3.1.
"lucene"Value in
- "lucene"
- "sql"
Repeatable, index-aligned with 'attribute_value' (issue #331): the i-th key pairs with the i-th value. Values sharing a key OR together; distinct keys AND together. A single (key, value) pair is unchanged from before this field was repeatable.
Paired with 'attribute_key' — see its description.
Same shape as 'attribute_key', negated — pairs with 'attribute_value_exclude'. A key excluded here is excluded even if the same key/value also appears in 'attribute_key'/'attribute_value'.
Paired with 'attribute_key_exclude' — see its description.
Narrow to one Event Patterns cluster (#179). Pass a pattern_hash from the patterns endpoint back verbatim — it is a UInt64 carried as a string because the larger values exceed JavaScript's Number.MAX_SAFE_INTEGER. The hash is derived from the message, not stored, so a value produced before a change to the mask list will match nothing; see §9.11.
Group per-bucket counts by severity_text
falseResponse Body
application/json
application/json
curl -X GET "https://example.com/api/v1/organizations/497f6eca-6276-4993-bfeb-53cbbbba6f08/telemetry/logs/histogram"{ "buckets": [ { "bucket_start": "2019-08-24T14:15:22Z", "bucket_end": "2019-08-24T14:15:22Z", "count": 0, "groups": { "property1": 0, "property2": 0 } } ], "bucket_width_seconds": 0, "scanned_rows": 0, "elapsed_seconds": 0}/api/v1/organizations/{org_id}/telemetry/logs/facetsFacet counts for the Explorer's left filter panel over logs (§9.7) — logs' counterpart to facets_traces (severity_text in place of status_code). No {log_id} path segment exists on this router, so there is no registration-order hazard the way traces/tail and traces/histogram have, but the route is placed alongside its trace counterpart for readability.
Authorization
HTTPBearer In: header
Path Parameters
uuidQuery Parameters
Repeatable — values OR together (e.g. two occurrences match either service). A single occurrence is unchanged from before this field was repeatable (issue #331).
Same shape as 'service_name', negated: excludes rows matching any of these values. If a value appears in both 'service_name' and this field, it is excluded — exclude always wins on conflict.
Repeatable (issue #331) — same semantics as 'service_name'. Case-insensitive, matches the canonical severity (§9.1).
Same shape as 'severity_text', negated — same semantics as 'service_name_exclude'.
Language q is written in (#177). lucene is the default and what every request omitting this field gets. sql reads q as a bare ClickHouse predicate, AND-joined under the tenant clamp so it can only narrow — see docs/v2/architecture/TELEMETRY_INGESTION_ARCHITECTURE.md §9.3.1.
"lucene"Value in
- "lucene"
- "sql"
Repeatable, index-aligned with 'attribute_value' (issue #331): the i-th key pairs with the i-th value. Values sharing a key OR together; distinct keys AND together. A single (key, value) pair is unchanged from before this field was repeatable.
Paired with 'attribute_key' — see its description.
Same shape as 'attribute_key', negated — pairs with 'attribute_value_exclude'. A key excluded here is excluded even if the same key/value also appears in 'attribute_key'/'attribute_value'.
Paired with 'attribute_key_exclude' — see its description.
Narrow to one Event Patterns cluster (#179). Pass a pattern_hash from the patterns endpoint back verbatim — it is a UInt64 carried as a string because the larger values exceed JavaScript's Number.MAX_SAFE_INTEGER. The hash is derived from the message, not stored, so a value produced before a change to the mask list will match nothing; see §9.11.
Max attribute values returned per attribute key
1 <= value <= 5010Response Body
application/json
application/json
curl -X GET "https://example.com/api/v1/organizations/497f6eca-6276-4993-bfeb-53cbbbba6f08/telemetry/logs/facets"{ "service_name": { "values": [ { "value": "string", "count": 0 } ], "truncated": false }, "severity_text": { "values": [ { "value": "string", "count": 0 } ], "truncated": false }, "attributes": [ { "key": "string", "values": [ { "value": "string", "count": 0 } ], "total_distinct": 0 } ], "resource_attributes": [ { "key": "string", "values": [ { "value": "string", "count": 0 } ], "total_distinct": 0 } ]}/api/v1/organizations/{org_id}/telemetry/logs/patternsEvent Patterns over logs (§9.11) — bodies clustered by shape, each with
an exact count. Logs' counterpart to patterns_traces; see that handler on
why no pattern_hash parameter is accepted.
Placed above /logs/{log_id} so the literal segment is matched before the
path parameter.
Authorization
HTTPBearer In: header
Path Parameters
uuidQuery Parameters
Repeatable — values OR together (e.g. two occurrences match either service). A single occurrence is unchanged from before this field was repeatable (issue #331).
Same shape as 'service_name', negated: excludes rows matching any of these values. If a value appears in both 'service_name' and this field, it is excluded — exclude always wins on conflict.
Repeatable (issue #331) — same semantics as 'service_name'. Case-insensitive, matches the canonical severity (§9.1).
Same shape as 'severity_text', negated — same semantics as 'service_name_exclude'.
Language q is written in (#177). lucene is the default and what every request omitting this field gets. sql reads q as a bare ClickHouse predicate, AND-joined under the tenant clamp so it can only narrow — see docs/v2/architecture/TELEMETRY_INGESTION_ARCHITECTURE.md §9.3.1.
"lucene"Value in
- "lucene"
- "sql"
Repeatable, index-aligned with 'attribute_value' (issue #331): the i-th key pairs with the i-th value. Values sharing a key OR together; distinct keys AND together. A single (key, value) pair is unchanged from before this field was repeatable.
Paired with 'attribute_key' — see its description.
Same shape as 'attribute_key', negated — pairs with 'attribute_value_exclude'. A key excluded here is excluded even if the same key/value also appears in 'attribute_key'/'attribute_value'.
Paired with 'attribute_key_exclude' — see its description.
Max patterns returned, most frequent first.
1 <= value <= 20050Response Body
application/json
application/json
curl -X GET "https://example.com/api/v1/organizations/497f6eca-6276-4993-bfeb-53cbbbba6f08/telemetry/logs/patterns"{ "patterns": [ { "pattern_hash": "string", "pattern": "string", "count": 0, "sample": "string", "first_seen": "2019-08-24T14:15:22Z", "last_seen": "2019-08-24T14:15:22Z" } ], "truncated": true}/api/v1/organizations/{org_id}/telemetry/logs/{log_id}Single full log record by (timestamp, log_id) (#148) — every otel_logs column, including both Map columns and scope_name. No {log_id}-shaped literal segment exists ahead of this on the /logs router (unlike /traces, where /traces/tail, /traces/histogram, and /traces/facets all must precede /traces/{trace_id}), so there is no Starlette registration-order hazard here.
Authorization
HTTPBearer In: header
Path Parameters
uuidQuery Parameters
The same log record's list-view timestamp — required for partition pruning (otel_logs is PARTITION BY toDate, §8.2); row_id alone is not indexed.
date-timeResponse Body
application/json
application/json
curl -X GET "https://example.com/api/v1/organizations/497f6eca-6276-4993-bfeb-53cbbbba6f08/telemetry/logs/string?timestamp=2019-08-24T14%3A15%3A22Z"{ "timestamp": "2019-08-24T14:15:22Z", "trace_id": "string", "span_id": "string", "service_name": "string", "severity_text": "string", "severity_number": 0, "body": "string", "row_id": "string", "attributes": { "property1": "string", "property2": "string" }, "resource_attributes": { "property1": "string", "property2": "string" }, "scope_name": "string"}/api/v1/organizations/{org_id}/telemetry/metricsAuthorization
HTTPBearer In: header
Path Parameters
uuidQuery Parameters
1 <= value <= 1000100Response Body
application/json
application/json
curl -X GET "https://example.com/api/v1/organizations/497f6eca-6276-4993-bfeb-53cbbbba6f08/telemetry/metrics"[ { "metric_name": "string", "timestamp": "2019-08-24T14:15:22Z", "value": 0, "metric_type": "string", "count": 0, "sum": 0 }]/api/v1/organizations/{org_id}/telemetry/metrics/rangeBucketed, aggregated series for one metric over the resolved range
(#473) — the query the console's chart panel (and #474/#475/#531) run,
replacing the row dump GET .../metrics as the range-query surface.
GET .../metrics itself is unchanged and kept for raw point listing —
see TelemetryQueryService.metrics_range's docstring for why both stay.
Empty buckets are always present. Their value is 0.0 for
'sum'/'count' and None for every other aggregation — see
MetricRangePoint's docstring. Counters are reported as their raw
cumulative value, not rate-corrected — see MetricRangeResponse's
docstring.
Authorization
HTTPBearer In: header
Path Parameters
uuidQuery Parameters
Exact metric_name — required, one metric per request.
Fixed enum: sum, avg, min, max, count, quantile — never caller-supplied SQL (ADR-0016). 'quantile' additionally requires 'quantile'.
"avg"Required iff aggregation='quantile' — a fraction in [0, 1] (e.g. 0.95), matching the console query language's 'quantile(metric, threshold)' format (#482).
One or more otel_metrics.labels keys (repeatable) — one series per distinct combination of values actually present in the range. Absent returns one ungrouped series with empty labels.
Repeatable label filter (issue #1329's console enabler) — each entry is 'key=value' (equality) or 'key!=value' (inequality) over the same otel_metrics.labels key space 'group_by' accepts. Multiple entries AND together. Split at the FIRST '=' in the entry: if the character immediately before it is '!', the operator is '!=' and the key ends there; otherwise the operator is '=' and the key ends at the '='. Everything after that first '=' is the value, so a value may itself contain '=' and '!=' and still round-trip exactly — 'region!=eu=west' means key 'region', operator '!=', value 'eu=west'; 'region=a!=b' means key 'region', operator '=', value 'a!=b'. A key may not itself contain '=' or '!' immediately before an '='. An empty value ('region=') is a valid empty-string filter; an entry with no '=' at all, or an empty key, is a validation failure. Applied before aggregation and grouping, so a filtered 'group_by' returns only the surviving series.
Response Body
application/json
application/json
curl -X GET "https://example.com/api/v1/organizations/497f6eca-6276-4993-bfeb-53cbbbba6f08/telemetry/metrics/range"{ "metric_name": "string", "aggregation": "sum", "quantile": 0, "metric_type": "string", "bucket_width_seconds": 0, "series": [ { "labels": { "property1": "string", "property2": "string" }, "points": [ { "bucket_start": "2019-08-24T14:15:22Z", "bucket_end": "2019-08-24T14:15:22Z", "value": 0 } ] } ], "truncated": false, "scanned_rows": 0, "elapsed_seconds": 0}/api/v1/organizations/{org_id}/telemetry/metrics/catalogEvery metric this org has emitted in the resolved range (#474): the
read behind a source list/autocomplete — there was previously no way to
ask "what metrics does this org have" at all. Distinct
(metric_name, metric_type) pairs across all four metric tables
(otel_metrics plus the three canonical encodings #471 added), each with
a series count. See TelemetryQueryService.metrics_catalog's docstring
for the UNION shape and cost bounds.
Authorization
HTTPBearer In: header
Path Parameters
uuidQuery Parameters
Response Body
application/json
application/json
curl -X GET "https://example.com/api/v1/organizations/497f6eca-6276-4993-bfeb-53cbbbba6f08/telemetry/metrics/catalog"{ "metrics": [ { "metric_name": "string", "metric_type": "string", "series_count": 0 } ], "truncated": false}/api/v1/organizations/{org_id}/telemetry/metrics/label-keysLabel keys present on one metric in the resolved range (#474).
Response is ValueFacet — the exact shape .../traces/facets and
.../logs/facets already return for a plain-column facet — reused
verbatim rather than a near-miss, so the console facet panel needs no
fork to render it: value holds the key name, count the number of
data points carrying it.
Authorization
HTTPBearer In: header
Path Parameters
uuidQuery Parameters
Exact metric_name — required, one metric per request.
Response Body
application/json
application/json
curl -X GET "https://example.com/api/v1/organizations/497f6eca-6276-4993-bfeb-53cbbbba6f08/telemetry/metrics/label-keys"{ "values": [ { "value": "string", "count": 0 } ], "truncated": false}/api/v1/organizations/{org_id}/telemetry/metrics/label-valuesValues (with counts) one label key takes on one metric in the
resolved range (#474). Response is AttributeFacet — the exact shape
one entry of .../traces/facets' or .../logs/facets' attributes
list already carries — reused verbatim: key echoes the request,
values is the top-top_n page by count, total_distinct is the
exact (uncapped) distinct-value count. See
TelemetryQueryService.metric_label_values's docstring for why
total_distinct needs its own round trip rather than being derived
from the capped values list (#490).
Authorization
HTTPBearer In: header
Path Parameters
uuidQuery Parameters
Exact metric_name — required, one metric per request.
Label key to enumerate values for — required. Use .../metrics/label-keys to discover it.
Max values returned, by count.
1 <= value <= 5010Response Body
application/json
application/json
curl -X GET "https://example.com/api/v1/organizations/497f6eca-6276-4993-bfeb-53cbbbba6f08/telemetry/metrics/label-values"{ "key": "string", "values": [ { "value": "string", "count": 0 } ], "total_distinct": 0}