如何排除要使用springboot3/微米进行观察的一些uri



Hy

我使用的是带有新千分尺观察的弹簧靴3。有没有办法防止为一些路径(如/activator/prometheus)生成trace_id/span_id?观察为每个对/executor/*的调用添加一个跟踪id。

谢谢

通过以下方式定义ObservationRegistry,我设法找到了问题的half解决方案:

@Bean
@ConditionalOnMissingBean
ObservationRegistry observationRegistry() {
PathMatcher pathMatcher = new AntPathMatcher("/");
ObservationRegistry observationRegistry = ObservationRegistry.create();
observationRegistry.observationConfig().observationPredicate((name, context) -> {
if(context instanceof ServerRequestObservationContext) {
return !pathMatcher.match("/actuator/**", ((ServerRequestObservationContext) context).getCarrier().getRequestURI());
} else {
return true;
}
});
return observationRegistry;
}

这不会完全忽略执行机构的请求,只会忽略第一个跨度。因此,例如,如果您的类路径上有SpringSecurity,那么这些跨度将保持不变。

编辑:看起来你不需要重新定义整个观察注册表,你可以使用一个像这里显示的bean:https://docs.spring.io/spring-security/reference/servlet/integrations/observability.html

第2版:据我所知,你需要包括这2个bean,并且不会跟踪任何执行器调用(也完全禁用了对春季安全性的跟踪):

@Bean
ObservationRegistryCustomizer<ObservationRegistry> skipActuatorEndpointsFromObservation() {
PathMatcher pathMatcher = new AntPathMatcher("/");
return (registry) -> registry.observationConfig().observationPredicate((name, context) -> {
if (context instanceof ServerRequestObservationContext observationContext) {
return !pathMatcher.match("/actuator/**", observationContext.getCarrier().getRequestURI());
} else {
return true;
}
});
}
@Bean
ObservationRegistryCustomizer<ObservationRegistry> skipSecuritySpansFromObservation() {
return (registry) -> registry.observationConfig().observationPredicate((name, context) ->
!name.startsWith("spring.security"));
}

此外,您可能需要关注这个问题:https://github.com/spring-projects/spring-framework/issues/29210

你需要提供更多关于问题的信息,但我认为你已经在application.propeties中设置了这一行,比如:

management.endpoints.web.exposure.include=/actuator/*

但存在类似的选项

management.endpoints.web.exposure.exclude=/actuator/prometheus

相关内容

  • 没有找到相关文章

最新更新