26.Spring Boot執(zhí)行器:Production-ready特性

  • Spring Boot包含很多其他的特性,它們可以幫你監(jiān)控和管理發(fā)布到生產(chǎn)環(huán)境的應(yīng)用。你可以選擇使用HTTP端點,JMX或遠程shell(SSH或Telnet)來管理和監(jiān)控應(yīng)用。審計(Auditing),健康(health)和數(shù)據(jù)采集(metrics gathering)會自動應(yīng)用到你的應(yīng)用。

開啟production-ready特性

  • spring-boot-actuator模塊提供了Spring Boot所有的production-ready特性。啟用該特性的最簡單方式就是添加對spring-bootstarter-actuator ‘Starter POM’的依賴。

  • 執(zhí)行器(Actuator)的定義:執(zhí)行器是一個制造業(yè)術(shù)語,指的是用于移動或控制東西的一個機械裝置。一個很小的改變就能讓執(zhí)行器產(chǎn)生大量的運動。

  • 基于Maven的項目想要添加執(zhí)行器只需添加下面的'starter'依賴:

      <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")
}

端點

  • 執(zhí)行器端點允許你監(jiān)控應(yīng)用及與應(yīng)用進行交互。Spring Boot包含很多內(nèi)置的端點,你也可以添加自己的。例如,health端點提供了應(yīng)用的基本健康信息。

  • 端點暴露的方式取決于你采用的技術(shù)類型。大部分應(yīng)用選擇HTTP監(jiān)控,端點的ID映射到一個URL。例如,默認情況下,health端點將被映射到/health。

下面的端點都是可用的:

ID 描述 敏感(Sensitive)
autoconfig 顯示一個auto-configuration的報告,該報告展示所有auto-configuration候選者及它們被應(yīng)用或未被應(yīng)用的原因 true
beans 顯示一個應(yīng)用中所有Spring Beans的完整列表 true
configprops 顯示一個所有@ConfigurationProperties的整理列表 true
dump 執(zhí)行一個線程轉(zhuǎn)儲 true
env 暴露來自Spring ConfigurableEnvironment的屬性 true
health 展示應(yīng)用的健康信息(當(dāng)使用一個未認證連接訪問時顯示一個簡單的'status',使用認證連接訪問則顯示全部信息詳情) false
info 顯示任意的應(yīng)用信息 false
metrics 展示當(dāng)前應(yīng)用的'指標(biāo)'信息 true
mappings 顯示一個所有@RequestMapping路徑的整理列表 true
shutdown 允許應(yīng)用以優(yōu)雅的方式關(guān)閉(默認情況下不啟用) true
trace 顯示trace信息(默認為最新的一些HTTP請求) true

注:根據(jù)一個端點暴露的方式,sensitive參數(shù)可能會被用做一個安全提示。例如,在使用HTTP訪問sensitive端點時需要提供用戶名/密碼(如果沒有啟用web安全,可能會簡化為禁止訪問該端點)。

自定義端點

  • 使用Spring屬性可以自定義端點。你可以設(shè)置端點是否開啟(enabled),是否敏感(sensitive),甚至它的id。例如,下面的application.properties改變了敏感性和beans端點的id,也啟用了shutdown。

      endpoints.beans.id=springbeans
      endpoints.beans.sensitive=false
      endpoints.shutdown.enabled=true
    

注:前綴 endpoints + . + name 被用來唯一的標(biāo)識被配置的端點。

  • 默認情況下,除了shutdown外的所有端點都是啟用的。如果希望指定選擇端點的啟用,你可以使用endpoints.enabled屬性。

例如,下面的配置禁用了除info外的所有端點:

    endpoints.enabled=false
    endpoints.info.enabled=true

