Skip to content
Obscenter

Blog 26 October 2026 · 5 min read

A live service topology map, drawn from real traffic

A service dependency map from browser to service to database and external APIs, where every line is a measured call and every machine is on the map.

Topology in layers: the Northwind web shop and mobile app, their domains, the services, data stores and external calls

Every team has an architecture diagram. It was drawn for a planning meeting, it lives in a wiki, and it was wrong the week after the next service shipped. When something breaks at night, nobody opens it, because nobody trusts it.

Obscenter's topology is not drawn by anybody. It is computed from what was measured — who called whom, and what runs where — so it changes when your system changes, and every line on it can be clicked into.

From the browser to the machine, in layers

The Layers view is a stack, read top to bottom:

  • Application — the website or app, and the origin it is served from;
  • Domains — what the browser talked to, your own and third parties: the CDN, a reviews widget, the API;
  • Services — what answered, measured from inside the process;
  • Data stores and external calls — the databases, caches and outside APIs the services used, with call counts and timings;
  • Processes and hosts — what the services run in, and on.

Every line points down, so a path reads straight: this page called this domain, which this service answered, which queried this database, in this process, on this machine.

Every line is a measurement

LineWhat proves it
application → domainThe browser loaded from it or called it
domain → serviceThe same trace id on both sides of the call
application → serviceThe backend request carried the session in its baggage
service → serviceThe outgoing span's id is the called span's parent
service → processThe same machine and the same process id
process → hostWhere it runs

The domain → service line is the hard one for server-rendered sites, because a page load can never carry a request header. Obscenter's agent hands the trace id back on the response (in Server-Timing, or in the tag nginx injects), which is how a site whose traffic is almost all document navigations still connects to its own backend. That mechanism is explained in the end-to-end tracing article.

What is not connected is said, not hidden

Every machine the agents report is on the map. A machine that no measurement connects to anything stands there with no line and a sentence saying why — for example, no instrumented service runs on it, so no call was followed that far. A line nobody measured would be worse than empty space.

Services and processes that run but are reached by nothing are drawn in a dashed pen inside their layer, as "3 not reached by any application". These are the actionable part of the map: things that answer but that nobody has instrumented yet, or a database the agent sees but that no traced request has called. Hide the idle takes them away when you want the clean picture.

Home map with the applications, services, data stores and machines, and outside services such as a payment and a mail relay
The home page carries a live version of the same graph, with outside dependencies at the edges

External dependencies on the map

Outgoing calls to services you do not run — a payment provider, a shipping API, a mail relay — appear as their own layer with call counts and average time. When checkout slows down because the payment API slowed down, that is visible on the map before anyone opens a trace, and the root-cause analysis on a ticket follows the same edges when it asks what a slow service was waiting on.

A network view that does not move under your mouse

The Network view draws the same data freely: things that talk to each other sit together, hubs look like hubs, and what nothing connects drifts to the edge. The layout is computed once and is deterministic, so the same system always has the same shape, and it does not move while you reach for a node. Scroll zooms at the pointer, a click highlights a node's own lines in both directions, and labels appear as you zoom. Kinds are told apart by colour and by shape, and the colours are checked for colour-blind readers in both themes.

A search box works in both views: type, and the matches stay lit while the rest fades.

Frontend overview with the visit, the domains it called, the services that answered and what they called, above the KPI tiles
Each application's overview starts with its own slice of the map: the visit, what the pages called, what answered, and what that called

Using the map during an incident

The map is most useful at the moment a ticket opens. The problem engine's root-cause analysis follows the same edges the map draws: when a service slows down, it asks what that service was waiting on, following each outgoing call to the service that answered it and comparing that callee with its own baseline. On the map, the same question is a glance — which boxes under the slow service are also unusual. The map has the same time range picker as every other page, from the last hour to ninety days, so you can look at the shape of the system around the time the incident started. An application filter at the top starts at all applications and narrows the picture to one site or app and everything it reaches. A data store that is drawn but that no traced request reaches is worth a look too: either it is unused, or the service that uses it is not instrumented yet.

The same picture, from where you stand

An application's overview, a service's page and a machine's page each show the same graph from their own point of view, and every other box is a link to the page that draws it from there. A single trace shows "who called whom" for that one request. The map is one model, read from wherever the question starts.

Trace of POST /api/checkout showing shop-api calling checkout, and the spans each one recorded
One request's own map: the services it passed through, each with its timing and status

The reference is Topology, and the traces that feed it are described in Services and traces.

See your real architecture

Install the host agent and the browser tag; the first edges appear with the first requests.

Start free or read Getting started.

More from the blog