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

Spring Cloud Sleuth+Gateway:仅日志TraceId/SpanId不传递请求头

解决Spring Cloud Gateway不传递X-B3追踪字段到下游的问题

一、优先通过配置项实现

Spring Cloud Sleuth自带控制追踪头传播的配置开关,直接在配置文件中添加以下配置即可实现需求:

YAML格式(application.yml)

spring:
  sleuth:
    propagation:
      enabled: false
    baggage:
      remote-fields: ""
      remote-fields-prefix: ""

Properties格式(application.properties)

spring.sleuth.propagation.enabled=false
spring.sleuth.baggage.remote-fields=
spring.sleuth.baggage.remote-fields-prefix=

配置说明:

  • spring.sleuth.propagation.enabled=false:关闭跨服务的追踪上下文传播,直接阻止X-B3-*系列头(如X-B3-TraceId、X-B3-SpanId等)被添加到下游请求中。
  • 清空remote-fields和remote-fields-prefix:防止自定义的追踪 baggage 字段被传递到下游。

配置后,Gateway内部仍会生成TraceId和SpanId用于日志记录,但不会将这类字段通过HTTP头下发给下游服务。

二、配置不生效时,自定义过滤器处理

如果上述配置未达到预期,可以自定义GatewayFilter强制移除追踪相关请求头:

import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;

@Component
public class RemoveTraceHeadersFilter extends AbstractGatewayFilterFactory<RemoveTraceHeadersFilter.Config> {

    private static final String[] TRACE_RELATED_HEADERS = {
        "X-B3-TraceId",
        "X-B3-SpanId",
        "X-B3-ParentSpanId",
        "X-B3-Sampled",
        "X-B3-Flags",
        "baggage"
    };

    public RemoveTraceHeadersFilter() {
        super(Config.class);
    }

    @Override
    public GatewayFilter apply(Config config) {
        return (exchange, chain) -> {
            ServerWebExchange modifiedExchange = exchange.mutate()
                    .request(request -> {
                        // 遍历移除所有追踪相关请求头
                        for (String header : TRACE_RELATED_HEADERS) {
                            request.headers(headers -> headers.remove(header));
                        }
                    })
                    .build();
            return chain.filter(modifiedExchange);
        };
    }

    public static class Config {
        // 可在此扩展自定义配置参数,比如新增需要移除的额外头字段
    }
}

随后在路由配置中引用该过滤器:

spring:
  cloud:
    gateway:
      routes:
        - id: your_route_id
          uri: lb://your-target-service
          predicates:
            - Path=/your/path/**
          filters:
            - RemoveTraceHeadersFilter

这种方式能强制清除所有发往下游请求中的追踪头,同时不影响Gateway内部的TraceId、SpanId日志记录。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:35:59