use*_*406 9 spring-boot spring-cloud-sleuth micrometer spring-micrometer micrometer-tracing
我有下面的代码,用于处理来自其他应用程序的请求,这些应用程序通过标头传递traceId Traceparent。我希望它能够从请求中吸收父级 TraceId,并且在 zipkin 仪表板中我应该看到该应用程序与其他应用程序之间的连接。它曾经与spring-cloud-sleuth-zipkin. 现在我迁移到spring boot 3,包改为micrometer-tracing-bridge-otel(参见pom.xml)。现在,它不再从请求中提取父traceId,而是生成一个全为0的默认父traceId,导致应用程序与zipkin仪表板中的其他应用程序断开连接
我使用带有标头的简单卷曲请求进行了测试Traceparent:curl --location --request GET 'http://localhost:8080/test' --header 'Traceparent: 00-63cf0173620c57b0aed605ee94255089-1444ca74c3d2133a-01'但此代码不会从标头中提取父上下文。知道如何进行这项工作吗?
@RestController
public class Test {
@Autowired
private Tracer tracer;
@GetMapping(path="/test")
public ResponseEntity<?> handleTest() {
ScopedSpan span = tracer.startScopedSpan("test span");
return ResponseEntity.ok();
}
}
Run Code Online (Sandbox Code Playgroud)
pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.2</version>
</parent>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-tracing-bridge-otel</artifactId>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-exporter-zipkin</artifactId>
</dependency>
<dependency>
<groupId>io.zipkin.reporter2</groupId>
<artifactId>zipkin-sender-urlconnection</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我认为从 Sleuth(默认使用 Brave)最简单的迁移路径是通过 Brave:
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'io.micrometer:micrometer-tracing-bridge-brave'
implementation 'io.zipkin.reporter2:zipkin-reporter-brave'
Run Code Online (Sandbox Code Playgroud)
另外,标头的名称应该是小写的,另一方面traceparent请参阅文档,任何大小写都必须有效:
为了提高跨多个协议的互操作性并鼓励成功集成,默认情况下供应商应将标头名称保持小写。标头名称是一个没有任何分隔符的单词,例如连字符 (-)。
供应商必须期望标头名称为任何大小写(大写、小写、混合),并且应该以小写形式发送标头名称。
您能否尝试使用小写名称并打开一个问题(如果它仅适用于这种情况)?
我不确定您想在控制器中做什么,但这不是记录跨度的正确方法(请参阅微米追踪的文档)。
此外,我们还有很多可以使用的示例:https://github.com/micrometer-metrics/micrometer-samples
我们有
| 归档时间: |
|
| 查看次数: |
6418 次 |
| 最近记录: |