Spring Boot 在Micrometer中为单个HTTP请求生成不同的TraceId

2ledvvac  于 7个月前  发布在  Spring
关注(0)|答案(2)|浏览(301)

我最近尝试将spring-boot版本2.7.3和2.7.10升级到3.1.0。由于spring-boot v3.x.x不支持spring-cloud-sleuth,我们必须使用micrometer进行分布式跟踪。然而,traceId在两个服务中是不同的,但与sleuth相同。
我在pom.xml中添加了以下依赖项:

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-tracing-bridge-brave</artifactId>
    <version>1.1.1</version>
    </dependency>
    <dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>context-propagation</artifactId>
    <version>1.0.3</version>
    </dependency>
    <dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-observation</artifactId>
    </dependency>

字符串
并将Tracer的导入更新为io. micrometer. tracing. Tracer。
当我从 Postman 向调用服务B的服务A发送请求时(使用restTemplate),在日志中我可以看到traceId是不同的。TraceId是使用以下代码提取的:

@Autowired 
    io.micrometer.tracing.Tracer tracer;
    String traceId = tracer.currentSpan().context().traceId();


任何人都可以请帮助什么是我错过了traceId的是不同的.早些时候与spring-cloud-sleuth的X-B3-TraceId/ SpanId头是自动添加的,但他们没有添加微米.我需要手动添加它们,如果是这样,那么这些头的名称应该是什么?提前感谢!!

2o7dmzc5

2o7dmzc51#

您的traceId不同,因为跟踪信息没有传播,请检查请求头,默认情况下它应该包含W3C traceparent头。如果没有,您正在使用未检测的http客户端或检测被禁用。如果是这样,请使用检测的客户端/启用检测(WebClient,RestTemplate,OpenFeign等)。
如果你想使用B3,你需要在你的属性中设置它,请参阅文档(如果你愿意,你可以使用多种类型):https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#application-properties.actuator.management.tracing.propagation.type

management.tracing.propagation.type=B3

字符串

nr7wwzry

nr7wwzry2#

请检查您正在使用的RestTemplate是使用RestTemplateBuilder创建的,如下所示。
public class MyClass {

@Bean
public RestTemplate getRestTemplate(RestTemplateBuilder builder) {
    return builder.build();
}

字符串
}
这是由谢尔盖Kargopolov在文章中解释:https://www.appsdeveloperblog.com/micrometer-and-zipkin-in-spring-boot/

相关问题