Spring Cloud Gateway监控配置示例-全球微资讯
下面是一个简单的Spring Cloud Gateway应用,包括路由配置、过滤器、监控等功能。该应用将请求转发到http://httpbin.org目标地址,并添加了Hystrix和RateLimiter过滤器,使用Prometheus和Grafana进行监控。
【资料图】
@SpringBootApplicationpublic class GatewayApplication { public static void main(String[] args) { SpringApplication.run(GatewayApplication.class, args); } @Bean public RouteLocator routeLocator(RouteLocatorBuilder builder) { return builder.routes() .route(r -> r.path("/get") .filters(f -> f.hystrix(config -> config.setName("hystrixFilter"))) .uri("http://httpbin.org")) .route(r -> r.path("/delay/**") .filters(f -> f.requestRateLimiter(config -> config.setKeyResolver(new RemoteAddrKeyResolver())) .hystrix(config -> config.setName("hystrixFilter"))) .uri("http://httpbin.org")) .build(); }}
在上面的代码中,使用@Bean注解定义了一个RouteLocator类型的bean,用于配置路由信息。使用RouteLocatorBuilder的routes()方法来定义路由规则,使用path()方法定义匹配规则,使用filters()方法添加过滤器,使用uri()方法定义目标地址。
在上面的代码中,第一个路由规则将请求路径为/get的请求转发到http://httpbin.org目标地址,并添加了名为"hystrixFilter"的Hystrix过滤器。第二个路由规则将请求路径为/delay/**的请求转发到http://httpbin.org目标地址,并添加了名为"hystrixFilter"和"rateLimiterFilter"的Hystrix和RateLimiter过滤器,其中RateLimiter过滤器使用RemoteAddrKeyResolver作为KeyResolver,用于限制相同IP地址的请求频率。
下面是Hystrix和RateLimiter过滤器的配置:
@Configurationpublic class FilterConfig { @Bean public HystrixGatewayFilterFactory hystrixGatewayFilterFactory() { return new HystrixGatewayFilterFactory(); } @Bean public RequestRateLimiterGatewayFilterFactory rateLimiterGatewayFilterFactory() { return new RequestRateLimiterGatewayFilterFactory(); }}
在上面的代码中,使用@Configuration注解定义了一个配置类,用于配置Hystrix和RateLimiter过滤器。使用@Bean注解定义了hystrixGatewayFilterFactory()和rateLimiterGatewayFilterFactory()方法,分别返回HystrixGatewayFilterFactory和RequestRateLimiterGatewayFilterFactory类型的bean,用于创建Hystrix和RateLimiter过滤器。
下面是Prometheus和Grafana的监控配置:
@Configurationpublic class MonitoringConfig { @Bean MeterRegistryCustomizer commonTags() { return registry -> registry.config() .commonTags("application", "gateway"); } @Bean PrometheusMeterRegistry prometheusMeterRegistry() { return new PrometheusMeterRegistry(PrometheusConfig.DEFAULT); } @Bean public MeterFilter renameStatusCodeTag() { return MeterFilter.renameTag("status", "http_status"); } @Bean public MeterFilter renameUriTag() { return MeterFilter.renameTag("uri", "request_uri"); } @Bean public GatewayMetrics gatewayMetrics(RouteLocator routeLocator, PrometheusMeterRegistry meterRegistry) { return new GatewayMetrics(routeLocator, meterRegistry, Arrays.asList( new DefaultRouteIdProvider(), new StaticRouteIdProvider("get_route", "/get"), new StaticRouteIdProvider("delay_route", "/delay/**") )); }}
在上面的代码中,使用@Configuration注解定义了一个配置类,用于配置Prometheus和Grafana的监控。使用@Bean注解定义了commonTags()方法,用于设置公共标签,application为gateway。使用@Bean注解定义了prometheusMeterRegistry()方法,返回PrometheusMeterRegistry类型的bean,用于创建PrometheusMeterRegistry实例。使用@Bean注解定义了renameStatusCodeTag()和renameUriTag()方法,分别返回MeterFilter类型的bean,用于重命名标签。使用@Bean注解定义了gatewayMetrics()方法,返回GatewayMetrics类型的bean,用于创建GatewayMetrics实例,并设置路由规则和MeterRegistry。
下面是GatewayMetrics的代码:
public class GatewayMetrics extends RouteMatchingMeterFilter { public GatewayMetrics(RouteLocator routeLocator, MeterRegistry meterRegistry, List routeIdProviders) { super(routeLocator, "gateway.requests", meterRegistry, routeIdProviders); } @Override protected Iterable tags(Route route, URI uri) { return Tags.of(super.tags(route, uri), Tag.of("method", "unknown"), Tag.of("status", "unknown"), Tag.of("request_uri", uri.getPath())); } @Override protected Iterable extraTags(HttpServletRequest request) { return Tags.of("method", request.getMethod()); } @Override protected String tagValue(HttpServletRequest request, String key) { if (key.equals("status")) { Object status = request.getAttribute(ServerWebExchangeUtils.STATUS_CODE_ATTRIBUTE); if (status != null) { return status.toString(); } } return super.tagValue(request, key); }}
在上面的代码中,使用GatewayMetrics继承了RouteMatchingMeterFilter类,用于创建路由规则和MeterRegistry之间的映射关系。在tags()方法中,添加了method、status和request_uri标签。在extraTags()方法中,添加了method标签。在tagValue()方法中,根据ServerWebExchangeUtils.STATUS_CODE_ATTRIBUTE获取status标签的值。
最后,使用Prometheus和Grafana进行监控时,需要添加以下依赖:
io.micrometer micrometer-core io.micrometer micrometer-registry-prometheus
在使用Prometheus和Grafana进行监控之前,需要启动Prometheus服务器,并将Spring Cloud Gateway的监控数据暴露给Prometheus服务器。可以在application.yml文件中添加以下配置:
management: endpoints: web: exposure: include: prometheus endpoint: prometheus: enabled: true
这里,使用management.endpoints.web.exposure.include属性设置将/prometheus端点暴露给外部访问,使用management.endpoint.prometheus.enabled属性设置Prometheus监控启用。当应用程序启动时,Prometheus服务器将开始收集和显示应用程序的监控数据。可以使用Grafana可视化监控数据,例如显示请求响应时间、请求数量等。具体的操作可以参考Grafana的官方文档。
-
Spring Cloud Gateway监控配置示例-全球微资讯
腾讯云 2023-04-15
-
汇总假面骑士Ex-Aid中已经发售的各个版本的腰带,你购入了哪一款?
哔哩哔哩 2023-04-15
-
数字化转型浪潮下:中金财富“1018品牌月”新实践
腾赚网 2023-04-15
-
多少友谊能长存是什么歌_多少友谊能长存是哪首歌歌词_天天微动态
互联网 2023-04-15
-
【新机】4499元起 ROG7/Pro游戏手机发布 8G2/6000mAh电池
小白测评 2023-04-15
-
环球动态:智慧医疗与健康养老_对于智慧医疗与健康养老简单介绍
互联网 2023-04-15
-
当前速读:c8500华为_c8500
互联网 2023-04-14
-
每日短讯:送外卖的38岁川大哲学硕士回到成都:火了之后各类公司抛橄榄枝 有人愿意直接投资
红星新闻 2023-04-14
-
腾达建设 拟推2023年限制性股票激励计划 授予价为1.38元/股
智通财经 2023-04-14
-
“就业招聘+实习见习”无缝衔接!2023上海高校毕业生就业实习招聘会举行-世界播报
上海市教委 2023-04-14
-
Spring Cloud Gateway监控配置示例-全球微资讯
腾讯云 2023-04-15
-
汇总假面骑士Ex-Aid中已经发售的各个版本的腰带,你购入了哪一款?
哔哩哔哩 2023-04-15
-
数字化转型浪潮下:中金财富“1018品牌月”新实践
腾赚网 2023-04-15
-
多少友谊能长存是什么歌_多少友谊能长存是哪首歌歌词_天天微动态
互联网 2023-04-15
-
【新机】4499元起 ROG7/Pro游戏手机发布 8G2/6000mAh电池
小白测评 2023-04-15
-
环球动态:智慧医疗与健康养老_对于智慧医疗与健康养老简单介绍
互联网 2023-04-15
-
当前速读:c8500华为_c8500
互联网 2023-04-14
-
每日短讯:送外卖的38岁川大哲学硕士回到成都:火了之后各类公司抛橄榄枝 有人愿意直接投资
红星新闻 2023-04-14
-
腾达建设 拟推2023年限制性股票激励计划 授予价为1.38元/股
智通财经 2023-04-14
-
“就业招聘+实习见习”无缝衔接!2023上海高校毕业生就业实习招聘会举行-世界播报
上海市教委 2023-04-14
-
感冒咳嗽流鼻涕吃什么好的快点(感冒咳嗽流鼻涕吃什么好的快) 天天消息
车百科 2023-04-14
-
每日信息:福莱特又签光伏玻璃“大单”,预计销售总金额约105.24亿元
巨潮财经网 2023-04-14
-
日本失踪直升机调查进展:发现疑似机载人员遗体-世界时讯
中新网 2023-04-14
-
世界聚焦:特斯拉又降价了?国产新能源该如何求生?
江瀚视野观察 2023-04-14
-
巴西一季度咖啡出口总量下降 对中国市场出口增加
央视新闻 2023-04-14
-
中秋节为什么要吃月饼赏月_吃月饼赏月的原因-天天看热讯
互联网 2023-04-14
-
【全球热闻】给男闺蜜送什么生日礼物
太平洋礼物网 2023-04-14
-
世界要闻:巴黎抗议者强闯奢侈品巨头LVMH总部,LV等品牌股价当天飙升至新高
极目新闻 2023-04-14
-
全球微动态丨2023年世界大健康博览会在武汉举办
工人日报客户端 2023-04-14
-
拜登在爱尔兰观看曲棍球比赛 险些被球击中
参考消息 2023-04-14
-
金三江4月14日快速反弹-当前关注
东方财富Choice数据 2023-04-14
-
湘盾集团:践行“四敢”精神 对标世界一流企业
湘潭在线 2023-04-14
-
世界热推荐:七彩虹 RTX 4070 显卡开售:火神 / 水神 5699 元,战斧 4799 元_天天通讯
城市头条网 2023-04-14
-
【时快讯】曝戈贝尔或再缺战雷霆!直言李凯尔仍是兄弟:没禁赛也打不了湖人
罗说NBA 2023-04-14
-
全球新资讯:江表传中曹操自烧战船的原因_江表
互联网 2023-04-14
-
全球今日报丨长月烬明:冥夜为桑酒抵挡雷劫,澹台烬看见叶夕雾被鹅追开怀大笑
哔哩哔哩 2023-04-13
-
环球观点:欧盟理事会同意向乌克兰军队提供10亿欧元援助
环球网 2023-04-13
-
21健讯Daily|美投资50亿美元开发下一代新冠疫苗;江西取消省内异地就医备案
21世纪经济报道 2023-04-13
-
世界要闻:萨内挨揍后首次露面:嘴唇被打肿!马内已道歉,还可能罚款
叶青足球世界 2023-04-13
-
焦点!滴滴自动驾驶举办开放日,2025 年量产无人车接入滴滴网络
猎云网 2023-04-13