我们正在使用微服务架构方法重新构建我们的软件平台。
其中大部分使用Spring Boot
库,对于我们的入口点,我们使用Spring Cloud Gateway,它可以轻松集成以Jaeger
在平台中进行跟踪。
我们使用以下 Maven 依赖项来做到这一点:
<dependency>
<groupId>io.opentracing.contrib</groupId>
<artifactId>opentracing-spring-jaeger-cloud-starter</artifactId>
<version>2.0.3</version>
</dependency>
它运行良好,我们可以在Jaeger UI
Web 控制台上看到跟踪。
现在的问题是如何将跟踪信息发送到平台中的下一个内部服务以使每个服务相关联。
有任何想法吗?
我们尝试使用 a 将跟踪信息作为 HTML 标头注入,GlobalFilter
但它正在使用传入的请求,我们需要将它们放在下游请求中……关于如何覆盖HTTPClient
下面使用的任何线索。
@Bean
@Order(-1)
public GlobalFilter tracingFilter() {
return (exchange, chain) -> {
ServerHttpRequest request = exchange.getRequest();
Tracer tracer = TracerResolver.resolveTracer();
Span span = tracer.buildSpan(request.getMethod().toString())
.withTag(Tags.SPAN_KIND.getKey(), Tags.SPAN_KIND_CLIENT)
.start();
Tags.HTTP_URL.set(span, request.getURI().toString());
Tags.HTTP_METHOD.set(span, request.getMethod().toString());
if (request.getURI().getPort() != -1) {
Tags.PEER_PORT.set(span, request.getURI().getPort());
}
ServerHttpRequest.Builder requestBuilder = request.mutate();
tracer.inject(span.context(), Format.Builtin.HTTP_HEADERS, new RequestBuilderCarrier(requestBuilder));
...
}));
};
}