网关 Spring Cloud Gateway 监控 actuator


💨 作者:laker,因为喜欢LOL滴神faker,又是NBA湖人队🏀(laker)粉丝儿(主要是老詹的粉丝儿),本人又姓,故取笔名:laker
❤️喜欢分享自己工作中遇到的问题和解决方案以及一些读书笔记和心得分享
🌰本人创建了微信公众号【Java大厂面试官】,用于和大家交流分享
🏰 个人微信【lakernote】,加作者备注下暗号:cv之道


本文Spring Cloud Gateway 版本:2020.0.0

Spring Cloud Gateway添加Spring Boot Actuator( spring-boot-starter-actuator )的依赖,并将 gateway 端点暴露,即可获得若干监控端点,监控 & 操作Spring Cloud Gateway的方方面面。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

官网地址:
https://cloud.spring.io/spring-cloud-gateway/reference/html/#actuator-api

/gateway为默认端点,您可以监视和交互Spring Cloud Gateway应用。为了可远程访问,必须在应用程序属性中通过HTTP或JMX启用公开端点。以下清单显示了如何执行此操作:

配置文件:

management.endpoint.gateway.enabled=true # default value
management.endpoints.web.exposure.include=gateway # 暴露gateway端点,* 是暴露全部端点

所有网关相关监控端点列表如下:

以下所有端点都挂在/actuator/gateway/ 下面。
例如:routes 的全路径是 /actuator/gateway/routes ,以此类推。

IDHTTP MethodDescription
globalfiltersGET展示所有的全局过滤器
routefiltersGET展示所有的过滤器工厂(GatewayFilter factories)
refreshPOST【无消息体】清空路由缓存
routesGET展示路由列表
routes/{id}GET展示指定id的路由的信息
routes/{id}POST【消息体如下】新增一个路由
routes/{id}DELETE【无消息体】删除一个路由

其中,要想动态添加路由配置,只需发送POST请求,消息体如下:

{
  "predicates": [
    {
      "name": "Path",
      "args": {
        "_genkey_0": "/test"
      }
    }
  ],
  "filters": [
    {
      "name": "AddRequestHeader",
      "args": {
        "_genkey_0": "X-Request-Foo",
        "_genkey_1": "Bar"
      }
    },
    {
      "name": "PreLog",
      "args": {
        "_genkey_0": "a",
        "_genkey_1": "b"
      }
    }
  ],
  "uri": "https://www.itmuch.com",
  "order": 0
}

TIPS

技巧:消息体其实是有规律的,你可以先在配置文件中配置一个路由规则,然后访问 ${GATEWAY_URL}/actuator/gateway/routes 端点,每个路由id的对应段落,就是你的消息体啦。

如果没有实时生效,使用refresh端点刷新一下路由信息即可。

全部详细路由信息

它为每个路由添加了更多详细信息,使您可以查看与每个路由关联的谓词和过滤器以及任何可用的配置。以下示例进行配置/actuator/gateway/routes

[
  {
    "predicate": "(Hosts: [**.addrequestheader.org] && Paths: [/headers], match trailing slash: true)",
    "route_id": "add_request_header_test",
    "filters": [
      "[[AddResponseHeader X-Response-Default-Foo = 'Default-Bar'], order = 1]",
      "[[AddRequestHeader X-Request-Foo = 'Bar'], order = 1]",
      "[[PrefixPath prefix = '/httpbin'], order = 2]"
    ],
    "uri": "lb://testservice",
    "order": 0
  }
]

默认情况下启用此功能。要禁用它,请设置以下属性:

spring.cloud.gateway.actuator.verbose.enabled=false

查询路由过滤器

本节详细介绍如何检索路由过滤器,包括:

全局过滤器

要检索应用于所有路由的全局过滤器GET请向发出请求/actuator/gateway/globalfilters。产生的响应类似于以下内容:

{
  "org.springframework.cloud.gateway.filter.LoadBalancerClientFilter@77856cc5": 10100,
  "org.springframework.cloud.gateway.filter.RouteToRequestUrlFilter@4f6fd101": 10000,
  "org.springframework.cloud.gateway.filter.NettyWriteResponseFilter@32d22650": -1,
  "org.springframework.cloud.gateway.filter.ForwardRoutingFilter@106459d9": 2147483647,
  "org.springframework.cloud.gateway.filter.NettyRoutingFilter@1fbd5e0": 2147483647,
  "org.springframework.cloud.gateway.filter.ForwardPathFilter@33a71d23": 0,
  "org.springframework.cloud.gateway.filter.AdaptCachedBodyGlobalFilter@135064ea": 2147483637,
  "org.springframework.cloud.gateway.filter.WebsocketRoutingFilter@23c05889": 2147483646
}

