Spring Boot集成OpenTelemetry时如何排除健康检查URL
在Spring Boot中排除OpenTelemetry指定URL的链路追踪
方式一:通过配置文件直接排除
这是最简便的方法,OpenTelemetry的Spring Web自动 instrumentation提供了现成配置项用于排除指定URL。
使用application.properties
添加以下配置,支持Ant风格路径匹配(**表示任意层级路径),多个URL用逗号分隔:
# 排除健康检查及相关端点 otel.instrumentation.spring-web.excluded-urls=/actuator/health/**,/actuator/info
使用application.yml
对应YAML格式的配置:
otel: instrumentation: spring-web: excluded-urls: "/actuator/health/**,/actuator/info"
方式二:通过环境变量配置
如果是容器化部署或需要通过环境变量传递配置,将配置项转为大写,点替换为下划线:
OTEL_INSTRUMENTATION_SPRING_WEB_EXCLUDED_URLS="/actuator/health/**,/actuator/info"
方式三:自定义Span过滤(进阶场景)
如果需要更灵活的过滤逻辑(比如结合请求方法、请求头判断),可以自定义SpanProcessor过滤指定Span:
- 实现自定义SpanProcessor:
import io.opentelemetry.context.Context; import io.opentelemetry.sdk.trace.ReadWriteSpan; import io.opentelemetry.sdk.trace.ReadableSpan; import io.opentelemetry.sdk.trace.SpanProcessor; public class ExcludeHealthCheckSpanProcessor implements SpanProcessor { private static final String HEALTH_CHECK_PREFIX = "/actuator/health"; @Override public void onStart(Context parentContext, ReadWriteSpan span) { // 获取请求路径属性 String requestPath = span.getAttribute("http.target"); if (requestPath != null && requestPath.startsWith(HEALTH_CHECK_PREFIX)) { // 直接结束Span,不记录该链路 span.end(); } } @Override public boolean isStartRequired() { return true; } @Override public void onEnd(ReadableSpan span) { // 无需额外处理 } @Override public boolean isEndRequired() { return false; } }
- 注册自定义SpanProcessor到OpenTelemetry SDK:
import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.trace.SdkTracerProvider; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class OpenTelemetryConfig { @Bean public OpenTelemetrySdk openTelemetrySdk() { SdkTracerProvider tracerProvider = SdkTracerProvider.builder() .addSpanProcessor(new ExcludeHealthCheckSpanProcessor()) // 这里添加你的其他配置,比如Span导出器等 .build(); return OpenTelemetrySdk.builder() .setTracerProvider(tracerProvider) .buildAndRegisterGlobal(); } }
内容的提问来源于stack exchange,提问作者suraj
相关产品推荐
相关产品推荐

