天天看點

Spring Boot 2.0官方文檔之 Actuator

前言:本文翻譯自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 顯示一個應用中

所有Spring Beans

的完整清單
Yes
conditions 顯示

配置類和自動配置類

(configuration and auto-configuration
classes)的狀态及它們被應用或未被應用的原因
configprops 顯示一個所有

@ConfigurationProperties

的集合清單
Yes
env 顯示來自Spring的

ConfigurableEnvironment

的屬性
Yes
flyway 顯示資料庫遷移路徑,如果有的話 Yes
health 顯示應用的

健康資訊

(當使用一個未認證連接配接通路時顯示一個簡單
的’status’,使用認證連接配接通路則顯示全部資訊詳情)
info 顯示任意的

應用資訊

Yes
liquibase 展示任何Liquibase資料庫遷移路徑,如果有的話 Yes
metrics 展示目前應用的

metrics

資訊
Yes
mappings 顯示一個所有

@RequestMapping

路徑的集合清單
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壓縮的

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

    。例如,具有ID

    sessions

    的端點将使用

    / 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

  • 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,你可以重寫前面的例子,如下所示:

[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
           

繼續閱讀