我认为我们彼此误解了,因此我整理了一个可供您玩的最小可重复样本。
我期望发生的情况是:任何与呼叫相关的跨度都不/actuator/health
应被报告。
实际情况:任何自定义观察、Spring 安全观察或数据源观察等仍被报告,但现在已断开连接。
从你的回复中我了解到的情况来看,你正在假设这样的事情应该有效:
@Configuration
public class TestConfiguration {
@Bean
ObservationPredicate ignoreActuator() {
return (s, context) -> ignoreActuatorRecursive(context);
};
public boolean ignoreActuatorRecursive(Observation.ContextView context) {
if (context instanceof ServerRequestObservationContext serverRequestObservationContext) {
HttpServletRequest carrier = serverRequestObservationContext.getCarrier();
return !carrier.getServletPath().startsWith("/actuator");
}
if (context.getParentObservation() != null) { // <----- getParentObservation() is always null
return ignoreActuatorRecursive(context.getParentObservation().getContextView());
}
return true;
}
}
这会导致报告以下内容:
这是不正确的行为,因为它会创建断开的跨度,并且实际上不会导致报告给跟踪后端的数据有任何有意义的减少。该配置不起作用有几个原因:
- 从来没有家长对这些观察进行过观察
- Spring security 没有可匹配的 http.url 属性(也不应该有)
- 您在应用程序中可能拥有的任何自定义观察结果(例如数据源等)也将在此处报告,除非您添加属性以匹配每个观察结果的 URL(其中一些您无法控制)
这对你有帮助吗?此应用程序仅使用该配置运行,pom 中的内容如下:
```xml
4.0.0
启动
spring-boot-starter-parent
3.0.3
com.示例
演示
0.0.1-快照
演示
Spring Boot 的演示项目
17
启动
spring-boot-starter-执行器
启动
spring-boot-starter-web
启动
spring-boot-starter-安全
io.微米
微米观察
io.微米
微米追踪桥梁酒店
io.opentelemetry
opentelemetry-导出器-zipkin
io.微米
微米注册表-普罗米修斯
运行
启动
spring-boot-maven 插件
```