2

我想从服务向下游系统公开 WebClient 调用的指标,需要诸如请求计数、最短、最长响应时间等指标。

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

这是我有兴趣与 webclient 一起使用的示例 MeterBinder。

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

1 回答 1

4

如果要获取 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 筛选器中。

于 2019-10-30T20:11:36.417 回答