How it’s built
As trace spans arrive, MoleSignal pairs each span with its parent. When a span and its parent belong to different services, that’s a call edge — parent service → child service — and the edge takes the child (callee) span’s duration and error status. Same-service parent/child spans are internal and aren’t drawn as edges. Edges are accumulated into one-minute buckets per service pair and flushed to storage in the background, so the map reflects recent traffic within roughly half a minute.In-memory vs storage mode
By default (ingest mode) pairing happens in-memory on the node that ingests the spans — low
latency. In a multi-node deployment, spans for one call that land on different nodes can’t be paired
in memory, so the map may undercount those edges (it never invents one).
To get a complete map across nodes, switch Settings → General → Service map data source to
storage mode. A single node then periodically rebuilds the graph from stored traces — seeing
every span regardless of which node ingested it — at the cost of a 1–2 minute delay. The setting is
stored in the database and takes effect at runtime; no restart needed.
What you need to send
The map needs traces with:- a
service.nameresource attribute on every span (the OTLP exporters set this for you), and - parent/child span relationships that cross service boundaries — i.e. a client span in one service whose child server span runs in another.
Topology
The topology endpoint aggregates a time window into nodes (services) and edges (calls):| Field | Meaning |
|---|---|
rps | Requests per second over the window. |
error_rate / err_rate | Fraction of requests with an ERROR status (0–1). |
p95_ms | 95th-percentile latency, in milliseconds. |
span_count | Total spans seen for the node in the window. |
Raw service graph
For the underlying minute-by-minute edge snapshots — useful for charting a single dependency over time — query the service graph directly:from and to are microseconds since the Unix epoch. The optional service filter returns edges
where it appears as either side of the call. Each row carries request_count, error_count, and
p50_us / p95_us / p99_us for one service pair in one minute.
In the UI
- The Services page lists every service with its rate, error rate, and p95, ordered by traffic.
- Open a service to see its upstream callers and downstream dependencies.
- The topology view draws the live graph — edge thickness follows traffic, and color follows the error rate.
Topology & service-graph API
Query the topology and raw service-graph endpoints over HTTP.