前言:本文翻譯自Spring Boot 2.0.1.RELEASE官方文檔,該Spring Boot版本是當前(2018年4月份)官方推薦版本,因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
前綴的URL。例如,health端點默認映射到/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=@project.build.sourceEncoding@
info.app.java.source=@java.version@
info.app.java.target=@java.version@
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