1. 安装
spring actuator和prometheus,grafana的安装参考cento安装
2. 配置grafana监控图标
springcloud gateway的相关配置可以参考官网github,复制json,import到grafana里面 就能看到监控图了,
其中Successful API Calls里面能看到每个route成功路由的id和路由到的地址(routeId和routeUri),routeUri这个意义并大大,如果想改成request 里面的uri该怎么实现呢?
grafana监控图标对应的是prometheus里面spring_cloud_gateway_requests_seconds_count这个指标,研究springcloud gateway代码可以发现tag是在GatewayRouteTagsProvider里面上报的,如下:
public class GatewayRouteTagsProvider implements GatewayTagsProvider {
@Override
public Tags apply(ServerWebExchange exchange) {
Route route = exchange.getAttribute(GATEWAY_ROUTE_ATTR);
if (route != null) {
return Tags.of("routeId", route.getId(), "routeUri", route.getUri().toString());
}
return Tags.empty();
}
}
回到我们的问题,如果想显示 请求的uri,该怎么实现呢?
自定义一个GatewayTagsProvider,上报请求的uri就可以了
@Component
public class CustomGatewayTagsProvider implements GatewayTagsProvider {
@Override
public Tags apply(ServerWebExchange exchange) {
Route route = exchange.getAttribute(GATEWAY_ROUTE_ATTR);
if (route != null) {
return Tags.of("routeId", route.getId(), "routeUri", exchange.getRequest().getURI().getPath());
}
return Tags.empty();
}
}
注意,这里至少为了不改grafana里面的json配置,简单的把routeUri替换成目标值,可以上报多个tag
回到grafana对应的监控图就可以看到具体的请求uri的调用次数了