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

如何在Spring Boot 3.2中排除Actuator端点向Jaeger导出Span

解决Spring Boot 3.2中OtlpHttpSpanExporter导出Actuator端点Span的问题

下面提供几种实用方案来排除Actuator端点的Span导出:

方法一:通过配置属性快速排除

Spring Boot 3.2的Micrometer Tracing原生支持通过配置排除特定路径,直接在application.yml或application.properties中添加规则:

YAML格式

management:
  tracing:
    sampling:
      probability: 1.0 # 保持正常业务请求的采样率,按需调整
    exclude: "/actuator/**" # 匹配所有Actuator端点路径

Properties格式

management.tracing.exclude=/actuator/**
management.tracing.sampling.probability=1.0

如果只需要排除特定Actuator端点,可指定多个路径用逗号分隔:

management.tracing.exclude: "/actuator/health,/actuator/info"

方法二:自定义SpanProcessor实现复杂过滤

如果需要更灵活的过滤逻辑(比如根据请求方法、Header等判断),可以自定义SpanProcessor拦截并跳过Actuator相关Span:

import io.micrometer.tracing.Span;
import io.micrometer.tracing.SpanProcessor;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

public class ActuatorSpanExclusionProcessor implements SpanProcessor {

    private final SpanProcessor delegate;

    public ActuatorSpanExclusionProcessor(SpanProcessor delegate) {
        this.delegate = delegate;
    }

    @Override
    public void onStart(Span span) {
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        if (attributes != null) {
            HttpServletRequest request = attributes.getRequest();
            String path = request.getRequestURI();
            if (path.startsWith("/actuator/")) {
                span.context().sampled(false);
                return;
            }
        }
        delegate.onStart(span);
    }

    @Override
    public void onEnd(Span span) {
        if (!span.context().sampled()) {
            return;
        }
        delegate.onEnd(span);
    }

    @Override
    public boolean isStartBatchSupported() {
        return delegate.isStartBatchSupported();
    }

    @Override
    public void onStartBatch(Iterable<Span> spans) {
        delegate.onStartBatch(spans);
    }
}

然后将该处理器注册到Spring容器:

import io.micrometer.tracing.SpanProcessor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class TracingConfig {

    @Bean
    public SpanProcessor actuatorSpanExclusionProcessor(SpanProcessor delegate) {
        return new ActuatorSpanExclusionProcessor(delegate);
    }
}

方法三:自定义Brave Sampler(默认实现为Brave时适用)

如果底层使用Brave作为Tracing实现,可通过自定义Sampler过滤Actuator请求:

import brave.sampler.Sampler;
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 BraveSamplerConfig {

    @Bean
    public Sampler actuatorExcludingSampler() {
        return (traceId) -> {
            ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            if (attributes != null) {
                HttpServletRequest request = attributes.getRequest();
                String path = request.getRequestURI();
                return !path.startsWith("/actuator/");
            }
            return true;
        };
    }
}

内容的提问来源于stack exchange,提问作者user2413412

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 19:44:51