我们正在尝试向微服务添加跟踪,以便可以在 google Stackdriver UI 中查看。我们正在使用部署到 Kubernetes 容器中的 Java Springboot 应用程序,每个微服务都通过 http 进行通信。我们已经看到有 Sleuth 和 Zipkin,如果我们将 RestTemplate 移动到一个 bean 上,它们就可以工作。但是,我们真的不想在每个容器中部署 zipkin pod 或创建新的 zipkin 收集器 pod。理想情况下,我们希望仅使用 google cloud tracking sdk 和 sleuth/zipkin 来完成这项工作。使用 sdk,我们可以使用 google cloud grpc 库将数据直接从应用程序发送到 Stackdriver 中。我们现在遇到的问题是我们可以将跟踪 id 发送到下游微服务,但我们似乎无法找到一种方法来在相同的跟踪 id 上创建一个新的跨度,它总是会创建一个新的跨度。我似乎找不到任何有关如何执行此操作的文档。当然,我们正在做的是构建这个库的目的吗?对此有任何帮助的指针都会很棒。
添加更多信息......
我无法提供实际代码,因为这是我的问题,我实际上找不到我想做的事情。
让我尝试用一些代码/伪代码来解释。所以让我们假设这种情况,我有 3 个微服务,A、B 和 C。
Microservice A (top level where trace is created)
TraceContext context = tracer.startSpan("myspan1");
TraceId traceId = context.getHandle().getCurrentSpanContext().getTraceId();
Call Microservice B over http passing traceId in the B3-X-TraceId header
tracer.endSpan(context);
MicroService B
Read B3-X-TraceId from header
So at this point I want to call Microservice C but I want to create a new span on the same trace
I just do not see any mechanism to do this and this is where I'm stuck.
This is what I want to do in pseudo code
TraceContext context = tracer.startSpan("myspan2");
attach the trace id that came in the header to the context
Call Microservice C over http passing traceId in the B3-X-TraceId header
tracer.endSpan(context);
希望这对我正在尝试做的事情有意义。