SpringBoot actuator 應用監控。

 

 

前言 :

今天在閱讀 《SpringCloud微服務實戰》一書時看到了SpringBoot actuator相關知識,而且本身也本地調試實踐。以爲SpringBoot這一套監控仍是挺有意思的,這裏記錄下學習過程。java

 

:本文基於 springBootVersion = '1.5.10.RELEASE'

算法

一:初識actuator

actuator是SpringBoot的一個組件,組件名稱爲:spring-boot-starter-actuator, 引入方式以下:
application配置文件:spring

#actuator
management.security.enabled= false
endpoints.health.sensitive= false

maven引入:sql

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

或者gradle:數據庫

compile('org.springframework.boot:spring-boot-starter-actuator')

 

配置完成以後,啓動項目,能夠看到:


啓動的時候會加載actuator的全部原生端點,後面會對一些經常使用的節點作解釋。apache

二,體驗Actuator

spring-bbot-starter-actuator模塊中已經實現了一些原生端點,根據端點的做用,能夠將原生端點分爲三大類:安全

  • 應用配置類:獲取應用程序中加載的應用配置、環境變量、自動化配置報告等與Spring Boot應用密切相關的配置類信息。
  • 度量指標類:獲取應用程序運行過程當中用於監控的度量指標,好比內存信息、線程池信息、HTTP請求統計等。
  • 操做控制類:提供了對應用的關閉等操做類功能。

下面就來詳細測試這幾種原生端點,以及看下他們的有用信息和強大的功能。

2.1 應用配置類服務器

 因爲Spring Boot爲了改善傳統Spring引用繁雜的配置內容,採用了包掃描和自動化配置的機制來加載本來集中於XML文件中的各項內容。雖然這樣的作法讓咱們的代碼變得很是簡潔,可是整個應用的實例建立和依賴關係等信息都離散到了各個配置類的註解上,這使咱們分析整個應用中資源的實例的各類關係變得很是困難。而這類端點能夠幫助咱們輕鬆獲取一系列關於Spring 應用配置內容的詳細報告,好比自動化配置的報告、Bean建立的報告、環境屬性的報告等。session

 

  • /autoconfig:該端點用來獲取應用的自動化配置報告,其中包括全部自動化配置的候選項。同時還列出每一個候選項是否知足自動化配置的各個先決條件。因此,該端點能夠幫助咱們方便地找到一些自動化配置爲何沒有生效的緣由。該報告內容將自動化配置內容分爲如下兩部分:
    positiveMatchers:返回的是條件匹配成功的自動化配置。
    negativeMatches :
    返回的是條件匹配不成功的自動化配置。

    這裏只是展現一部份內容,方便展現而省略了不少信息。
    {
        "positiveMatches": {
            "PageHelperAutoConfiguration": [
                {
                    "condition": "OnBeanCondition",
                    "message": "@ConditionalOnBean (types: org.apache.ibatis.session.SqlSessionFactory; SearchStrategy: all) found bean 'sqlSessionFactory'"
                }
            ]
        },
        "negativeMatches": {
            "EncryptionBootstrapConfiguration.RsaEncryptionConfiguration": {
                "notMatched": [
                    {
                        "condition": "EncryptionBootstrapConfiguration.KeyCondition",
                        "message": "Keystore nor key found in Environment"
                    }
                ],
                "matched": [
                    {
                        "condition": "OnClassCondition",
                        "message": "@ConditionalOnClass found required class 'org.springframework.security.rsa.crypto.RsaSecretEncryptor'; @ConditionalOnMissingClass did not find unwanted class"
                    }
                ]
            }
        }
    }

    當咱們發現有一些指望的配置沒有生效時,咱們能夠經過該端點來查看沒有生效的具體緣由。架構

  • /beans:該端點用來獲取應用上下文中建立的全部Bean。


    如上圖所示,咱們能夠看到每一個Bean中都包含了下面的這些信息:
    bean:Bean的名稱
    scope:Bean的做用域
    type:Bean的Java類型
    resource:class文件的具體路徑
    dependencies:以來的Bean名稱

  • /configprops:該端點用來獲取應用中配置的屬性信息報告。prefix屬性表明了屬性的配置前綴,properties表明了各個屬性的名稱和值。
    因此,咱們能夠經過該報告來看到各個屬性的配置路徑,好比咱們要關閉該端點,就能夠經過使用endpoints.configprops.enabled=false來完成配置。

     

  • /env:該端點預/configprops不一樣,它用來獲取應用全部可用的環境屬性報告。包括環境變量、JVM屬性、應用的配置屬性、命令行中的參數。從下面該端點返回的示例片斷中,能夠看到它不只返回了應用的配置屬性,還返回了系統屬性、環境變量等豐富的配置信息,其中還包括了應用尚未使用的配置,因此它能夠幫助咱們方便地看到當前應用能夠加載的配置信息,並配合@ConfigurationProperties註解將它們引入到咱們的應用程序中來進行使用。另外,爲了配置屬性的安全,對於一些相似密碼等敏感信息,該端點都會進行隱私保護,可是咱們須要讓屬性中包含password、secret、key 這些關鍵詞,這樣該端點再返回它們的時候都會使用*來替代實際的屬性值。

     

  • /mappings:該端點用來返回全部Spring MVC 的控制器映射關係報告。從下面的示例片斷中,咱們能夠看到該報告的信息與咱們在啓用Spring MVC的Web應用時輸出的日誌信息相似,其中bean屬性標識了該映射關係的請求處理器,method屬性標識了該映射關係的具體處理類和處理函數。

