T
Observability
Traces
Distributed traces with full W3C trace-context propagation and a flame graph.
▸ How it works
Spans land on `POST /v1/traces`. Each span carries trace_id (16 bytes), span_id (8 bytes), parent_span_id, service_name, operation_name, start/end times, status, kind, attributes, and events. Funnel reconstructs the parent/child tree at query time and renders a flame graph with span-level drill-down to the matching log lines (correlated via trace_id) and the metrics emitted during that span.
▸ What this lets you do
- ✓ Pinpoint the slow service in a multi-hop request in seconds
- ✓ Filter spans by service · operation · status · duration · any attribute
- ✓ Auto-derived **service map** showing edges from parent→child service calls
- ✓ Trace ↔ Logs ↔ Metrics correlation via trace_id (one click in the UI)
▸ Get it running
- 1 Use any OTel SDK with auto-instrumentation enabled
- 2 Or build spans manually and POST batches to `/v1/traces`
- 3 Ensure inbound HTTP propagation of `traceparent` for cross-service links
- 4 Click any span in `Traces Explorer` to open the flame graph
▸ Code examples
curl -X POST https://funnel.example.com/v1/traces \
-H "Authorization: Bearer st_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"spans": [{
"trace_id": "a1f3c4d5b6e7890123456789abcdef00",
"span_id": "0123456789abcdef",
"service_name": "api",
"operation_name": "GET /users",
"start_time": "2026-05-17T10:00:00Z",
"end_time": "2026-05-17T10:00:00.250Z",
"duration_ms": 250.0,
"status": "ok",
"attributes": { "http.status_code": 200 }
}]
}'
Where to find it
/app/p/:org/:project/traces