You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 3:如何忽略Liveness/Readiness端点的Jaeger追踪

如何在Spring Boot 3中排除健康检查端点的Jaeger链路追踪记录

根据你使用的链路追踪依赖,有几种不同的实现方式,优先推荐配置化方案:

1. 基于Spring Boot原生OpenTelemetry配置(推荐)

如果你的Spring Boot 3应用使用默认的OpenTelemetry整合Jaeger,直接在配置文件中添加排除规则即可:

application.yml 配置

management:
  tracing:
    exclude:
      - "/context/actuator/health/liveness"
      - "/context/actuator/health/readiness"

application.properties 配置

management.tracing.exclude[0]=/context/actuator/health/liveness
management.tracing.exclude[1]=/context/actuator/health/readiness

注意:如果你的应用没有自定义上下文路径/context,直接写/actuator/health/liveness即可。

2. 基于Jaeger OpenTracing Starter配置

如果你的项目依赖的是io.opentracing.contrib:opentracing-spring-web-starter这类Jaeger原生整合包,可以通过正则匹配排除路径:

application.yml 配置

opentracing:
  spring:
    web:
      skip-pattern: "/context/actuator/health/.*"

这个正则会匹配所有/context/actuator/health/开头的端点,包括存活和就绪检查。

3. 自定义过滤器拦截健康检查请求

如果上述配置不生效,可以自定义一个Web过滤器,直接跳过健康检查请求的链路追踪:

import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;
import java.io.IOException;

@Component
public class HealthCheckTracingSkipFilter extends OncePerRequestFilter {

    private static final String[] EXCLUDED_PATHS = {
        "/context/actuator/health/liveness",
        "/context/actuator/health/readiness"
    };

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
            throws ServletException, IOException {
        String requestUri = request.getRequestURI();
        for (String excludedPath : EXCLUDED_PATHS) {
            if (requestUri.equals(excludedPath)) {
                filterChain.doFilter(request, response);
                return;
            }
        }
        filterChain.doFilter(request, response);
    }
}

4. 自定义SpanProcessor过滤Span

如果需要更精细的控制,可以自定义SpanProcessor,在Span导出前过滤掉健康检查相关的记录:

import io.opentelemetry.api.trace.Span;
import io.opentelemetry.context.Context;
import io.opentelemetry.sdk.trace.data.SpanData;
import io.opentelemetry.sdk.trace.export.SpanProcessor;
import org.springframework.stereotype.Component;

@Component
public class HealthCheckSpanFilterProcessor implements SpanProcessor {

    private static final String[] EXCLUDED_OP_NAMES = {
        "GET /context/actuator/health/liveness",
        "GET /context/actuator/health/readiness"
    };

    @Override
    public void onStart(Context parentContext, Span span) {
        String spanName = span.getName();
        for (String excludedOp : EXCLUDED_OP_NAMES) {
            if (spanName.equals(excludedOp)) {
                span.setAttribute("otel.skip", true);
            }
        }
    }

    @Override
    public boolean isStartRequired() {
        return true;
    }

    @Override
    public void onEnd(SpanData spanData) {
        String spanName = spanData.getName();
        for (String excludedOp : EXCLUDED_OP_NAMES) {
            if (spanName.equals(excludedOp)) {
                return; // 不导出该Span
            }
        }
        // 若包装了其他处理器,需调用delegate.onEnd(spanData)
    }

    @Override
    public boolean isEndRequired() {
        return true;
    }
}

内容的提问来源于stack exchange,提问作者Y.A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 06:47:39