15. Actuator API
《0》端点(actuator endpoint)可让您监控和操作 Spring Cloud Gateway 应用程序。为了实现远程可访问性,该端点必须在应用配置中 启用 并通过 HTTP 或 JMX 暴露。以下列表展示了如何实现此操作:
management.endpoint.gateway.enabled=true # default value
management.endpoints.web.exposure.include=gateway
15.1. 详细执行器格式
已添加一种新的、更详细的格式到 Spring Cloud Gateway 中。它为每个路由提供更多信息,使您能够查看与每个路由相关的谓词(predicates)和过滤器(filters),以及任何可用的配置信息。
以下示例配置了 /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
这将在未来的版本中默认为 true。
15.2. 获取路由过滤器
本节详细说明了如何检索路由过滤器,包括:
15.2.1. 全局过滤器
要检索应用于所有路由的全局过滤器,请向 /actuator/gateway/globalfilters 发送一个 GET 请求。返回的结果类似于以下内容:
{
"org.springframework.cloud.gateway.filter.ReactiveLoadBalancerClientFilter@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.ReactiveLoadBalancerClientFilter@77856cc5)及其在过滤器链中的对应 顺序。
15.2.2. 路由过滤器
要检索应用于路由的 GatewayFilter 工厂,请向 /actuator/gateway/routefilters 发送 GET 请求。返回的结果类似于以下内容:
{
"[AddRequestHeaderGatewayFilterFactory@570ed9c configClass = AbstractNameValueGatewayFilterFactory.NameValueConfig]": null,
"[SecureHeadersGatewayFilterFactory@fceab5d configClass = Object]": null,
"[SaveSessionGatewayFilterFactory@4449b273 configClass = Object]": null
}
响应包含应用于特定路由的 GatewayFilter 个工厂的详细信息。对于每个工厂,都包含对应对象的字符串表示(例如,[SecureHeadersGatewayFilterFactory@fceab5d configClass = Object])。注意,null 的值是由于端点控制器实现不完整所致,因为其尝试设置对象在过滤器链中的顺序,而该操作不适用于 GatewayFilter 工厂对象。
15.3 刷新路由缓存
要清除路由缓存,请向 /actuator/gateway/refresh 发起一个 POST 请求。该请求返回状态码 200,且无响应体。
15.4. 获取网关中定义的路由
要检索网关中定义的路由,请向 /actuator/gateway/routes 发送一个 GET 请求。返回的结果类似于以下内容:
[{
"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
}]
响应中包含网关中定义的所有路由的详细信息。以下表格描述了响应中每个元素(每个元素均为一个路由)的结构:
| 路径 | 类型 | 描述 |
|---|---|---|
|
字符串 |
路由ID。 |
|
对象 |
路由谓词。 |
|
数组 |
应用到该路由的 |
|
数字 |
路由顺序。 |
15.5. 获取特定路由的信息
要检索单个路由的信息,请向 /actuator/gateway/routes/{id} 发送一个 GET 请求(例如,/actuator/gateway/routes/first_route)。
返回的响应结果类似于以下内容:
{
"id": "first_route",
"predicates": [{
"name": "Path",
"args": {"_genkey_0":"/first"}
}],
"filters": [],
"uri": "https://www.uri-destination.org",
"order": 0
}]
以下表格描述了响应的结构:
| 路径 | 类型 | 描述 |
|---|---|---|
|
字符串 |
路由ID。 |
|
数组 |
路由谓词的集合。每个条目定义了给定谓词的名称和参数。 |
|
数组 |
应用于路由的过滤器集合。 |
|
字符串 |
路由的目标URI。 |
|
数字 |
路由顺序。 |
15.6. 创建和删除特定路由
要创建路线,请对1>发出0>请求,传递一个JSON正文,指定路线的字段(请参阅<
检索特定路线的信息<
/a>)。
要删除路由,对/gateway/routes/{id_route_to_delete}发出DELETE请求。
15.7 回顾:所有端点列表
以下表格总结了 Spring Cloud Gateway 指标端点(请注意每个端点的 base-path 为 /actuator/gateway):
| ID | HTTP 方法 | 描述 |
|---|---|---|
|
GET |
显示应用于路由的全局过滤器列表。 |
|
GET |
显示已应用于特定路线的 |
|
POST |
清除路由缓存。 |
|
GET |
显示网关中定义的路由列表。 |
|
GET |
显示特定路线的相关信息。 |
|
POST |
Adds a new route to the gateway. |
|
删除 |
移除网关上的现有路由。 |