该响应包含已到位的全局筛选器的详细信息。对于每个全局过滤器,都有一个过滤器对象的字符串表示形式(例如org.springframework.cloud.gateway.filter.LoadBalancerClientFilter@77856cc5)和过滤器链中的相应顺序。}

网关路线过滤器

要检索应用于路线的GatewayFilterGET请向发出请求/actuator/gateway/routefilters。产生的响应类似于以下内容:

{
  "[AddRequestHeaderGatewayFilterFactory@570ed9c configClass = AbstractNameValueGatewayFilterFactory.NameValueConfig]": null,
  "[SecureHeadersGatewayFilterFactory@fceab5d configClass = Object]": null,
  "[SaveSessionGatewayFilterFactory@4449b273 configClass = Object]": null
}

该响应包含GatewayFilter应用于任何特定路线的工厂的详细信息。对于每个工厂,都有一个对应对象的字符串表示形式(例如[SecureHeadersGatewayFilterFactory@fceab5d configClass = Object])。请注意,该null值是由于端点控制器的实现不完整所致,因为它试图设置对象在过滤器链中的顺序,而该顺序不适用于GatewayFilter工厂对象。

刷新路由缓存

要清除路由缓存,POST请向发送请求/actuator/gateway/refresh。该请求返回200,但没有响应正文。

查询网关中定义的路由

要检索网关中定义的路由,GET请向发出请求/actuator/gateway/routes。产生的响应类似于以下内容:

[{
  "route_id": "first_route",
  "route_object": {
    "predicate": "org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory$$Lambda$432/1736826640@1e9d7e7d",
    "filters": [
      "OrderedGatewayFilter{delegate=org.springframework.cloud.gateway.filter.factory.PreserveHostHeaderGatewayFilterFactory$$Lambda$436/674480275@6631ef72, order=0}"
    ]
  },
  "order": 0
},
{
  "route_id": "second_route",
  "route_object": {
    "predicate": "org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory$$Lambda$432/1736826640@cd8d298",
    "filters": []
  },
  "order": 0
}]

该响应包含网关中定义的所有路由的详细信息。下表描述了响应的每个元素的结构:

PathTypeDescription
route_idStringThe route ID.
route_object.predicateObjectThe route predicate.
route_object.filtersArrayThe GatewayFilter factories applied to the route.
orderNumberThe route order.

查询有关特定路线的信息

要检索有关一条路线的信息,GET请向发出请求/actuator/gateway/routes/{id}(例如/actuator/gateway/routes/first_route)。产生的响应类似于以下内容:

{
  "id": "first_route",
  "predicates": [{
    "name": "Path",
    "args": {"_genkey_0":"/first"}
  }],
  "filters": [],
  "uri": "https://www.uri-destination.org",
  "order": 0
}]

下表描述了响应的结构:

路径类型描述
idString路由ID。
predicatesArray路由谓词的集合。每个项目都定义给定谓词的名称和自变量。
filtersArray应用于路线的过滤器集合。
uriString路由的目标URI。
orderNumber路由顺序。

创建和删除特定路由

要创建路由,POST/gateway/routes/{id_route_to_create}使用JSON主体发出请求,以指定路由的字段(请参阅检索有关特定路由的信息)。

要删除路线,DELETE请向发出请求/gateway/routes/{id_route_to_delete}

参考:
http://www.itmuch.com/spring-cloud-gateway/spring-cloud-gateway-actuator/

Spring Cloud 相关系列文章目录

网关服务

Spring Cloud Gateway


QQ群【837324215】
关注我的公众号【Java大厂面试官】,回复:常用工具资源等关键词(更多关键词,关注后注意提示信息)获取更多免费资料。

公众号也会持续输出高质量文章,和大家共同进步。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring Cloud Gateway目前官方没有提供可视化的界面来管理网关配置。然而,你可以通过在Spring Cloud Gateway中使用Spring Boot ActuatorSpring Cloud Config等组件来实现动态管理和配置网关。你可以通过Actuator提供的端点来获取和修改Spring Cloud Gateway的配置信息。同时,你也可以使用Spring Cloud Config来集中管理和更新网关的配置信息。这样,你可以在运行时动态更新网关的路由规则和其他配置信息,使得网关的管理更加灵活和方便。可以借助这些工具来实现可视化的网关配置和管理。123 #### 引用[.reference_title] - *1* [Spring cloud Gateway网关简介及使用](https://blog.csdn.net/weixin_50823456/article/details/120829548)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] - *2* [springboot spring cloud gateway demo实战项目](https://blog.csdn.net/wqr503/article/details/104049125)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] - *3* [Spring Cloud Gateway 项目中配置](https://blog.csdn.net/xiaoxiao2235/article/details/124486419)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lakernote

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值