透過 HTTP 進行監控和管理

如果你在開發 Web 應用程式,Spring Boot Actuator 會自動配置所有啟用的端點,使其可以透過 HTTP 暴露。預設約定是使用端點的 id 並加上 /actuator 字首作為 URL 路徑。例如,health 端點暴露為 /actuator/health

Actuator 原生支援 Spring MVC、Spring WebFlux 和 Jersey。如果 Jersey 和 Spring MVC 都可用,則使用 Spring MVC。
Jackson 是獲取正確 JSON 響應的必要依賴,詳細資訊請參閱 API 文件

定製管理端點路徑

有時,定製管理端點的字首會很有用。例如,你的應用程式可能已經將 /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: "*"