Spring Boot 2.0官方文件之 Actuator(轉)
執行器(Actuator)的定義
執行器是一個製造業術語,指的是用於移動或控制東西的一個機械裝置,一個很小的改變就能讓執行器產生大量的運動。
An actuator is a manufacturing term that refers to a mechanical device for moving or controlling something. Actuators can generate a large amount of motion from a small change.
1. 開啟Actuator
spring-boot-actuator
模組提供Spring Boot所有的production-ready
spring-boot-starter-actuator
‘Starter’依賴。 按以下配置為Maven專案新增執行器:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> </dependencies>
對於Gradle,使用下面的宣告:
dependencies {
compile("org.springframework.boot:spring-boot-starter-actuator")
}
2. 端點(Endpoints)
執行器端點(endpoints)可用於監控應用及與應用進行互動,Spring Boot包含很多內建的端點,你也可以新增自己的。例如,health端點提供了應用的基本健康資訊。
每個端點都可以啟用或禁用。這控制著端點是否被建立,並且它的bean是否存在於應用程式上下文中。要遠端訪問端點,還必須通過JMX或HTTP進行暴露,大部分應用選擇HTTP,端點的ID對映到一個帶/actuator
/actuator/health
。
注意:
Spring Boot 2.0的端點基礎路徑由“/”調整到”/actuator”下,如:/info
調整為/actuator/info
可以通過以下配置改為和舊版本一致:
management.endpoints.web.base-path=/
下面的端點都是可用的:
ID | 描述 | 預設啟用 |
---|---|---|
auditevents | 顯示當前應用程式的審計事件資訊 | Yes |
beans | 顯示一個應用中所有Spring Beans 的完整列表 |
Yes |
conditions | 顯示配置類和自動配置類 (configuration and auto-configuration classes)的狀態及它們被應用或未被應用的原因 |
Yes |
configprops | 顯示一個所有@ConfigurationProperties 的集合列表 |
Yes |
env | 顯示來自Spring的 ConfigurableEnvironment 的屬性 |
Yes |
flyway | 顯示資料庫遷移路徑,如果有的話 | Yes |
health | 顯示應用的健康資訊 (當使用一個未認證連線訪問時顯示一個簡單的’status’,使用認證連線訪問則顯示全部資訊詳情) |
Yes |
info | 顯示任意的應用資訊 |
Yes |
liquibase | 展示任何Liquibase資料庫遷移路徑,如果有的話 | Yes |
metrics | 展示當前應用的metrics 資訊 |
Yes |
mappings | 顯示一個所有@RequestMapping 路徑的集合列表 |
Yes |
scheduledtasks | 顯示應用程式中的計劃任務 |
Yes |
sessions | 允許從Spring會話支援的會話儲存中檢索和刪除(retrieval and deletion)使用者會話。使用Spring Session對反應性Web應用程式的支援時不可用。 | Yes |
shutdown | 允許應用以優雅的方式關閉(預設情況下不啟用) | No |
threaddump | 執行一個執行緒dump | Yes |
如果使用web應用(Spring MVC, Spring WebFlux, 或者 Jersey),你還可以使用以下端點:
ID | 描述 | 預設啟用 |
---|---|---|
heapdump | 返回一個GZip壓縮的hprof 堆dump檔案 |
Yes |
jolokia | 通過HTTP暴露JMX beans (當Jolokia在類路徑上時,WebFlux不可用) |
Yes |
logfile | 返回日誌檔案內容 (如果設定了logging.file或logging.path屬性的話),支援使用HTTP Range頭接收日誌檔案內容的部分資訊 |
Yes |
prometheus | 以可以被Prometheus伺服器抓取的格式顯示metrics 資訊 |
Yes |
注意
Spring Boot 2.0的端點和之前的版本有較大不同,使用時需注意
另外,端點的監控機制也有很大不同,啟用了不代表可以直接訪問,還需要將其暴露出來,傳統的management.security管理已被標記為不推薦,現在一般使用單獨啟用並暴露
2.1 啟用端點
預設情況下,除shutdown以外的所有端點均已啟用。要配置單個端點的啟用
,請使用management.endpoint.<id>.enabled
屬性。以下示例啟用shutdown端點:
management.endpoint.shutdown.enabled=true
另外可以通過management.endpoints.enabled-by-default
來修改全域性埠預設配置,以下示例啟用info端點並禁用所有其他端點:
management.endpoints.enabled-by-default=false
management.endpoint.info.enabled=true
注意
禁用的端點將從應用程式上下文中完全刪除。如果您只想更改端點公開(對外暴露)的技術,請改為使用include
和exclude
屬性,詳情見下文
2.2 暴露端點
由於端點可能包含敏感資訊,因此應仔細考慮何時公開它們。下表顯示了內建端點的預設曝光:
ID | JMX | Web |
---|---|---|
auditevents | Yes | No |
beans | Yes | No |
conditions | Yes | No |
configprops | Yes | No |
env | Yes | No |
flyway | Yes | No |
health | Yes | Yes |
heapdump | N/A | No |
httptrace | Yes | No |
info | Yes | Yes |
jolokia | Yes | No |
logfile | Yes | No |
loggers | Yes | No |
liquibase | Yes | No |
metrics | Yes | No |
mappings | Yes | No |
prometheus | N/A | No |
scheduledtasks | Yes | No |
sessions | Yes | No |
shutdown | Yes | No |
threaddump | Yes | No |
要更改公開哪些端點,請使用以下技術特定的include
和exclude
屬性:
Property | Default |
---|---|
management.endpoints.jmx.exposure.exclude | * |
management.endpoints.jmx.exposure.include | * |
management.endpoints.web.exposure.exclude | * |
management.endpoints.web.exposure.include | info, health |
include屬性列出了公開的端點的ID,exclude屬性列出了不應該公開的端點的ID
exclude屬性優先於include屬性。包含和排除屬性都可以使用端點ID列表進行配置。
注意
這裡的優先順序是指同一端點ID,同時出現在include屬性表和exclude屬性表裡,exclude屬性優先於include屬性,即此端點沒有暴露
例如,要停止通過JMX公開所有端點並僅公開health和info端點,請使用以下屬性:
management.endpoints.jmx.exposure.include=health,info
*
可以用來選擇所有端點。例如,要通過HTTP公開除env和beans端點之外的所有內容,請使用以下屬性:
management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude=env,beans
注意
*
在YAML中有特殊的含義,所以如果你想包含(或排除)所有的端點,一定要加引號,如下例所示:management: endpoints: web: exposure: include: '*'
如果您的應用程式對外公開,我們強烈建議您保護您的端點,方法見下文。
如果您希望在暴露端點時實施您自己的策略,您可以註冊一個EndpointFilter
bean。
2.3 保護HTTP端點
您應該注意保護HTTP端點的方式與使用其他任何敏感網址的方式相同。如果存在Spring Security,則預設使用Spring Security的內容協商策略(content-negotiation strategy)保護端點。例如,如果您希望為HTTP端點配置自定義安全性,比方說只允許具有特定角色的使用者訪問它們,Spring Boot提供了一些方便的RequestMatcher
物件,可以與Spring Security結合使用。
一個典型的Spring Security配置可能看起來像下面的例子:
@Configuration public class ActuatorSecurity extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.requestMatcher(EndpointRequest.toAnyEndpoint()).authorizeRequests() .anyRequest().hasRole("ENDPOINT_ADMIN") .and() .httpBasic(); } }
上例使用EndpointRequest.toAnyEndpoint()將請求與所有端點進行匹配,然後確保所有端點都具有ENDPOINT_ADMIN角色。有關詳細資訊,請參閱API文件(HTML或PDF)。
如果您的應用程式部署在防火牆後面,您可能更喜歡所有的執行器端點都可以在無需驗證的情況下進行訪問。
您可以通過更改management.endpoints.web.exposure.include
屬性來完成此操作,如下所示:
management.endpoints.web.exposure.include=*
此外,如果存在Spring Security,則需要新增自定義安全配置,以允許對端點進行未經身份驗證的訪問,如以下示例所示:
@Configuration public class ActuatorSecurity extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.requestMatcher(EndpointRequest.toAnyEndpoint()).authorizeRequests() .anyRequest().permitAll() } }
2.4 配置端點快取時間
對於不帶任何引數的讀取
操作,端點自動快取對其響應。要配置端點快取響應的時間,請使用cache.time-live
屬性。以下示例將beans
端點快取的生存時間設定為10秒:
management.endpoint.beans.cache.time-to-live=10s
注意
在進行經過驗證的HTTP請求時,Principal
將被視為端點的輸入
,因此不會快取響應。
2.5 端點的發現頁
“discovery page”添加了指向所有端點的連結。預設情況下,“discovery page”可通過/actuator
訪問。
需要注意的是,這裡的/actuator
指的是端點的基礎路徑,如果基礎路徑改變,發現頁訪問路徑會跟著改變.
例如,如果基礎路徑是/manage
,則發現頁面可從/ manage
獲得
但是,當基礎路徑設定為/
時,禁用發現頁面以防止與其他對映發生衝突的可能性。
基礎路徑的設定見下
2.6 端點的路徑
預設情況下,端點通過使用端點的ID在/actuator
路徑下的HTTP上公開。例如,beans
端點暴露在/actuator/beans
下。如果要將端點對映到其他路徑,則可以使用management.endpoints.web.path-mapping
屬性。另外,如果您想更改基本路徑,則可以使用management.endpoints.web.base-path
。
以下示例將/actuator/health
重新對映到/healthcheck
:
management.endpoints.web.base-path=/
management.endpoints.web.path-mapping.health=healthcheck
2.7 跨域支援
跨源資源共享(Cross-origin resource sharing,CORS)是W3C規範,允許您以靈活的方式指定授權哪種跨域請求。如果您使用Spring MVC或Spring WebFlux,則可以配置Actuator的Web端點來支援這些場景。
預設情況下,CORS支援處於禁用狀態,只有在設定了management.endpoints.web.cors.allowed-origins
屬性後才能啟用。以下配置允許來自example.com域的GET和POST呼叫:
management.endpoints.web.cors.allowed-origins=http://example.com management.endpoints.web.cors.allowed-methods=GET,POST
請參閱CorsEndpointProperties以獲取完整的選項列表。
2.8 實現自定義端點
如果新增用@Endpoint註解
的@Bean
,則任何使用@ReadOperation
,@WriteOperation
或@DeleteOperation
註釋的方法都會自動通過JMX公開,並且也可以通過HTTP在Web應用程式中通過HTTP公開。也可以使用Jersey,Spring MVC或Spring WebFlux通過HTTP公開端點。
您還可以使用@JmxEndpoint
或@WebEndpoint
編寫技術特定的端點。這些端點僅限於各自的技術。例如,@WebEndpoint僅通過HTTP公開,而不通過JMX公開。
您可以使用@EndpointWebExtension
和@EndpointJmxExtension
編寫技術特定的擴充套件。這些註釋可讓您提供技術特定的操作,以增強現有端點。
最後,如果您需要訪問特定於Web框架的功能,則可以實現Servlet或Spring @Controller
和@RestController
端點,但代價是它們不能通過JMX或使用其他Web框架提供。
2.8.1 接收輸入
端點上的操作通過引數接收輸入。
當通過網路公開時,這些引數的值取自URL的查詢引數和JSON請求主體。
通過JMX公開時,引數將對映到MBean操作的引數。
引數預設是必需的,可以通過使用@org.springframework.lang.Nullable
註釋使其成為可選的。
為了允許輸入對映到操作方法的引數,實現端點的Java程式碼應該用
-parameters
編譯,實現端點的Kotlin程式碼應該用-java-parameters
編譯。
如果您使用的是Spring Boot的Gradle外掛,或者您正在使用Maven和spring-boot-starter-parent,則會自動發生
。
輸入型別轉換
傳遞給端點操作方法的引數在必要時會自動轉換為所需的型別。在呼叫操作方法之前,使用ApplicationConversionService
的例項將通過JMX或HTTP請求接收到的輸入轉換為所需的型別。
2.8.2 自定義Web端點
對使用Jersey,Spring MVC或Spring WebFlux的@Endpoint
,@WebEndpoint
或@WebEndpointExtension
操作通過HTTP自動公開。
-
Web端點請求謂詞
一個請求謂詞會自動為web暴露端點上的每個操作生成。 -
路徑
謂詞的路徑由端點的ID和Web暴露端點的基本路徑決定。預設的基本路徑是/actuator
。例如,具有IDsessions
的端點將使用/ actuator / sessions
作為謂詞中的路徑。
可以通過使用@Selector
註釋操作方法的一個或多個引數來進一步定製路徑。這樣的引數作為路徑變數新增到路徑謂詞中。當呼叫端點操作時,該變數的值被傳遞給操作方法。 -
HTTP方法
謂詞的HTTP方法由操作型別決定,如下表所示:Operation HTTP method @ReadOperation GET @WriteOperation POST @DeleteOperation DELETE -
消費
- 對於使用請求體的
@WriteOperation(POST)
,謂詞的consumes子句是application/vnd.spring-boot.actuator.v2+json, application/json
。 - 對於所有其他操作,消費條款是空的。
- 對於使用請求體的
-
生產
謂詞的生產條款可以通過@DeleteOperation
,@ReadOperation
和@WriteOperation
註釋的produce屬性
來確定。該屬性是可選的。如果未使用,則自動確定生產條款。- 如果操作方法返回void或Void,則produce子句為空。如果操作方法返回一個
org.springframework.core.io.Resource
,則生產條款是application/octet-stream
。 - 對於所有其他操作,生產條款是
application/vnd.spring-boot.actuator.v2+json, application/json
。
- 如果操作方法返回void或Void,則produce子句為空。如果操作方法返回一個
- Web端點響應狀態
端點操作的預設響應狀態取決於操作型別(read,write或delete)以及操作返回的內容(如果有的話)。
@ReadOperation
返回一個值,響應狀態將為200(OK)。如果它沒有返回值,則響應狀態將為404(未找到)。- 如果
@WriteOperation
或@DeleteOperation
返回一個值,則響應狀態將為200(OK)。如果它沒有返回值,則響應狀態將為204(無內容)。 - 如果呼叫時缺少必需引數,或者使用無法轉換為所需型別的引數,則不會呼叫操作方法,響應狀態將為400(錯誤請求)。
-
Web端點範圍請求
HTTP範圍請求可用於請求部分HTTP資源。在使用Spring MVC或Spring Web Flux時,返回org.springframework.core.io.Resource
的操作會自動支援範圍請求。使用Jersey時不支援範圍請求。 -
Web端點安全
對Web端點或基於Web的端點擴充套件的操作可以接收當前的java.security.Principal
或org.springframework.boot.actuate.endpoint.SecurityContext
作為方法引數。前者通常與@Nullable
結合使用,為經過身份驗證的使用者和未經身份驗證的使用者提供不同的行為。後者通常用於使用isUserInRole(String)
方法執行授權檢查。
2.8.3 Servlet端點
通過實現一個用@ServletEndpoint
註解的類來實現Supplier<EndpointServlet>
,Servlet可以作為端點公開。Servlet端點提供了與Servlet容器的更深層次的整合,但是具有可移植性。它們旨在用於將現有的Servlet作為端點公開。對於新的端點,只要有可能,應該首選@Endpoint和@WebEndpoint註釋。
2.8.4 控制器端點
@ControllerEndpoint
和@RestControllerEndpoint
可用於實現僅由Spring MVC或Spring WebFlux公開的端點。使用標準註釋Spring MVC和Spring WebFlux註釋(如@RequestMapping
和@GetMapping
)來對映方法,並將端點ID用作路徑的字首。控制器端點提供了與Spring的Web框架的更深層次的整合,但代價是可移植性。只要有可能,應該首選@Endpoint
和@WebEndpoint
註釋。
2.9 健康資訊
您可以使用健康資訊來檢查正在執行的應用程式的狀態。當生產系統停機時,它經常被監控軟體用來提醒某人。health
端點公開的資訊取決於management.endpoint.health.show-details
屬性,該屬性可以使用以下值之一進行配置:
Name | Description |
---|---|
never | 細節永遠不會顯示。 |
when-authorized | 詳細資訊僅向授權使用者顯示。授權角色可以使用management.endpoint.health.roles 進行配置。 |
always | 詳細資訊顯示給所有使用者。 |
預設值為never
。
當用戶處於一個或多個端點角色時,它被認為是被授權的。
如果端點沒有配置角色(預設),則認為所有經過身份驗證的使用者均被授權。可以使用management.endpoint.health.roles
屬性配置角色。
2.9.1 自動配置的HealthIndicators
在適當情況下,以下HealthIndicators可由Spring Boot自動配置:
Name | Description |
---|---|
CassandraHealthIndicator | 檢查Cassandra資料庫是否啟動 |
DiskSpaceHealthIndicator | 檢查磁碟空間是否不足。 |
DataSourceHealthIndicator | 檢查是否可以獲得與DataSource的連線。 |
ElasticsearchHealthIndicator | 檢查Elasticsearch叢集是否啟動。 |
InfluxDbHealthIndicator | 檢查InfluxDB伺服器是否啟動。 |
JmsHealthIndicator | 檢查JMS代理是否啟動。 |
MailHealthIndicator | 檢查郵件伺服器是否啟動。 |
MongoHealthIndicator | 檢查Mongo資料庫是否啟動。 |
Neo4jHealthIndicator | 檢查Neo4j伺服器是否啟動。 |
RabbitHealthIndicator | 檢查Rabbit伺服器是否啟動。 |
RedisHealthIndicator | 檢查Redis伺服器是否啟動。 |
SolrHealthIndicator | 檢查Solr伺服器是否已啟動。 |
您可以通過設定
management.health.defaults.enabled
屬性來禁用它們。
2.9.2 編寫自定義HealthIndicators
要提供自定義健康資訊,您可以註冊實現HealthIndicator
介面的Spring bean。您需要提供health()
方法的實現並返回Health
響應。Health
響應應包含一個狀態,並可以選擇包含要顯示的其他詳細資訊。以下程式碼顯示了一個示例HealthIndicator實現:
import org.springframework.boot.actuate.health.Health; import org.springframework.boot.actuate.health.HealthIndicator; import org.springframework.stereotype.Component; @Component public class MyHealthIndicator implements HealthIndicator { @Override public Health health() { int errorCode = check(); // perform some specific health check if (errorCode != 0) { return Health.down().withDetail("Error Code", errorCode).build(); } return Health.up().build(); } }
給定
HealthIndicator
的識別符號是沒有HealthIndicator
字尾的bean的名稱(如果存在)。在前面的示例中,健康資訊在名為my的條目中可用。
例如,在上面的例項中,如果check()返回的結果是500,則health端點的資訊為
{ "status": "DOWN", "details": { "my": { "status": "DOWN", "details": { "Error Code": 500 } } } }
注意:要先設定management.endpoint.health.show-details
屬性使其可見.
除了Spring Boot的預定義狀態型別外,Health還可以返回代表新系統狀態的自定義狀態。在這種情況下,還需要提供HealthAggregator
介面的自定義實現,或者必須使用management.health.status.order
配置屬性來配置預設實現。
例如,假定您的一個HealthIndicator例項中正在使用程式碼為FATAL
的新狀態。要配置重要性順序,請將以下屬性新增到應用程式屬性中:
management.health.status.order=FATAL, DOWN, OUT_OF_SERVICE, UNKNOWN, UP
響應中的HTTP狀態程式碼反映整體健康狀況(例如,UP對映為200,而OUT_OF_SERVICE和DOWN對映為503)。如果您通過HTTP訪問健康端點,則可能還需要註冊自定義狀態對映。例如,以下屬性將FATAL對映為503(服務不可用):
management.health.status.http-mapping.FATAL=503
如果你需要更多的控制,你可以定義你自己的HealthStatusHttpMapper
bean。
下表顯示了內建狀態的預設狀態對映:
Status | Mapping |
---|---|
DOWN | 服務不可用 (503) |
OUT_OF_SERVICE | 服務不可用 (503) |
UP | 預設情況下沒有對映,所以http狀態是200 |
UNKNOWN | 預設情況下沒有對映,所以http狀態是200 |
2.9.3 反應性健康指標
對於反應式應用程式(例如使用Spring WebFlux的應用程式),ReactiveHealthIndicator
提供了獲取應用程式執行狀況的非阻塞合同。與傳統的HealthIndicator
類似,健康資訊從ApplicationContext
中定義的所有ReactiveHealthIndicator
bean中收集。在彈性排程器上包含並執行不檢查反應性API的常規HealthIndicator bean。
為了從反應式API提供定製的健康資訊,您可以註冊實現ReactiveHealthIndicator
介面的Spring bean。以下程式碼顯示了一個示例ReactiveHealthIndicator實現:
@Component public class MyReactiveHealthIndicator implements ReactiveHealthIndicator { @Override public Mono<Health> health() { return doHealthCheck() //perform some specific health check that returns a Mono<Health> .onErrorResume(ex -> Mono.just(new Health.Builder().down(ex).build()))); } }
要自動處理錯誤,請考慮從
AbstractReactiveHealthIndicator
進行擴充套件。
2.9.4 自動配置的ReactiveHealthIndicators
在適當的情況下,以下ReactiveHealthIndicators是由Spring Boot自動配置的:
Name | Description |
---|---|
MongoReactiveHealthIndicator | 檢查Mongo資料庫是否啟動。 |
RedisReactiveHealthIndicator | 檢查Redis伺服器是否啟動。 |
必要時,反應性指標取代常規指標。而且,任何未顯式處理的HealthIndicator都是自動包裝的
2.10 應用資訊
應用程式資訊公開從ApplicationContext
中定義的所有InfoContributor
beans收集的各種資訊。 Spring Boot包含許多自動配置的InfoContributor
beans,您也可以編寫自己的。
2.10.1 自動配置的InfoContributors
適當情況下,以下InfoContributor beans由Spring Boot自動配置:
Name | Description |
---|---|
EnvironmentInfoContributor | 在info key下顯示Environment 中的任何key。 |
GitInfoContributor | 如果git.properties 檔案可用,則顯示git資訊。 |
BuildInfoContributor | 如果META-INF/build-info.properties 檔案可用,則公開構建資訊。 |
可以通過設定
management.info.defaults.enabled
屬性來禁用它們。
2.10.2 自定義應用資訊
您可以通過設定info.*
Spring屬性來自定義info
端點公開的資料。info
key下的所有Enviroment
屬性都會自動公開。例如,您可以將以下設定新增到您的application.properties
檔案中:
info.app.encoding=UTF-8 info.app.java.source=1.8 info.app.java.target=1.8
YAML檔案對應設定為
info: app: encoding:UTF-8 java.source:1.8 java.traget:1.8
訪問info埠,結果為
{ "app": "encoding:UTF-8 java.source:1.8 java.traget:1.8" }
與其對這些值進行硬編碼,您還可以在構建時展開資訊屬性。 假設你使用Maven,你可以重寫前面的例子,如下所示:
info.app.encoding=@[email protected] info.app.java.source=@[email protected] info.app.java.target[email protected]@
2.10.3 Git提交資訊
info端點的另一個有用特性是它能夠在構建專案時釋出有關git原始碼庫狀態的資訊。如果GitProperties
bean可用,則會顯示git.branch
,git.commit.id
和git.commit.time
屬性。
如果
git.properties
檔案在類路徑的根目錄中可用,則會自動配置GitProperties bean。有關更多詳細資訊,請參閱“生成git資訊”。
如果要顯示完整的git資訊(即git.properties
的完整內容),請使用management.info.git.mode
屬性,如下所示:
management.info.git.mode=full
2.10.4 構建資訊
如果BuildProperties
bean可用,info端點還可以釋出關於您的構建的資訊。如果META-INF/build-info.properties
檔案在類路徑中可用,則會發生這種情況。
Maven和Gradle外掛都可以生成該檔案。有關更多詳細資訊,請參閱“生成構建資訊”。
2.10.5 編寫自定義InfoContributors
為了提供定製的應用程式資訊,您可以註冊實現InfoContributor
介面的Spring bean。 以下示例為單個值提供了一個example
條目:
import java.util.Collections; import org.springframework.boot.actuate.info.Info; import org.springframework.boot.actuate.info.InfoContributor; import org.springframework.stereotype.Component; @Component public class ExampleInfoContributor implements InfoContributor { @Override public void contribute(Info.Builder builder) { builder.withDetail("example", Collections.singletonMap("key", "value")); } }
如果您訪問info
端點,則應該看到包含以下附加條目的響應:
{ "example": { "key" : "value" } }
3. 通過HTTP進行監控和管理
如果您正在開發Web應用程式,Spring Boot Actuator會自動配置所有已啟用的端點以通過HTTP進行公開。預設約定是使用以/actuator
作為字首的端點的ID作為URL路徑。例如,health
被暴露為/actuator/health
。
Actuator本身支援Spring MVC,Spring WebFlux和Jersey。
3.1 自定義管理端點路徑
有時候,自定義管理端點的字首非常有用。例如,您的應用程式可能已經將/actuator
用於其他目的。您可以使用management.endpoints.web.base-path
屬性更改管理端點的字首,如以下示例中所示:
management.endpoints.web.base-path=/manage
前面的application.properties
示例將端點從/actuator/{id}
更改為/manage/{id}
(例如/manage/info
)。
除非管理埠已配置為使用不同的HTTP埠公開端點,否則
management.endpoints.web.base-path
與server.servlet.context-path
相關。如果配置了management.server.port
,則management.endpoints.web.base-path
將與management.server.servlet.context-path
相關。
3.2 自定義管理伺服器埠
通過使用預設的HTTP埠公開管理端點是基於雲的部署的明智選擇。但是,如果您的應用程式在您自己的資料中心內執行,則可能希望使用不同的HTTP埠來公開端點。您可以設定management.server.port
屬性來更改HTTP埠,如以下示例所示:
management.server.port=8081
3.3 配置管理專用SSL
配置為使用自定義埠時,管理伺服器也可以使用各種management.server.ssl.*
屬性配置自己的SSL。例如,通過這樣做,管理伺服器可通過HTTP使用,而主應用程式使用HTTPS,如以下屬性設定所示:
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
或者,主伺服器和管理伺服器都可以使用SSL,但使用不同的金鑰儲存區,如下所示:
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
3.4 自定義管理伺服器地址
您可以通過設定management.server.address
屬性來自定義管理端點可用的地址。如果您只想在內部網路或面向作業系統的網路上收聽,或只收聽本地主機的連線,那麼這樣做會很有用。
只有當埠與主伺服器埠不同時,您才可以監聽其他地址。
以下示例application.properties不允許遠端管理連線:
management.server.port=8081
management.server.address=127.0.0.1
3.5 禁用HTTP端點
如果您不想通過HTTP公開端點,則可以將管理埠設定為-1,如以下示例所示:
management.server.port=-1