基于HTTP的监控与管理
如果你正在开发Web应用,Spring Boot Actuator 会自动将所有已启用的端点暴露为HTTP接口。
默认约定是以端点的 id
加上 /actuator
前缀作为URL路径。例如,health
会暴露为 /actuator/health
。
Actuator 原生支持 Spring MVC、Spring WebFlux 和 Jersey。 如果同时存在 Jersey 和 Spring MVC,则优先使用 Spring MVC。 |
若需获得 API 文档中描述的正确 JSON 响应,必须引入 Jackson 依赖。 |
自定义管理端点路径
有时你可能需要自定义管理端点的前缀。例如,应用自身已占用 /actuator
路径。
可以通过 management.endpoints.web.base-path
属性更改管理端点前缀,如下示例:
-
Properties
-
YAML
management.endpoints.web.base-path=/manage
management:
endpoints:
web:
base-path: "/manage"
上述 application.properties
示例将端点路径从 /actuator/{id}
改为 /manage/{id}
(如 /manage/info
)。
除非管理端口已配置为 使用不同HTTP端口暴露端点,否则 management.endpoints.web.base-path 相对于 server.servlet.context-path (Servlet Web应用)或 spring.webflux.base-path (响应式Web应用)。
若已配置 management.server.port ,则 management.endpoints.web.base-path 相对于 management.server.base-path 。
|
如需将端点映射到其他路径,可使用 management.endpoints.web.path-mapping
属性。
如下示例将 /actuator/health
重映射为 /healthcheck
:
-
Properties
-
YAML
management.endpoints.web.base-path=/
management.endpoints.web.path-mapping.health=healthcheck
management:
endpoints:
web:
base-path: "/"
path-mapping:
health: "healthcheck"
自定义管理服务器端口
在云环境中,使用默认HTTP端口暴露管理端点是合理选择。 但如果应用部署在自有数据中心,可能更希望通过不同的HTTP端口暴露端点。
可通过 management.server.port
属性更改HTTP端口,如下示例:
-
Properties
-
YAML
management.server.port=8081
management:
server:
port: 8081
在 Cloud Foundry 上,应用默认仅通过8080端口接收HTTP和TCP路由请求。 如需在 Cloud Foundry 上使用自定义管理端口,需显式配置应用路由以转发流量至该端口。 |
配置管理专用SSL
当配置为使用自定义端口时,也可通过 management.server.ssl.*
属性为管理服务器单独配置SSL。
例如,可让管理服务器通过HTTP提供服务,而主应用使用HTTPS,配置如下:
-
Properties
-
YAML
server.port=8443
server.ssl.enabled=true
server.ssl.key-store=classpath:store.jks
server.ssl.key-password=secret
management.server.port=8080
management.server.ssl.enabled=false
server:
port: 8443
ssl:
enabled: true
key-store: "classpath:store.jks"
key-password: "secret"
management:
server:
port: 8080
ssl:
enabled: false
也可以让主服务器和管理服务器都启用SSL,但使用不同的密钥库,如下:
-
Properties
-
YAML
server.port=8443
server.ssl.enabled=true
server.ssl.key-store=classpath:main.jks
server.ssl.key-password=secret
management.server.port=8080
management.server.ssl.enabled=true
management.server.ssl.key-store=classpath:management.jks
management.server.ssl.key-password=secret
server:
port: 8443
ssl:
enabled: true
key-store: "classpath:main.jks"
key-password: "secret"
management:
server:
port: 8080
ssl:
enabled: true
key-store: "classpath:management.jks"
key-password: "secret"