前言:本文翻譯自Spring Boot 2.0.1.RELEASE官方文檔,該Spring Boot版本是目前(2018年4月份)官方推薦版本,因Spring Boot 2.0的Actuator與之前版本有較大不同,而網上相關博文資料較舊,故建議閱讀官方文檔再做實踐.轉載需經本人同意,注明出處方可轉載.
參考:https://docs.spring.io/spring-boot/docs/2.0.1.RELEASE/reference/html/production-ready-enabling.html
文章目錄
-
- 執行器(Actuator)的定義
- 1. 開啟Actuator
- 2. 端點(Endpoints)
-
- 2.1 啟用端點
- 2.2 暴露端點
- 2.3 保護HTTP端點
- 2.4 配置端點緩存時間
- 2.5 端點的發現頁
- 2.6 端點的路徑
- 2.7 跨域支援
- 2.8 實作自定義端點
-
- 2.8.1 接收輸入
- 2.8.2 自定義Web端點
- 2.8.3 Servlet端點
- 2.8.4 控制器端點
- 2.9 健康資訊
-
- 2.9.1 自動配置的HealthIndicators
- 2.9.2 編寫自定義HealthIndicators
- 2.9.3 反應性健康名額
- 2.9.4 自動配置的ReactiveHealthIndicators
- 2.10 應用資訊
-
- 2.10.1 自動配置的InfoContributors
- 2.10.2 自定義應用資訊
- 2.10.3 Git送出資訊
- 2.10.4 建構資訊
- 2.10.5 編寫自定義InfoContributors
- 3. 通過HTTP進行監控和管理
-
- 3.1 自定義管理端點路徑
- 3.2 自定義管理伺服器端口
- 3.3 配置管理專用SSL
- 3.4 自定義管理伺服器位址
- 3.5 禁用HTTP端點
執行器(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 | 顯示一個應用中 的完整清單 | Yes |
conditions | 顯示 (configuration and auto-configuration | classes)的狀态及它們被應用或未被應用的原因 |
configprops | 顯示一個所有 的集合清單 | Yes |
env | 顯示來自Spring的 的屬性 | Yes |
flyway | 顯示資料庫遷移路徑,如果有的話 | Yes |
health | 顯示應用的 (當使用一個未認證連接配接通路時顯示一個簡單 | 的’status’,使用認證連接配接通路則顯示全部資訊詳情) |
info | 顯示任意的 | Yes |
liquibase | 展示任何Liquibase資料庫遷移路徑,如果有的話 | Yes |
metrics | 展示目前應用的 資訊 | Yes |
mappings | 顯示一個所有 路徑的集合清單 | Yes |
scheduledtasks | 顯示應用程式中的 | Yes |
sessions | 允許從Spring會話支援的會話存儲中檢索和删除(retrieval and deletion) | 使用者會話。使用Spring Session對反應性Web應用程式的支援時不可用。 |
shutdown | 允許應用以優雅的方式關閉(預設情況下不啟用) | No |
threaddump | 執行一個線程dump | Yes |
如果使用web應用(Spring MVC, Spring WebFlux, 或者 Jersey),你還可以使用以下端點:
ID | 描述 | 預設啟用 |
---|---|---|
heapdump | 傳回一個GZip壓縮的 堆dump檔案 | Yes |
jolokia | 通過HTTP暴露 (當Jolokia在類路徑上時,WebFlux不可用) | Yes |
logfile | 傳回 (如果設定了logging.file或logging.path屬性的話),支援使用HTTP Range頭接收日志檔案内容的部分資訊 | Yes |
prometheus | 以可以被Prometheus伺服器抓取的格式顯示 資訊 | 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 | |
heapdump | N/A | No |
httptrace | Yes | No |
info | 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: '*'
如果您的應用程式對外公開,我們強烈建議您保護您的端點,方法見下文。
如果您希望在暴露端點時實施您自己的政策,您可以注冊一個
bean。
EndpointFilter
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代碼應該用編譯,實作端點的Kotlin代碼應該用
-parameters
-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暴露端點的基本路徑決定。預設的基本路徑是
。例如,具有ID/actuator
的端點将使用sessions
/ actuator / sessions
作為謂詞中的路徑。
可以通過使用
注釋操作方法的一個或多個參數來進一步定制路徑。這樣的參數作為路徑變量添加到路徑謂詞中。當調用端點操作時,該變量的值被傳遞給操作方法。@Selector
-
HTTP方法
謂詞的HTTP方法由操作類型決定,如下表所示:
|Operation|HTTP method
|–|
|@ReadOperation | GET
|@WriteOperation |POST
|@DeleteOperation |DELETE
- 消費
- 對于使用請求體的
,謂詞的consumes子句是@WriteOperation(POST)
。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)以及操作傳回的内容(如果有的話)。
-
傳回一個值,響應狀态将為200(OK)。如果它沒有傳回值,則響應狀态将為404(未找到)。@ReadOperation
- 如果
或@WriteOperation
傳回一個值,則響應狀态将為200(OK)。如果它沒有傳回值,則響應狀态将為204(無内容)。@DeleteOperation
- 如果調用時缺少必需參數,或者使用無法轉換為所需類型的參數,則不會調用操作方法,響應狀态将為400(錯誤請求)。
-
-
Web端點範圍請求
HTTP範圍請求可用于請求部分HTTP資源。在使用Spring MVC或Spring Web Flux時,傳回
的操作會自動支援範圍請求。使用Jersey時不支援範圍請求。org.springframework.core.io.Resource
-
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 | 詳細資訊僅向授權使用者顯示。授權角色可以使用 進行配置。 |
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
字尾的bean的名稱(如果存在)。在前面的示例中,健康資訊在名為my的條目中可用。
HealthIndicator
例如,在上面的執行個體中,如果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 | 在 key下顯示 中的任何key。 |
GitInfoContributor | 如果 檔案可用,則顯示git資訊。 |
BuildInfoContributor | 如果 檔案可用,則公開建構資訊。 |
可以通過設定 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,你可以重寫前面的例子,如下所示:
[email protected]@
info.app[email protected]@
[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