Spring Boot 2.0官方文檔之 Actuator

前言:本文翻譯自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

注意
禁用的端點將從應用程序上下文中完全刪除。如果您只想更改端點公開(對外暴露)的技術,請改爲使用includeexclude屬性,詳情見下文

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

要更改公開哪些端點,請使用以下技術特定的includeexclude屬性:

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公開所有端點並僅公開healthinfo端點,請使用以下屬性:

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文檔(HTMLPDF)。

如果您的應用程序部署在防火牆後面,您可能更喜歡所有的執行器端點都可以在無需驗證的情況下進行訪問。

您可以通過更改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
  • 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.Principalorg.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中定義的所有ReactiveHealthIndicatorbean中收集。在彈性調度器上包含並執行不檢查反應性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 infokey下顯示Environment中的任何key。
GitInfoContributor 如果git.properties文件可用,則顯示git信息。
BuildInfoContributor 如果META-INF/build-info.properties文件可用,則公開構建信息。

可以通過設置management.info.defaults.enabled屬性來禁用它們。

2.10.2 自定義應用信息

您可以通過設置info.* Spring屬性來自定義info端點公開的數據。infokey下的所有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.branchgit.commit.idgit.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-pathserver.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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章