【发布时间】:2020-06-24 07:50:38
【问题描述】:
所以我正在使用 Jaeger 和 OpenTracing 来跟踪我的 Spring Boot 微服务之间的请求。我已经设置了所有必要的配置并添加了依赖项:
<dependency>
<groupId>io.opentracing.contrib</groupId>
<artifactId>opentracing-spring-jaeger-web-starter</artifactId>
<version>2.0.3</version>
</dependency>
到目前为止一切正常。我在 Jaeger UI 中看到了所有的痕迹和跨度,没问题。
但现在我面临的挑战是向特定跟踪添加新跨度,这已经完成。像这样想。客户端调用其中一项服务并开始跟踪。工作完成后,我会在 Jaeger UI 中看到跟踪。但是现在调用客户端想要将一些额外的跟踪数据添加到特定的跟踪中。就像来自其他服务的跟踪信息一样,不在我的微服务范围内。我添加了一个过滤器,因此我可以提取跟踪 ID 并将其发送给客户端。现在客户端发出一个包含附加跟踪信息和跟踪 ID 的请求。然后应将这些信息作为附加跨度添加到已完成的跟踪中。
现在我的问题。有没有办法创建一个跨度并将其添加到一个只有跟踪 id 作为字符串的跟踪?
我已经尝试过 Zipkin,我可以做到:
Span span = new SpanBuilder()
.name(someName)
.traceId(traceId)
.parentId(traceId)
.id(someId)
.kind(Kind.CLIENT)
.build()
然后可以通过在端口 9411 上向我的 zipkin 服务器发出 POST 请求来添加该跨度,这具有将此跨度添加到具有给定 ID 的跟踪的魔力。
使用 OpenTracing 我可以做到:
Span span = tracer.buildSpan(someName)
.asChildOf(**traceSpan**)
.withStartTimestamp(someTime)
.ignoreActiveSpan()
.start();
不幸的是,这种方法需要跨度形式的跟踪来创建新跨度作为该跟踪的子级。鉴于我只能提供跟踪 ID,我不知道如何获得该跟踪所需的跨度。我真的需要调用我的 Jaeger 查询来获取所需的跟踪跨度,还是有其他我没有想到的方法?
真的很想在这方面得到一些帮助。
干杯!
【问题讨论】:
-
我不太确定怎么做。注入器不只是为了将信息注入到当前的跨度上下文中吗?
标签: java spring-boot opentracing jaeger