SpringBoot四大神器之Actuator

介紹

Spring Boot有四大神器,分別是auto-configuration、starters、cli、actuator,本文主要講actuator。actuator是spring boot提供的對應用系統的自省和監控的集成功能,能夠對應用系統進行配置查看、相關功能統計等。html

如何使用

在pom文件中添加spring-boot-starter-actuator依賴web

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

啓動應用,日誌裏會打印actuator相關信息以下,spring

沒有spring-boot-starter-actuator依賴以前以下,shell

Actuator功能點說明

Spring Boot Actuator的關鍵特性是在應用程序裏提供衆多Web端點,經過它們瞭解應用程序 運行時的內部情況。有了Actuator,你能夠知道Bean在Spring應用程序上下文裏是如何組裝在一 起的,掌握應用程序能夠獲取的環境屬性信息,獲取運行時度量信息的快照…… Actuator提供了13個端點,具體如表7-1所示。 apache

/info端點顯示應用程序的基本描述

/info,這個endpoint顯示應用程序的基本描述,在以前的實踐例子中咱們看過它的返回信息,屬性值來自appliaction.properties,同時也可使用佔位符獲取pom.xml文件中的信息。任何以info.開頭的屬性都會在訪問http://localhost:8080/info時顯示。設計模式

例如/info:首先在application.properties文件中添加對應的屬性值,符號@包圍的屬性值來自pom.xml文件中的元素節點。tomcat

info.build.artifact=@project.artifactId@
info.build.name=@project.name@
info.build.description=@project.description@
info.build.version=@project.version@

要獲取配置文件中的節點值,須要在pom文件中進行必定的配置,首先在<build>節點裏面添加:安全

<resources>
 <resource>
    <directory>src/main/resources</directory>
    <filtering>true</filtering>
 </resource>
</resources>

而後在<plugins>節點裏面增長對應的插件:多線程

複製代碼
<plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-resources-plugin</artifactId>
 <version>2.6</version>
 <configuration>
    <delimiters>
       <delimiter>@</delimiter>
    </delimiters>
    <useDefaultDelimiters>false</useDefaultDelimiters>
 </configuration>
</plugin>
複製代碼

而後運行應用程序,訪問http://localhost:8080/info,能夠看到下列信息app

  • /env提供應用程序的環境變量,若是你在調試時想知道某個配置項在運行時的值,能夠經過這個endpoint訪問——訪問http://localhost:8080/env,能夠看到不少方面的配置,例如,class path resources—[tomcat.https.properties]、applicationConfig—[classpath:/application.properties]、commonsConfig、systemEnvironment、systemProperties等。
    這些變量的值由Environment實例中的PropertySource實例保存,根據這些屬性值所在的層次,有可能在運行時已經作了值替換,跟配置文件中的不同了。爲了確認某個屬性的具體值,例如book.count.rate屬性,能夠訪問http://localhost:8080/env/book.counter.rate來查詢,若是跟配置文件中的不同,則多是被系統變量或者命令行參數覆蓋了。EnvironmentEndpoint類負責實現上述功能,有興趣能夠再看看它的源碼;
  • /configprops提供不一樣配置對象,例如WebConfiguration.TomcatSslConnectionProperties,它與/env不一樣的地方在於它會表示出與配置項綁定的對象。嘗試下訪問http://localhost:8080/configprops,而後在網頁中查詢custom.tomcat.https,能夠看到咱們以前用於配置TomcatSslConnector對象的屬性值(參見:讓你的Spring Boot工程支持HTTP和HTTPS)。

    TomcatSslConnector對應的屬性值
  • /autoconfig以web形式對外暴露AutoConfiguration 信息,這些信息的解釋能夠參考Spring Boot:定製本身的starter一文,這樣咱們就不須要經過「修改應用程序的日誌級別和查看應用的啓動信息」來查看應用的自動配置狀況了。
  • /beans,這個endpoint列出全部由Spring Boot建立的bean。

    /beans顯示全部Spring Boot建立的bean
  • /mappings,這個endpoint顯示當前應用支持的URL映射,該映射關係由HandlerMapping類維護,經過這個endpoint能夠查詢某個URL的路由信息。

    /mappings查看URL映射

 

  • /health提供應用程序的健康狀態,或者是某個核心模塊的健康狀態

