如何在prometheus中公开webClient指标?

时间:2019-10-30 19:59:11

标签: spring kotlin reactive-programming prometheus spring-webclient

我想将WebClient调用的指标从服务公开到下游系统,需要诸如请求计数,最小,最大响应时间之类的指标。

我想知道如何为响应式Web客户端编写量规。

这里是我想与webclient一起使用的示例MeterBinder。

class Metrics : MeterBinder {
    override fun bindTo(registry: MeterRegistry) {
        Gauge.builder("metrics", Supplier { Math.random() })
                .baseUnit("status")
                .register(registry)
    }
}

1 个答案:

答案 0 :(得分:1)

如果要获取WebClient调用的指标,可以使用ExchangeFilterFunction(用作拦截器)。默认情况下,有一个ExchangeFilterFunction实现,即MetricsWebClientFilterFunction,可以与WebClient一起作为过滤器添加,以提供诸如请求数,响应时间和总响应时间之类的指标。

  val metricsWebClientFilterFunction = MetricsWebClientFilterFunction(meterRegistry, DefaultWebClientExchangeTagsProvider(), "webClientMetrics")
  WebClient.builder()
           .baseUrl("http://localhost:8080/test")
           .filter(metricsWebClientFilterFunction)
           .build()

这将以prometheus公开此WebClient调用的所有指标。 普罗米修斯样本输出:

webClientMetrics_seconds_count{clientName="localhost",method="GET",status="200",uri="/test",} 2.0
webClientMetrics_seconds_sum{clientName="localhost",method="GET",status="200",uri="/test",} 2.05474855
webClientMetrics_seconds_max{clientName="localhost",method="GET",status="200",uri="/test",} 1.048698171

要编写自定义指标,您可以实现ExchangeFilterFunction并编写用于获取指标的自定义实现,并将其添加到WebClient筛选器中。