M
APM & Infrastructure

Service Map

Auto-derived directed graph of which service calls which.

How it works

Every minute, Funnel scans recent spans, groups them by service, and builds an edge whenever service A's span has a child span in service B. The result is rendered as a force-directed SVG with edge weights = call counts, and edge colours = error rate. Click any edge to see the slowest spans on that hop.

What this lets you do

  • See dependencies without drawing a diagram
  • Spot N+1 service calls and cyclic dependencies visually
  • Edge thickness shows traffic volume — capacity planning at a glance
  • Updates automatically as services come and go

Get it running

  1. 1 Just send traces with proper parent_span_id
  2. 2 Map updates within 60 s of new edges appearing

Code examples

# Service "api" calls "db". Two spans in one batch, parent-child.
curl -X POST https://funnel.example.com/v1/traces \
  -H "Authorization: Bearer st_YOUR_KEY" \
  -d '{
    "spans": [
      {
        "trace_id": "a1f3c4d5b6e7890123456789abcdef00",
        "span_id":  "1111111111111111",
        "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
      },
      {
        "trace_id": "a1f3c4d5b6e7890123456789abcdef00",
        "span_id":  "2222222222222222",
        "parent_span_id": "1111111111111111",
        "service_name":   "db",
        "operation_name": "SELECT users",
        "start_time": "2026-05-17T10:00:00.020Z",
        "end_time":   "2026-05-17T10:00:00.180Z",
        "duration_ms": 160.0
      }
    ]
  }'

# Service Map will show:   api ──► db
Where to find it
/app/p/:org/:project/service_map
Open in app →