类似Spring Cloud Gateway中API响应时间的指标

问题描述 投票:1回答:1

我正在使用Spring Cloud Gateway,并且希望捕获所有API匹配的指标。指标包括响应时间,错误代码等。我正在使用Spring Cloud的Hoxton.RELEASE版本。我尝试按照他们的文档中的建议使用/actuator/metrics/gateway.requests,但是没有用。此外,如果可以通过jmx指标使用这些指标,那就更好了。我也尝试使用jmx,并在jconsole上对其进行了可视化处理,但是它没有显示API的响应时间,等等。

有人可以建议如何做吗?我们必须在生产中使用它,这对我们来说是一个重要因素。

spring jmx spring-cloud-gateway
1个回答
0
投票

您可以通过编写如下所示的自定义过滤器工厂来捕获所有API命中对Spring Cloud Gateway的响应时间:

    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
© www.soinside.com 2019 - 2024. All rights reserved.