2.2 度量指標類
上面咱們所介紹的應用配置端點類所提供的信息報告在應用啓動的是否就已經基本肯定了其返回內容,能夠說是一個靜態報告。而度量指標類端點提供的報告內容則是動態變化的,這些端點提供了應用程序在運行過程當中一些快照信息,好比內存使用狀況、HTTP請求統計、外部資源指標等。這些端點對於咱們構建微服務架構中的監控系統很是有幫助,因爲Spring Boot 應用自身實現了這些端點,因此咱們能夠很方便地利用它們來收集咱們想要的信息,以定製出各類自動化策略。下面,咱們就來看看這些強大的端點功能。

  • metrics:該端點用來返回當前應用的各種重要度量指標,好比內存信息、線程信息、垃圾回收信息等。

    從上面的示例中,咱們看到有以下這些重要的度量值:
    系統信息:包括處理器數量processors、運行時間uptime和instance.uptime、系統平均負載systemload.average。
    mem.*: 內存概要信息,包括分配給應用的總內存數量以及當前空閒的內存數量。這些信息來自java.lang.Runtime。
    heap.*: 堆內存使用狀況。這些信息來自java.lang.management.MemoryMXBean接口中getHeapMemoryUsage方法獲取的java.lang.management.MemoryUsage。
    nonheap.*: 非堆中內存使用狀況。這些信息來自java.lang.management.MemoryMXBean接口中getNonHeamMemoryUsage方法獲取的java.lang.management.MemoryUsage。
    thrads.*: 線程使用狀況,包括線程數、首付線程數(daemon)、線程峯值(peak)等,這些數據均來自java.lang.management.ThreadMXBean。
    classes.*: 應用加載和卸載的類統計。這些數據均來自java.lang.management.ClassLoadingMXBean。
    gc.*: 垃圾收集器的相信信息。包括垃圾回收次數:gc.ps_scavenge.count,垃圾回收消耗時間:gc.ps_scavenge.time,標記-清除算法的次數:gc.ps_marksweep.count,標記清除算法耗時gc.ps_markweep.time
    httpsessions.*: Tomecat容器的會話使用狀況。包括最大會話數:httpsession.max和獲取會話數:httpsessions.active。該度量指標信息僅在引用嵌入式Tomcat做爲容器時才提供。
    gauge.*: HTTP請求的性能指標之一,它主要用來反映一個絕對數值。
    counter.*: HTTP請求的性能指標之一,它主要用來計數器來使用,記錄了增長量和減小量。

    /metrics端口能夠提供應用運行狀態的完整度量報告,這項功能很是實用,可是對於監控系統中各項監控功能,它們的監控內容、數據收集頻率都有所不一樣,若是每次都經過整年獲取報告的方式來收集,略顯粗暴。因此咱們能夠經過?metrics/{name}接口來更細粒度地獲取度量信息。好比咱們能夠經過/metrics/mem.free來獲取當前可用內存數量。

  • /health:該端點用來獲取應用的各種健康指標信息。在spring-boot-starter-actuator模塊中自帶實現了一些經常使用資源的健康指標檢測器。這些檢測器都經過HealthIndicator接口實現,而且會根據依賴關係的引入實現自動化配置,好比下面列出的這些:
    檢測器 功能
     DiskSpaceHealthIndicatior  低磁盤空間檢測
     DataSOurceHealthIndicator    檢測DataSource的鏈接是否可用
     MongoHealthIndicator  檢測Mongo數據庫是否可用
     RabbitHealthIndicator    檢測Rabbit服務器是否可用
     RedisHealthIndicator    檢測Redis服務器是否可用
     SolrHealthIndicator  檢測Solr服務器是否可用

 

 




  • /dump:該端點用來暴露程序運行過程當中的線程信息。它使用java.lang.management.ThreadMXBean的dumpAllThreads方法來返回全部包含有同步信息的活動線程詳情。
  • trace: 該端點用來返回基本的HTTP跟蹤信息。默認狀況下,跟蹤信息的存儲採用org.springframework.boot.actuate.trace.InMemoryTraceRepository實現的內存方式,始終保留最近的100條請求記錄。

 

2.3 操做控制類

 在原生端點中,只提供了一個用來關閉應用的端點:/shutdown ,能夠經過以下配置開啓它:
 endpoints.shutdown.enabled=true

在配置了上述屬性以後,只須要訪問該應用的/shutdown 端點就能實現關閉該應用的遠程操做。因爲開放關閉應用的操做自己是一件很是危險的事,因此真正在線上使用的時候,須要對其加入必定的保護機制。好比定製actuator的端點路徑、整合Spring Security進行安全校驗等。

三:總結

恰好本身維護的項目在往spring cloud遷移,如今恰好能夠利用業餘時間來學習微服務相關的知識。spring-boot-actuator確實能夠帶來不少咱們想不到的收穫,並且對於運維也是很是有好多。在這裏感謝 《Spring Cloud 微服務實戰》這本書,文章中不少內容是經過讀書來學習到的,這裏只是作個總結。若有紕漏還請你們多多指教。

相關文章
相關標籤/搜索