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

Spring WebFlux如何暴露WebClient请求的Prometheus出站指标

问题根因

当前仅引入了Actuator和Prometheus注册中心的基础依赖,Spring WebFlux使用的WebClient默认不会自动织入Micrometer指标采集逻辑,因此仅能看到服务端入站请求的http_server_requests_seconds相关指标,无法获取下游调用的客户端指标。http_client_requests_seconds_count、http_client_requests_seconds_sum是http_client_requests_seconds直方图指标下的两个子维度,完成配置后会自动暴露。

解决步骤
  • 保留现有pom依赖与application配置,不需要新增第三方依赖,只需要调整WebClient的构建逻辑即可。
  • 禁止直接通过WebClient.create()静态方法硬编码创建客户端实例,必须使用Spring容器管理的WebClient.Builder构建WebClient,显式开启指标采集。

Spring Boot 3.x 版本配置(基于Observation API)

在配置类中注册开启观测的WebClient Bean:

import io.micrometer.observation.ObservationRegistry;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.client.WebClient;

@Configuration
public class WebClientConfig {
    @Bean
    public WebClient webClient(WebClient.Builder builder, ObservationRegistry observationRegistry) {
        return builder
                .baseUrl("替换为实际下游服务根地址")
                .observationRegistry(observationRegistry)
                .build();
    }
}

Spring Boot 2.x 版本配置(基于旧版Metrics API)

在配置类中为WebClient添加指标采集过滤器:

import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.client.WebClient;
import org.springframework.web.reactive.function.client.metrics.MetricsWebClientFilterFunction;

@Configuration
public class WebClientConfig {
    @Bean
    public WebClient webClient(WebClient.Builder builder, MeterRegistry meterRegistry) {
        return builder
                .baseUrl("替换为实际下游服务根地址")
                .filter(new MetricsWebClientFilterFunction(meterRegistry))
                .build();
    }
}
验证方式
  1. 重启应用,主动发起几次下游服务调用(Micrometer指标为懒加载,无实际请求时不会初始化对应指标项)
  2. 访问http://localhost:8092/actuator/prometheus端点,即可检索到http_client_requests_seconds_count、http_client_requests_seconds_sum指标,指标默认携带method、uri、status、clientName标签,分别对应请求方法、下游接口路径、响应状态码、下游服务标识。

注意:如果项目中自定义了WebClient的拦截器链,不要覆盖掉框架自动注入的指标相关过滤器/观测配置,否则会导致指标采集失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 12:06:20