问题:
使用OTel Java SDK将observability
堆栈从Sping Boot 版本3.1.3
升级到3.2.0
时,会遇到以下异常:
2023-11-26T16:00:43.087Z WARN [order service,,] 1 --- [order service] [BatchSpanProcessor_WorkerThread-1] [] i.o.exporter.zipkin.ZipkinSpanExporter : Failed to export spans
org.springframework.web.client.HttpClientErrorException$BadRequest: 400 Bad Request: "valid annotation timestamp required<EOL>"
at org.springframework.web.client.HttpClientErrorException.create(HttpClientErrorException.java:103)
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:183)
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:137)
at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63)
at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:932)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:881)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:781)
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:663)
at org.springframework.boot.actuate.autoconfigure.tracing.zipkin.ZipkinRestTemplateSender$RestTemplateHttpPostCall.doExecute(ZipkinRestTemplateSender.java:68)
at org.springframework.boot.actuate.autoconfigure.tracing.zipkin.ZipkinRestTemplateSender$RestTemplateHttpPostCall.doEnqueue(ZipkinRestTemplateSender.java:75)
at zipkin2.Call$Base.enqueue(Call.java:406)
at io.opentelemetry.exporter.zipkin.ZipkinSpanExporter.export(ZipkinSpanExporter.java:82)
at io.micrometer.tracing.otel.bridge.CompositeSpanExporter.lambda$export$3(CompositeSpanExporter.java:88)
at java.base/java.lang.Iterable.forEach(Iterable.java:75)
at io.micrometer.tracing.otel.bridge.CompositeSpanExporter.export(CompositeSpanExporter.java:88)
at io.opentelemetry.sdk.trace.export.BatchSpanProcessor$Worker.exportCurrentBatch(BatchSpanProcessor.java:327)
at io.opentelemetry.sdk.trace.export.BatchSpanProcessor$Worker.run(BatchSpanProcessor.java:245)
at java.base/java.lang.Thread.run(Thread.java:833)
字符串
配置:
Sping Boot 版本:3.2.0
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
型
跟踪不一致性:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-tracing-bridge-otel</artifactId>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-exporter-zipkin</artifactId>
</dependency>
型
意见:
在Sping Boot 版本3.2.0中使用observability
堆栈时遇到HttpClientErrorException$BadRequest
异常。版本3.1.3不会出现此问题。
任何见解或协助解决这个问题将不胜感激。
编辑-1:
复制步骤
- 克隆存储库:food-delivery-backend
- checkout 分支/tag:
v3.2.0
- 查看README.md了解如何运行
- 现在检查Grafana中的
order
API日志
其他信息 - 工作样品( Spring Boot 3.2.0):
- v3.2.0/restaurant-未观察到问题。
- 不合格样本(Sping Boot 3.2.0):
- v3.2.0/order-发生异常。
编辑-2: - 对于
brave
和opentelemetry-java
依赖项使用Sping Boot 版本3.1.3
时不存在错误-Example - 该问题似乎与Sping Boot 3.2.0与
opentelemetry-java
之间的交互有关
编辑-3:
Sping Boot 3.2.0使用以下跟踪版本
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-tracing-bridge-otel</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-exporter-zipkin</artifactId>
<version>1.31.0</version>
</dependency>
型
Sping Boot 3.1.3使用以下跟踪版本
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-tracing-bridge-otel</artifactId>
<version>1.1.4</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-exporter-zipkin</artifactId>
<version>1.25.0</version>
</dependency>
型
我尝试使用Sping Boot 3.2.0对跟踪版本进行不同的排列,以确定导致异常的特定依赖项。然而,以下组合仍然存在问题:
1.** Spring Boot 3.2.0与千分尺跟踪1.2.0和OTel导出器Zipkin 1.25.0**
产品编号:GitHub Link
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-tracing-bridge-otel</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-exporter-zipkin</artifactId>
<version>1.25.0</version>
</dependency>
型
1.** Spring Boot 3.2.0与千分尺跟踪1.1.4和OTel导出器Zipkin 1.31.0**
产品编号:GitHub Link
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-tracing-bridge-otel</artifactId>
<version>1.1.4</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-exporter-zipkin</artifactId>
<version>1.31.0</version>
</dependency>
型
在这两种情况下,异常仍然存在。目前还不清楚跟踪版本与Sping Boot 3.2.0的具体组合会触发该问题。
编辑-4:
在实现了@Jonatan Ivanov在评论中建议的最小设置后,我建立了两个配置-一个使用H2数据库,另一个在H2之上合并了用于千分尺跟踪的datasource-micrometer-spring-boot
依赖项。在执行具有datasource-micrometer-spring-boot
依赖项的应用程序时,我在日志中遇到了一个错误,表明该特定依赖项存在潜在问题。
下面是依赖关系配置:
<dependency>
<groupId>net.ttddyy.observation</groupId>
<artifactId>datasource-micrometer-spring-boot</artifactId>
<version>1.0.2</version>
</dependency>
型
以下是相应的GitHub链接:
1.只有H2:GitHub Repository - Only H2
1.带H2和datasource-micrometer-spring-boot
:GitHub Repository - H2 and Micrometer Tracing
我还在项目中提出了一个GitHub问题,可以在以下位置找到:GitHub Issue - datasource-micrometer
1条答案
按热度按时间dfddblmv1#
由于在这方面的合作,千分尺跟踪中的一个错误是identified,然后发布了fixed(1.2.1)。请升级您的千分尺跟踪版本以使用至少1.2.1(您也可以等到下一个 Boot 版本(
3.2.1
),因为它应该会选择修复的版本)。