/health端點所提供的全部信息都是由一個或多個健康指示器提供的。表7-3列出了Spring Boot 自帶的健康指示器:

 

  • /metrics,這個endpoint查看應用程序的度量值

下表 /metrics端點報告的度量值和計數器,

/metrics端點會返回全部的可用度量值,但你也可能只對某個值感興趣。要獲取單個值,請 求時能夠在URL後加上對應的鍵名。例如,要查看空閒內存大小,能夠向/metrics/mem.free發一 個GET請求:

垃圾收集器

 

http

counter.status後的值是HTTP狀態碼,隨後是所請 求的路徑。舉個例子,counter.status.200.metrics代表/metrics端點返回200(OK)狀態碼 的次數。 HTTP的度量信息在結構上也差很少,卻在報告另外一類信息。它們所有以gauge.response開頭, 代表這是HTTP響應的度量信息。前綴後是對應的路徑。度量值是以毫秒爲單位的時間,反映了 近處理該路徑請求的耗時。舉個例子,代碼清單7-6裏的gauge.response.beans說明上一次 請求耗時169毫秒。 這裏還有幾個特殊的值須要注意。root路徑指向的是根路徑或/。

star-star表明了那些Spring 認爲是靜態資源的路徑,包括圖片、JavaScript和樣式表,其中還包含了那些找不到的資源。這就 是爲何你常常會看到counter.status.404.star-star,這是返回了HTTP 404 (NOT FOUND) 狀態的請求數。 

 

/trace追蹤Web請求

/trace端點能報告全部Web請求的詳細信息,包括請求方法、路徑、時間戳以及請求和響應的 頭信息。代碼清單7-7是/trace輸出的一個片斷,其中包含了整個請求跟蹤項。 

正如method和path屬性所示,你能夠看到這個跟蹤項是一個針對/metrics的請求。 timestamp屬性(以及響應中的Date頭)告訴了你請求的處理時間。headers屬性的內容是請 求和響應中所攜帶的頭信息。 雖然代碼清單7-7裏只顯示了一條跟蹤項,但/trace端點實際能顯示近100個請求的信息,包 含對/trace本身的請求。它在內存裏維護了一個跟蹤庫。稍後在7.4.4節裏,你會看到如何建立一 個自定義的跟蹤庫實現,以便將請求的跟蹤持久化。 

/dump導出線程活動

/dump端點會生成當前線程活動的快照。完整的線程導出報告裏會包含應用程序的每一個線程。爲了節省空間,下面只放了 一個線程的內容片斷。如你所見,其中包含不少線程的特定信息,還有線程相關的阻塞和鎖狀態。 本例中,還有一個跟蹤棧(stack trace),代表這是一個Tomcat容器線程。 

/shutdown端點關閉應用程序

爲了關閉應用程序,你要往/shutdown發送一個POST請求。很顯然,關閉運行中的應用程序是件危險的事情,所以這個端點默認是關閉的。要開啓該端點,能夠將endpoints.shutdown.enabled設置爲true。舉例來講,能夠把如 下內容加入application.yml,藉此開啓/shutdown端點: 

endpoints.shutdown.enabled=true

GET請求提示不支持,以下圖:

用fiddler模擬一個POST請求,能夠成功關閉應用,以下圖: 

 

上述各個endpoint是Spring Boot Actuator提供的接口和方法,接下來看看咱們本身定製的HealthIndicator,咱們只須要實現HealthIndicator接口,Spring Boot會收集該接口的實現,並加入到/health這個endpoint中。

在咱們的例子中,咱們爲每一個CrudRepository實例都建立了一個HealthIndicator實例,爲此咱們建立了一個CompositeHealthIndicator實例,由這個實例管理全部的DbHealthIndicator實例。做爲一個composite,它會提供一個內部的層次關係,從而能夠返回JSON格式的數據。

代碼中的HealthAggregator實例的做用是:它維護一個map,告訴CompositeHealthIndicator如何決定全部HealthIndicator表明的總體的狀態。例如,除了一個repository返回DOWN其餘的都返回UP,這時候這個composite indicator做爲一個總體應該返回UP仍是DOWN,HealthAggregator實例的做用就在這裏。

