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. 1 Use any OTel SDK with auto-instrumentation enabled
  2. 2 Or build spans manually and POST batches to `/v1/traces`
  3. 3 Ensure inbound HTTP propagation of `traceparent` for cross-service links
  4. 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
Open in app →