Map

A graph map shows how things are connected. Use one when understanding relationships, direction or impact matters more than comparing individual values.

The trace service map in its fullscreen overlay: service cards in three columns, each card naming a service and the spans it reported, joined by labelled arrows that read left to right, with a Legend panel pinned bottom left.

It began as the trace service map and is now a shared pattern any page can render with its own data. The trace service map visualises how a distributed trace moves across services and spans: each service card groups the spans reported by that service and identifies the application they belong to, and connections attach to individual spans, so the map keeps the span-level execution flow while grouping related activity by service.

Group by service, connect by span. Service cards give the trace its higher-level structure; span-level connection points show the actual execution path through and between those services.

When to use one

Use a graph map when the question is about connection, direction or impact. The map has to make a path easier to understand than a list or a table would.

QuestionPattern
Which services and spans are in this trace, and how does execution move between them?Graph map
Which service or endpoint has the highest duration?Table or chart
What belongs under this parent?Waterfall
What happened first, and what happened next?Timeline

Anatomy

PartPurpose
CanvasThe pannable surface that contains and positions the graph.
Service cardGroups trace activity by service. It names the service and the application, then lists the spans that took part in the trace. Connections can enter or leave an individual span, so the map shows span-level execution without losing the service grouping.
EdgeThe direction the distributed request continued in, from one service to the next.
Edge labelA value describing the handoff — a duration, typically. This is what reveals where time is spent along the trace.
LegendExplains the service states, linked traces and duration tiers that cannot be inferred from the graph. It can collapse when space is short.

A service card carries three things, in this order of prominence: the service name, which is the entity a reader follows through the request path; the app name, as secondary context, naming the AppSignal application that reported this service's data; and one row per span — the operation from the current trace that ran in that service, which is what connects the map back to the underlying trace.

Layout follows the relationship

A graph map does not require a fixed reading direction. Choose the layout that makes the underlying relationship easiest to follow.

RelationshipLayout
Trace, request flow, dependency chainA consistent directional layout — left to right, say — so the path is easy to scan.
Hierarchy or ownershipA layered layout that reinforces parent and child.
Topology, many-to-many, complex networkA network-like arrangement. Position nodes to reduce overlap and crossings rather than forcing a reading direction.

Let the shared graph layout position the map. Don't hand-place nodes per page. Routing, spacing and label placement come from the graph implementation, so that similar maps behave the same way.

Nodes and connections

A node answers two questions at a glance: what is this? and does it need attention? Keep metrics that describe a relationship on the edge, rather than duplicating them inside the spans or cards at either end.

Nodes

Connections

Exploring the map

A reader should be able to scan a path quickly without losing their place. Hover is temporary; selection is persistent.

InteractionBehaviour
Hover a service cardHighlight the complete connected flow into and out of that service, and mute unrelated nodes and edges.
Hover a span or duration labelReveal the same full upstream and downstream flow as card hover, entered from the hovered span-level connection.
Click a service or spanClose the graph overlay, return to the trace page, and update the timeline to that service's context.

Legend and states

The legend explains the visual language a reader cannot reliably infer from the graph itself: service state, linked-trace relationships, and what a duration means on a span-level connection.

TreatmentStateWhat it means
Rounded rectangle, thin pale grey border, white fill.Service boxA service in the current trace, with no state emphasised.
Rounded rectangle, blue border with a pale blue halo around it.Selected serviceThe service matching the trace page's current timeline context. It tells the reader where they entered the map from.
Rounded rectangle, thin dusty-pink border.With errorA service associated with an error. If it is also the current timeline context, both states have to stay visible.
Rounded rectangle, strong red border with a pale red halo around it.With error, selectedThe service with an error that also matches the current timeline context.
Rounded rectangle, dashed pale blue border, light grey fill.Unknown serviceThe relationship is known, but AppSignal cannot resolve the service's details.
Rounded rectangle, dashed purple border, white fill.From another traceA service reached through a linked trace rather than the current one.
A short green arrow pointing right.FastA duration tier on a span-level connection. Pair the colour with the numeric label.
A short amber arrow pointing right.SlowA duration tier on a span-level connection. Pair the colour with the numeric label.
A short red arrow pointing right.CriticalA duration tier on a span-level connection. Pair the colour with the numeric label.
A short dashed purple arrow pointing right.Linked traceA connection crossing into another trace. Distinguish it by line style, not colour alone.

Preview and fullscreen

The Performance › Traces page. A Trace service map card sits at the top of the main column with a Fullscreen link in its corner and three service cards inside it; the Trace timeline is directly below, and a right-hand rail carries performance trends, triggers and actions.

The trace service map first appears as an embedded preview on the trace page, beside the timeline and the rest of the trace information. Its job there is orientation: show where the current service or span sits in the distributed flow, without taking over the page.

The preview has limited space, so a larger trace will extend past the visible area. Don't compress cards or labels until the whole graph fits. Keep the graph readable, show the most useful surrounding context, and give a clear Fullscreen action for complete exploration.

SurfacePurpose and behaviour
Embedded previewSupports a quick context check while the timeline stays visible. Keep service and span content readable, even when that means not every node or branch is visible at once.
FullscreenOpens the same graph in an overlay with substantially more room for the full topology, branches, legend and path exploration. Re-frame the graph for the larger viewport rather than scaling the preview up.

Preview for context; fullscreen for exploration. The preview does not have to prove that the entire graph fits in its container. Where space limits comprehension, keep the graph content readable and let fullscreen carry the complete view.