Spring Boot使用的默認的HealthAggregator實現是OrderedHealthAggregator,它的策略是手機全部的內部狀態,而後選出在DOWN、OUT_OF_SERVICE、UP和UNKNOWN中間具備最低優先級的那個狀態。這裏使用策略設計模式,所以具體的狀態斷定策略能夠改變和定製,例如咱們能夠建立定製的HealthAggregator

最後須要考慮下安全問題,經過這些endpoints暴露出不少應用的信息,固然,Spring Boot也提供了配置項,能夠關閉指定的endpoint——在application.properties中配置<name>.enable=false

還能夠經過設置management.port=-1關閉endpoint的HTTP訪問接口,或者是設置其餘的端口,供內部的admin服務訪問;除了控制端口,還能夠設置僅僅讓本地訪問,只須要設置management.address=127.0.0.1;經過設置management.context-path=/admin,能夠設置指定的根路徑。綜合下,通過上述設置,在本地訪問http://127.0.0.1/admin/health來訪問健康狀態。

能夠在防火牆上屏蔽掉不是/admin/*的endpoints訪問請求,更進一步,利用Spring Security能夠配置驗證信息,這樣要訪問當前應用的endpoints必須使用用戶名和密碼登錄。

2、鏈接Actuator的遠程 shell

Actuator經過REST端點提供了很多很是有用的信息。另外一個深刻運行中應用程序內部的方式 是使用遠程shell。Spring Boot集成了CRaSH,一種能嵌入任意Java應用程序的shell。Spring Boot 還擴展了CRaSH,添加了很多Spring Boot特有的命令,提供了與Actuator端點相似的功能。 要使用遠程shell,只需加入遠程shell的起步依賴便可。你須要這樣的Gradle依賴:

compile("org.springframework.boot:spring-boot-starter-remote-shell")

若是用Maven構建項目,你須要在pom.xml文件裏添加以下依賴: 

<dependency>   
    <groupId>org.springframework.boot</groupId>   
    <artifactId>spring-boot-starter-remote-shell</artifactId> 
</dependency>

添加了遠程shell依賴後,就能夠構建並運行應用程序了。在啓動的時候,能夠看到要寫進日 志的一行密碼。這行密碼所在的行大概是這樣的: 

Using default password for shell access: c59b152d-f7e2-41de-86f1-6c3e9e38229b

如今你能夠經過SSH工具鏈接shell了,它監聽的端口號是2000。若是你用的是Unix的ssh命 令,那麼它看起來大概是這樣的: 

帳號密碼分別是user/c59b152d-f7e2-41de-86f1-6c3e9e38229b

登錄成功後,顯示以下:

遠程shell提供了24個能夠在運行應用程序上下文中執行的命令,其中大部分都是CRaSH自帶 的。但Spring Boot也添加了一些。表7-4列出了這些Spring Boot特有的命令。 

 

例如用autoconfig生成了一個與Actuatord的/autoconfig端點相似的報告。

 

metrics

3、經過JMX監控應用程序 

除了REST端點和遠程shell,Actuator還把它的端點以MBean的方式發佈了出來,能夠經過 JMX來查看和管理。使用JMX是管理Spring Boot應用程序的一個好方法,若是你已在用JMX管理 應用程序中的其餘MBean,則尤爲如此。 

Actuator的端點都發布在org.springframework.boot域下。好比,你想要查看應用程序的請求映 射關係,那麼能夠看一下圖7-6(經過JConsole查看請求映射端點)。 

鏈接成功後,

如你所見,在requestMappingEndpoint下能夠找到請求映射端點,位於org.spring- framework.boot域中的Endpoint下。Data屬性中包含了該端點所要輸出的JSON內容。 和其餘MBean同樣,端點MBean有可供調用的操做。大部分端點MBean只有訪問操做,返回 其中的某個屬性,但/shutdown端點提供了一些有趣(同時具備毀滅性)的操做,以下圖所示,點擊shutdown的方框,應用就中止了。

 

轉自:http://www.cnblogs.com/duanxz/p/3503094.html

相關文章
相關標籤/搜索