健康信息

  • 健康信息可以用來檢查應(yīng)用的運行狀態(tài)。它經(jīng)常被監(jiān)控軟件用來提醒人們生產(chǎn)系統(tǒng)是否停止。health端點暴露的默認信息取決于端點是如何被訪問的。對于一個非安全,未認證的連接只返回一個簡單的'status'信息。對于一個安全或認證過的連接其他詳細信息也會展示(具體參考Section 41.6, “HTTP Health endpoint access restrictions” )。

  • 健康信息是從你的ApplicationContext中定義的所有HealthIndicator beans收集過來的。Spring Boot包含很多auto-configured的HealthIndicators,你也可以寫自己的。

安全與HealthIndicators

  • HealthIndicators返回的信息常常性質(zhì)上有點敏感。例如,你可能不想將數(shù)據(jù)庫服務(wù)器的詳情發(fā)布到外面。因此,在使用一個未認證的HTTP連接時,默認只會暴露健康狀態(tài)(health status)。如果想將所有的健康信息暴露出去,你可以把endpoints.health.sensitive設(shè)置為false。

  • 為防止'拒絕服務(wù)'攻擊,Health響應(yīng)會被緩存。你可以使用 endpoints.health.time-to-live 屬性改變默認的緩存時間(1000毫秒)。

自動配置的HealthIndicators
  • 下面的HealthIndicators會被Spring Boot自動配置(在合適的時候):
名稱 描述
DiskSpaceHealthIndicator 低磁盤空間檢測
DataSourceHealthIndicator 檢查是否能從DataSource獲取連接
MongoHealthIndicator 檢查一個Mongo數(shù)據(jù)庫是否可用(up)
RabbitHealthIndicator 檢查一個Rabbit服務(wù)器是否可用(up)
RedisHealthIndicator 檢查一個Redis服務(wù)器是否可用(up)
SolrHealthIndicator 檢查一個Solr服務(wù)器是否可用(up)
編寫自定義HealthIndicators
  • 想提供自定義健康信息,你可以注冊實現(xiàn)了HealthIndicator接口的Spring beans。你需要提供一個health()方法的實現(xiàn),并返回一個Health響應(yīng)。Health響應(yīng)需要包含一個status和可選的用于展示的詳情。
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.stereotype.Component;
@Component
public class MyHealth 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();
    }
}
  • 除了Spring Boot預(yù)定義的Status類型,Health也可以返回一個代表新的系統(tǒng)狀態(tài)的自定義Status。在這種情況下,需要提供一個HealthAggregator接口的自定義實現(xiàn),或使用management.health.status.order屬性配置默認的實現(xiàn)。

  • 例如,假設(shè)一個新的,代碼為FATAL的Status被用于你的一個HealthIndicator實現(xiàn)中。為了配置嚴重程度,你需要將下面的配置添加到application屬性文件中:

 management.health.status.order: DOWN, OUT_OF_SERVICE, UNKNOWN, UP
  • 如果使用HTTP訪問health端點,你可能想要注冊自定義的status,并使用HealthMvcEndpoint進行映射。例如,你可以將FATAL映射為HttpStatus.SERVICE_UNAVAILABLE。

自定義應(yīng)用info信息

  • 通過設(shè)置Spring屬性info.*,你可以定義info端點暴露的數(shù)據(jù)。所有在info關(guān)鍵字下的Environment屬性都將被自動暴露。例如,你可以將下面的配置添加到application.properties:
info.app.name=MyService
info.app.description=My awesome service
info.app.version=1.0.0

Git提交信息

  • info端點的另一個有用特性是,當(dāng)項目構(gòu)建完成后,它可以發(fā)布關(guān)于你的git源碼倉庫狀態(tài)的信息。如果在你的jar中包含一個git.properties文件,git.branch和git.commit屬性將被加載。

  • 對于Maven用戶, spring-boot-starter-parent POM包含一個能夠產(chǎn)生git.properties文件的預(yù)配置插件。只需要簡單的將下面的聲明添加到你的POM中:

<build>
    <plugins>
        <plugin>
            <groupId>pl.project13.maven</groupId>
            <artifactId>git-commit-id-plugin</artifactId>
        </plugin>
    </plugins>
</build>
  • 對于Gradle用戶可以使用一個相似的插件gradle-git,盡管為了產(chǎn)生屬性文件可能需要稍微多點工作。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容