有人使用Spring Cloud Gateway实施Jaeger吗?



我们正在使用微服务架构方法重新构建我们的软件平台。

其中大部分使用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 UIWeb 控制台上看到跟踪。

现在的问题是如何将跟踪信息发送到平台中的下一个内部服务,以使每个服务都相关联。

有什么想法吗?

我们尝试使用GlobalFilter将跟踪信息注入为 HTML 标头,但它使用的是传入请求,我们需要将它们放在下游请求中......有关如何覆盖的任何线索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));
...
}));
};
}

我们的解决方案:

Upstream filter 实现 org.springframework.cloud.gateway.filter.headers.HttpHeadersFilter

exchange.getAttributes().put('your_key_here', value);

下游过滤器实现org.springframework.cloud.gateway.filter.headers.HttpHeadersFilter

Object storedValue = exchange.getAttribute('your_key_here'); // NOTE can be null

并通过Spring Java配置(@Bean(注册它们

相关内容

  • 没有找到相关文章

最新更新