我正在使用Spring Cloud Gateway,希望捕获所有API命中的指标。指标包括响应时间、错误代码等。我使用的是Spring cloud的Hoxton.RELEASE版本。我试着按照他们的文档中的建议使用/actuator/metrics/gateway.requests,但不起作用。而且,如果这些指标可以通过jmx指标获得,那就更好了。我也尝试使用jmx,并在jconsole上将其可视化,但它没有显示API的响应时间等。
有人能建议一下怎么做吗?我们必须在生产中使用它,这对我们来说是一个重要的因素。
发布于 2021-10-27 01:25:30
在检查'/actuator/ metrics‘之后,它的指标现在是“'/actuator/metrics/spring.cloud.gateway.requests’-cloud-starter-gateway”上的spring。
发布于 2020-04-14 14:08:20
您可以通过编写自定义的filter工厂来捕获所有API命中到spring云网关的响应时间,如下所示:
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
发布于 2021-07-13 09:29:44
我也面临着同样令人头疼的问题。终结点不工作:
/actuator/metrics/gateway.requests
我最终发现,如果你没有数据(requests, responses)
,端点将无法工作,当你用浏览器检查它时,它会显示error
(这真的不可取,而且会让每个人都感到困惑,就像你和我一样)
我必须编写脚本来卷曲网关,以便生成请求,这样端点就可以有数据工作了
也在应用程序中。属性,您必须确保配置了这些属性
management.endpoint.gateway.enabled=true # default value
management.endpoints.web.exposure.include=gateway
另一个有趣的事情是关于Spring支持Grafana的图形化仪表板,您可以使用Spring中的这个json定义并将其导入到Grafana中。
控制面板将如下所示:
顺便说一句,上面的GatewayFilter也可以工作,但这会给你的过滤器链增加另一层,并且可能对你的网关造成很小的开销,如果你有高负载,你需要考虑这一点,因为它可能会降级你的应用程序
关于JMX,你可以在这里参考Spring官方文档:https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.endpoints.exposing
大多数端点都支持JMX,包括Spring Gateway
https://stackoverflow.com/questions/60462831
复制相似问题