SpringBoot3+Micrometer如何排除指定URI不生成TraceId/SpanId
SpringBoot 3 + Micrometer Observation 排除指定路径生成Trace/Span
有两种常用方式可以实现排除特定路径(比如/actuator/prometheus)不生成trace_id/span_id:
方式一:通过配置文件直接指定排除规则
在application.yml(或application.properties)中添加以下配置:
YAML格式
micrometer: observation: filter: exclude-patterns: "/actuator/prometheus"
Properties格式
micrometer.observation.filter.exclude-patterns=/actuator/prometheus
如果需要排除多个路径,可用逗号分隔:
micrometer: observation: filter: exclude-patterns: "/actuator/prometheus,/actuator/health/**"
该配置会让Micrometer Observation自动跳过匹配指定路径的请求,不生成对应的trace和span。
方式二:自定义ObservationFilter实现更灵活的排除逻辑
如果需要更复杂的判断规则(比如结合请求方法、请求头做额外判断),可以自定义一个ObservationFilter Bean:
import io.micrometer.observation.Observation; import io.micrometer.observation.ObservationFilter; import jakarta.servlet.http.HttpServletRequest; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; @Configuration public class ObservationConfig { @Bean public ObservationFilter actuatorExclusionObservationFilter() { return new ObservationFilter() { @Override public boolean shouldFilter(Observation observation) { ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); if (attributes == null) { return false; } HttpServletRequest request = attributes.getRequest(); String path = request.getRequestURI(); // 可添加任意自定义判断逻辑 return path.startsWith("/actuator/prometheus") || path.startsWith("/actuator/health"); } }; } }
当shouldFilter方法返回true时,对应的Observation会被过滤,不会生成trace_id和span_id。
内容的提问来源于stack exchange,提问作者farid
相关产品推荐
相关产品推荐

