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

如何指定Sleuth结合Zipkin需要进行链路追踪的路径?

Spring Cloud Sleuth 指定需追踪端点的配置方案

核心实现逻辑

Spring Cloud Sleuth 默认会对所有接入的请求端点进行链路追踪,官方没有直接提供「仅追踪指定端点」的配置属性,但可以通过组合采样器自定义 + 请求过滤规则的方式实现需求,常用的实现方案有两种:


方案1:自定义Sampler采样规则

你可以通过实现SamplerFunction<HttpServletRequest>接口,自定义请求的采样逻辑,仅让符合路径匹配规则的请求被追踪:

import org.springframework.cloud.sleuth.http.HttpRequestSampler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.List;

@Configuration
public class SleuthTraceConfig {
    // 配置需要追踪的端点路径列表
    private static final List<String> ALLOWED_TRACE_PATHS = List.of("/api/order/**", "/api/pay/**");

    @Bean
    public HttpRequestSampler httpRequestSampler() {
        return request -> {
            String requestPath = request.getUri().getPath();
            // 匹配指定路径的请求才会被采样追踪
            return ALLOWED_TRACE_PATHS.stream().anyMatch(pattern -> 
                org.springframework.util.AntPathMatcher.match(pattern, requestPath)
            );
        };
    }
}

方案2:配合sleuth.web.additional-skip-pattern反向实现

如果需要追踪的端点数量远少于不需要追踪的端点,也可以先通过正则表达式将所有请求默认设置为跳过,再把不需要跳过的(即需要追踪的)端点排除在skip规则之外:
配置文件(以application.yml为例):

spring:
  sleuth:
    web:
      # 正则规则:所有请求默认跳过,仅/api/user/、/api/product/开头的请求不跳过
      additional-skip-pattern: ^(?!(/api/user/|/api/product/)).*$

注意该方案的正则规则需要根据你的实际端点路径调整,?!为正则的负向先行断言,匹配不符合括号内路径的所有请求,将这类请求全部加入跳过追踪列表,反向实现仅追踪指定端点的效果。


注意事项

  • 两种方案可以独立使用也可以组合使用,自定义采样器的优先级高于配置文件的skip规则
  • 如果使用的是Spring Cloud Sleuth 3.x以上版本,部分配置属性前缀和接口类名和2.x版本存在差异,需对应调整类路径引用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:45:04