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 Just send traces with proper parent_span_id
- 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