Before you start. You need traces from at least two services that call
each other. A single service produces an inventory entry and no edges.
What identifies a service
service.name, and nothing else.
Two corollaries worth knowing before you name anything:
- The same name in two environments is one service. Use
deployment.environmentto separate them, notcheckout-api-staging. - The same name in two clusters is one service. Set a cluster name when installing a Collector or agent per cluster, or two clusters silently merge.
Reading the map
The map is scoped to the time range. A service that was quiet in the last
15 minutes is absent from a 15-minute map. Widen the range before concluding
something is gone.
Why an edge is missing
In likelihood order:1
Context propagation broke
The callee received no
traceparent and started its own trace, so there is
no parent-child relationship to draw. The tell is that the callee still
appears as a node, with its own root traces.2
One side is not instrumented
A service that emits nothing cannot appear, and its callers show a call to
an unnamed peer instead of an edge.
3
Independent sampling
Services sampling separately produce partial traces, so some edges exist in
some traces and not others. See
Sampling.
4
The call is not over an instrumented protocol
Work handed over through a queue, a shared database or a file is a real
dependency that produces no span linking the two.
Zero-code fills the gaps
The most common reason a map is incomplete is that some services were never instrumented and never will be. The eBPF agent observes them at the socket boundary, so they appear without anyone changing their code. That is the strongest case for zero-code instrumentation: coverage of exactly the services an SDK rollout was never going to reach. See Zero-code instrumentation.What else is discovered
Versions are how you connect a regression to a release. If error rate
moved at the same moment a new
service.version appeared, you have your
answer in one step. This requires setting service.version — it is the third
most valuable resource attribute after name and environment.Next
Explore traces
The spans the map is built from.
Infrastructure
Hosts, containers and Kubernetes beneath these services.
Zero-code instrumentation
Fill the gaps without changing code.