基于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"

自定义管理服务器地址

可通过 management.server.address 属性自定义管理端点监听的地址。 这对于只监听内部或运维网络,或仅允许 localhost 连接非常有用。

仅当管理端口与主服务器端口不同时,才能监听不同地址。

如下 application.properties 示例禁止远程管理连接:

  • Properties

  • YAML

management.server.port=8081
management.server.address=127.0.0.1
management:
  server:
    port: 8081
    address: "127.0.0.1"

禁用HTTP端点

如不希望通过HTTP暴露端点,可将管理端口设为 -1,如下示例:

  • Properties

  • YAML

management.server.port=-1
management:
  server:
    port: -1

也可通过 management.endpoints.web.exposure.exclude 属性实现,如下:

  • Properties

  • YAML

management.endpoints.web.exposure.exclude=*
management:
  endpoints:
    web:
      exposure:
        exclude: "*"