0

我有三个服务 A、B 和 C,它们的通信方式是这样的

       HTTP       HTTP
   A +------> B +------> C
nodejs      nodejs      java

我正在使用 OpenTracing 和 Jaeger 进行分布式跟踪。问题是这些服务使用不同的语言,但我仍在尝试传播 A 是父跨度的信息,以便跨度树看起来像这样。

A +----------------+
B +-------+
C         +--------+

目前,A、B 和 C 被报告为没有因果关系的单独痕迹。我见过的所有示例都涉及在相同语言和相同项目构建中的不同微服务之间传播因果关系。没有一个涉及完全独立的服务。

4

1 回答 1

0

您的各个微服务是用哪种语言编写的并不重要,您应该在同一个跟踪中看到它们。鉴于您看到的是三个跟踪而不是一个具有三个跨度的跟踪,上下文传播似乎不起作用。检查 nodejs 服务中的 HTTP 客户端,它们应该执行“注入”操作。然后,您的服务“B”和“C”应该执行“提取”操作。

如果您还没有,请查看Yuri Shkuro 的 OpenTracing 教程。第 3 课是关于上下文传播的,包括注入和提取操作。

我不太确定它在 NodeJS 世界中是如何工作的,但是在 Java 中,在你的类路径中拥有opentracing-contrib/java-web-servlet-filter工具库就足够了,因为它会在其中注册必要的部分正确的钩子并使跟踪上下文可用于每个传入的 HTTP 请求。

于 2019-07-31T16:41:53.647 回答