Как выставить метрики webClient в Прометее? - PullRequest
0 голосов
/ 30 октября 2019

Я хочу предоставить метрику вызова WebClient нисходящей системе из сервиса, нужны такие метрики, как количество запросов, мин, макс. Время ответа.

Я хочу знать, как я могунаписать датчик для реактивного веб-клиента.

Вот пример MeterBinder, который мне интересно использовать с веб-клиентом.

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

1 Ответ

1 голос
/ 30 октября 2019

Если вы хотите получить метрики вызова WebClient, вы можете использовать ExchangeFilterFunction , которая используется в качестве перехватчика. По умолчанию существует одна реализация ExchangeFilterFunction, т.е. MetricsWebClientFilterFunction , которую можно добавить в качестве фильтра вместе с вашим WebClient для предоставления таких метрик, как количество запросов, время ответа и общее время ответа.

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

Это представит все метрики этого Звонка WebClient в Прометей. Пример вывода Prometheus:

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.

...