[Feature]: Visualize uninstrumented services in the dependency diagrams
#3,804 opened on Jul 8, 2022
Description
Requirement
Visualize services in the dependency diagram even when they are not instrumented, but known from the caller side.
Problem
When the trace leaf nodes that represent outbound calls to uninstrumented services, those services are not shown in the dependency diagram (e.g. see how Zipkin shows them in #3803).
Proposal
Jaeger can infer that there is an existing callee service when the caller service logs a span with tag span.kind=client without the corresponding span.kind=server span.
There are several places in the code base where this will need to be accounted for:
- in the in-memory storage used by all-in-one (the easiest to start with)
- in the Flink/Spark jobs for production usage
Aside from changing the graph logic, another alternative is to have a trace enrichment which will add artificial server spans to the trace. Then the graph building logic would not need to change at all, and the inferred nodes could also be shown in the single-trace views.
Open questions
Deciding what to call the missing callee services can be tricky. We will need to implement a heuristic that derives the name from some of the tags of the client span:
- based on OpenTracing semantic conventions
peer.servicepeer.addresspeer.ip?+peer.port
- based on similar OTEL semantic conventions
There was a discussion in OTEL once about labeling the type of downstream service (e.g. an SQL db, etc), which could also be taken into account when naming the derived services.