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

如何用Micrometer Tracing埋点Apache HttpClient?请求未加追踪头

问题原因与解决方案

你当前使用的MicrometerHttpClientInterceptor仅负责收集HTTP客户端的指标数据(如请求次数、响应耗时等),不具备分布式追踪上下文传递的能力,因此不会自动添加traceparent这类追踪头。以下是两种可行的解决方案:

方案一:基于Micrometer Tracing实现追踪头传递

Micrometer Tracing是专门用于分布式追踪的模块,它可以和Apache HttpClient结合,自动为请求添加追踪头并传递上下文。

1. 引入必要依赖

如果使用Maven,添加以下依赖(版本请使用对应Spring Boot版本适配的稳定版):

<!-- Micrometer Tracing核心依赖 -->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-tracing</artifactId>
</dependency>
<!-- 桥接Brave作为追踪实现 -->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-tracing-bridge-brave</artifactId>
</dependency>
<!-- Brave的Apache HttpClient适配 -->
<dependency>
    <groupId>io.zipkin.reporter2</groupId>
    <artifactId>zipkin-reporter-brave</artifactId>
</dependency>

2. 配置带追踪的HttpClient

使用Brave提供的TracingHttpClientBuilder构建客户端,它会自动添加追踪拦截器:

import brave.http.HttpTracing;
import brave.apache.http.TracingHttpClientBuilder;
import org.apache.http.client.HttpClient;

// Spring环境下HttpTracing会被自动注入,非Spring环境可手动构建Tracing实例
public HttpClient createTracedHttpClient(HttpTracing httpTracing) {
    // 构建带追踪的HttpClient
    return TracingHttpClientBuilder.create(httpTracing)
            // 若需要保留原有指标收集,可继续添加Micrometer指标拦截器
            .addInterceptorFirst(new MicrometerHttpClientInterceptor(
                    new SimpleMeterRegistry(),
                    x -> x.getRequestLine().getUri(),
                    Tags.empty(),
                    false
            ).getRequestInterceptor())
            .addInterceptorLast(new MicrometerHttpClientInterceptor(
                    new SimpleMeterRegistry(),
                    x -> x.getRequestLine().getUri(),
                    Tags.empty(),
                    false
            ).getResponseInterceptor())
            .build();
}

方案二:单独使用Brave的HttpClient拦截器

如果你更倾向于原生Brave的实现,也可以直接使用Brave的TracingHttpClientInterceptor,效果和上述方案一致:

import brave.Tracing;
import brave.apache.http.TracingHttpClientInterceptor;
import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.HttpClients;

public HttpClient createBraveTracedHttpClient(Tracing tracing) {
    TracingHttpClientInterceptor interceptor = TracingHttpClientInterceptor.create(tracing);
    return HttpClients.custom()
            .addInterceptorFirst(interceptor)
            // 保留指标拦截器
            .addInterceptorFirst(interceptorProvider.getRequestInterceptor())
            .addInterceptorLast(interceptorProvider.getResponseInterceptor())
            .build();
}

关键提示

  • 指标收集和分布式追踪是两个独立的功能:MicrometerHttpClientInterceptor负责指标,追踪头传递需要依赖Micrometer Tracing或Brave的拦截器。
  • Spring Boot环境下,只要引入上述依赖,HttpTracing和Tracing实例会被自动配置,无需手动初始化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 02:16:19