Use Cases

Nobody deployed. Latency doubled anyway.

In a distributed system the service that got slow is rarely the service that broke. The map shows which edge degraded first, and the trace shows how far the wait propagated.

signal api-gateway p95 1.9 s · was 0.9 s, no deploy

The path

Two hops from the symptom to the cause

payment-svc@1.4.2 is the release that shipped four hours before the symptom. It holds the path together — the map, the trace and the logs are all filtered to it.

  1. map T+0:00 · deploypayment-svc@1.4.2

    The map shows a slow edge, not a slow service

    api-gateway is the service being paged about, but its own spans are fine. The degraded edge is two hops in: payment-svc to user-db, average up from 12 ms to 210 ms.

    A service neighbourhood showing API, database and cache dependencies with live request flow
  2. trace T+1:10 · deploypayment-svc@1.4.2

    The trace shows the wait, not the work

    Open a slow request and the db span is almost all of it. The query itself is 4 ms; the span is 210 ms. The difference is time spent before the query ever ran.

    A span selected in the waterfall with its full attribute set open alongside
  3. logs T+2:40 · deploypayment-svc@1.4.2

    The logs name the release

    Lines from that span read pool wait 206 ms, acquired after 3 attempts. Filter by service.version and they start at 1.4.2 — which raised concurrency without raising the pool.

    A log detail with linked trace and span IDs, correlated events and full resource attributes

outcome

Pool size raised to match the new concurrency. The p95 edge latency returned to 14 ms without a rollback.

2
hops from the page
12 → 210 ms
edge latency, before and after
98%
of the span was waiting

What it does

What made the cascade readable

edge latency
Edges carry their own latency
The map measures each caller-callee pair separately, so a dependency that degraded for one caller and not another is visible as one edge, not an average across the service.
db.statement
A db span is wait plus work
Because the client span wraps acquisition as well as execution, pool starvation shows up as a gap between span duration and query duration instead of hiding inside a single number.
service.version
No deploy is still a deploy
service.version on every span means the question changes from who deployed to what version is this span from. A four-hour-old release is as findable as a four-minute-old one.

Keep going

The same data, other jobs

Point OTLP at Maple.

One endpoint, one key. Traces, logs, metrics and sessions land on the same trace id from the first request.