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(); } }
验证方式
- 重启应用,主动发起几次下游服务调用(Micrometer指标为懒加载,无实际请求时不会初始化对应指标项)
- 访问
http://localhost:8092/actuator/prometheus端点,即可检索到http_client_requests_seconds_count、http_client_requests_seconds_sum指标,指标默认携带method、uri、status、clientName标签,分别对应请求方法、下游接口路径、响应状态码、下游服务标识。
注意:如果项目中自定义了WebClient的拦截器链,不要覆盖掉框架自动注入的指标相关过滤器/观测配置,否则会导致指标采集失效。
内容的提问来源于stack exchange,提问作者Santrupta Dash
相关产品推荐
相关产品推荐

