0

我有一个调用 grpc 服务 A 的客户端调用另一个 grpc 服务 B。我想使用ServerInterceptor实现来捕获从客户端开始的根跨度(级别 1)下的整个调用跟踪,并将服务 A 作为其子跨度(级别 2 ) 和服务 B 作为下一级子跨度(在第 3 级),如下所示:

Client Span
   |
   |__ Server A Span
              |
              |__ Server B Span

我想为此目的使用客户端和服务器拦截器,因为我可以跟踪所有方法调用,而无需显式检测整个产品代码。因此,我需要在进行每个子调用时将跨度上下文注入父跨度,以便子级拦截器可以在创建自己的跨度时提取并将其用作父跨度。

由于我需要在服务器启动时声明并传递所有拦截器,如此处所示因此这些拦截器不会相互交互。在这种情况下,如何在每个级别动态注入跨度上下文?有没有办法在拦截另一个呼叫时将 ServerInterceptor 添加到已启动的服务中?

换句话说,如何在使用单独的服务器跟踪拦截器跟踪的服务之间传播 spans 上下文?

这是我添加拦截器的方式:

server = ServerBuilder.forPort(port)
.addService(ServerInterceptors.intercept(service, someInterceptor,
    someOtherInterceptor, serverTracingInterceptor))
.build()
.start();

我正在尝试创建类似于这些的服务器和客户端跟踪拦截器: ServerTracingInterceptor.javaCl​​ientTracingInterceptor.java

如果这是不可能的,你能建议替代方法吗?

谢谢!

4

1 回答 1

1

这绝对是一个错误。请提交针对 opentracing java-grpc 的问题

于 2019-01-11T02:52:13.430 回答