首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >spring云网关中API的响应时间等指标

spring云网关中API的响应时间等指标
EN

Stack Overflow用户
提问于 2020-02-29 07:12:58
回答 3查看 1.4K关注 0票数 1

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

有人能建议一下怎么做吗?我们必须在生产中使用它,这对我们来说是一个重要的因素。

EN

回答 3

Stack Overflow用户

发布于 2021-10-27 01:25:30

在检查'/actuator/ metrics‘之后,它的指标现在是“'/actuator/metrics/spring.cloud.gateway.requests’-cloud-starter-gateway”上的spring。

票数 1
EN

Stack Overflow用户

发布于 2020-04-14 14:08:20

您可以通过编写自定义的filter工厂来捕获所有API命中到spring云网关的响应时间,如下所示:

代码语言:javascript
运行
AI代码解释
复制
    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;
                }
        }

在此之后,您可以将其作为默认过滤器添加到路由配置文件中:

代码语言:javascript
运行
AI代码解释
复制
  cloud:
    gateway:
      default-filters:
      - name: ResponseFilterFactory
票数 0
EN

Stack Overflow用户

发布于 2021-07-13 09:29:44

我也面临着同样令人头疼的问题。终结点不工作:

代码语言:javascript
运行
AI代码解释
复制
/actuator/metrics/gateway.requests

我最终发现,如果你没有数据(requests, responses),端点将无法工作,当你用浏览器检查它时,它会显示error (这真的不可取,而且会让每个人都感到困惑,就像你和我一样)

我必须编写脚本来卷曲网关,以便生成请求,这样端点就可以有数据工作了

也在应用程序中。属性,您必须确保配置了这些属性

代码语言:javascript
运行
AI代码解释
复制
management.endpoint.gateway.enabled=true # default value

management.endpoints.web.exposure.include=gateway

参考链接:https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.0.RC1/reference/html/#actuator-api

另一个有趣的事情是关于Spring支持Grafana的图形化仪表板,您可以使用Spring中的这个json定义并将其导入到Grafana中。

https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/gateway-grafana-dashboard.json

控制面板将如下所示:

https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/images/gateway-grafana-dashboard.jpeg

参考链接:https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/#the-gateway-metrics-filter

顺便说一句,上面的GatewayFilter也可以工作,但这会给你的过滤器链增加另一层,并且可能对你的网关造成很小的开销,如果你有高负载,你需要考虑这一点,因为它可能会降级你的应用程序

关于JMX,你可以在这里参考Spring官方文档:https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.endpoints.exposing

大多数端点都支持JMX,包括Spring Gateway

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60462831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档