Метрики, такие как время отклика API в весеннем облачном шлюзе - PullRequest
1 голос
/ 29 февраля 2020

Я использую Spring Cloud Gateway и хотел бы получить метрики для всех попаданий API. Метрики включают время отклика, коды ошибок и т. Д. c. Я использую Hoxton.RELEASE версию облака Spring. Я попытался использовать /actuator/metrics/gateway.requests, как предложено в их документации, но это не сработало. Также будет лучше, если эти метрики будут доступны через метрики jmx. Я также попытался использовать jmx и визуализировал его на jconsole, но он не отображал время отклика, например, c для API.

Может кто-нибудь подсказать, как это сделать? Мы должны использовать его в производстве, и это важный фактор для нас.

1 Ответ

0 голосов
/ 14 апреля 2020

Вы можете зафиксировать время ответа всех обращений API к весеннему облачному шлюзу, написав настраиваемую фабрику фильтров, как показано ниже:

    ResponseFilterFactory extends AbstractGatewayFilterFactory<ResponseFilterFactory.Config> {

    public ResponseFilterFactory() {
            super(Config.class);
        }

       @Override
public GatewayFilter apply(Config config) {
return new OrderedGatewayFilter((exchange, chain) -> {
// Pre-processing
startTime = System.currentTimeMillis();

    return chain.filter(exchange)
      .then(Mono.fromRunnable(() -> {
          // Post-processing
             String serviceResponseStatus= exchange.getResponse().getStatusCode().toString();

                if(serviceResponseStatus.startsWith("2")){
                    serviceResponseStatus="Success";
                }
                else{
                    serviceResponseStatus="Failure";
                }
            long execTime = System.currentTimeMillis() - startTime;
            LOGGER.info("caller={}, serviceName={}, serviceResponseStatus={}, serviceResponseTime(ms)={}", Objects.isNull(caller) ? "default" : caller,
                    serviceName, serviceResponseStatus, execTime);

      }));
},1);
}


        public static class Config {
                private String headerName;

                public String getHeaderName() {
    // add some thing to config if you want to log along with resp time, ex. headers etc
                       return null;
                }
        }

После этого вы можете добавить ее в свой файл конфигурации маршрутизации по умолчанию фильтр:

  cloud:
    gateway:
      default-filters:
      - name: ResponseFilterFactory
...