Start here. This is the direct spoken answer to practice first.
Overview
A distributed trace remains useful only when each transport and thread boundary carries the same causal context.
Across HTTP, instrumented Spring clients inject trace headers and the receiving service extracts them to continue the trace. Inside one service, current observation and tracing state is often thread-bound, so arbitrary executor work does not automatically inherit it. I use Spring and Micrometer-supported context propagation or an instrumented executor rather than copying trace IDs by hand.