1. 程式人生 > >執行狀態監控使用 Actuator

執行狀態監控使用 Actuator

springboot2.0 的配置

#actuator埠
management.server.port: 9001
#修改訪問路徑  2.0之前預設是/   2.0預設是 /actuator  可以通過這個屬性值修改
management.endpoints.web.base-path: /actuator
#開放所有頁面節點  預設只開啟了health、info兩個節點
management.endpoints.web.exposure.include: '*'
#顯示健康具體資訊  預設不會顯示詳細資訊
management.endpoint.health.show-details: always


預設情況下,shutdown啟用除以外的所有端點。要配置端點的啟用,請使用其management.endpoint.<id>.enabled屬性。以下示例啟用shutdown端點:

management.endpoint.shutdown.enabled = true


如果您希望端點啟用是選擇加入而不是選擇退出,請將該management.endpoints.enabled-by-default屬性設定 為false並使用各個端點 enabled屬性重新加入。以下示例啟用info端點並禁用所有其他端點:

management.endpoints.enabled-by-default = false
management.endpoint.info.enabled = true


 

配置完成啟動專案後就可以通過postman或者直接在預覽器輸入路徑等方式來檢視應用的執行狀態了。

例如使用postman傳送 localhost:9001/actuator/health GET請求 (除了shutdown請求為post,其他的皆為GET請求)

當專案啟動時,訪問’/actuator’地址,如果看到類似下面的內容,說明actuator已經生效了

{
    "_links": {
        "self": {
            "href": "http://localhost:8000/actuator",
            "templated": false
        },
        "health": {
            "href": "http://localhost:8000/actuator/health",
            "templated": false
        },
        "info": {
            "href": "http://localhost:8000/actuator/info",
            "templated": false
        }
        ...
        ...
    }
}


可配置端點

可以使用以下與技術無關的端點:

ID 描述 預設情況下啟用
auditevents 公開當前應用程式的稽核事件資訊。
beans 顯示應用程式中所有Spring bean的完整列表。
caches 暴露可用的快取。
conditions 顯示在配置和自動配置類上評估的條件以及它們匹配或不匹配的原因。
configprops 顯示所有的整理列表@ConfigurationProperties
env 露出Spring的屬性ConfigurableEnvironment
flyway 顯示已應用的任何Flyway資料庫遷移。
health 顯示應用健康資訊。
httptrace 顯示HTTP跟蹤資訊(預設情況下,最後100個HTTP請求 - 響應交換)。
info 顯示任意應用資訊。
integrationgraph 顯示Spring Integration圖。
loggers 顯示和修改應用程式中記錄器的配置。
liquibase 顯示已應用的任何Liquibase資料庫遷移。
metrics 顯示當前應用程式的“指標”資訊。
mappings 顯示所有@RequestMapping路徑的整理列表。
scheduledtasks 顯示應用程式中的計劃任務。
sessions 允許從Spring Session支援的會話儲存中檢索和刪除使用者會話。使用Spring Session對響應式Web應用程式的支援時不可用。
shutdown 允許應用程式正常關閉。 沒有
threaddump 執行執行緒轉儲。

如果您的應用程式是Web應用程式(Spring MVC,Spring WebFlux或Jersey),則可以使用以下附加端點:

ID 描述 預設情況下啟用
heapdump 返回hprof堆轉儲檔案。
jolokia 通過HTTP公開JMX bean(當Jolokia在類路徑上時,不適用於WebFlux)。
logfile 返回日誌檔案的內容(如果已設定logging.filelogging.path屬性)。支援使用HTTP Range標頭來檢索部分日誌檔案的內容。
prometheus 以可以由Prometheus伺服器抓取的格式公開指標。

 

個別介面講解

health

訪問http://127.0.0.1:9001/actuator/health 可以看到

{
  "status": "UP",
  "details": {
    "diskSpace": {
      "status": "UP",
      "details": {
        "total": 64756318208,
        "free": 62741700608,
        "threshold": 10485760
      }
    }
  }
}


自動配置的HealthIndicators

下面的HealthIndicators會被Spring Boot自動配置(在合適的時候):

名字 描述
CassandraHealthIndicator 檢查Cassandra database是否正常
DiskSpaceHealthIndicator 低磁碟空間檢測
DataSourceHealthIndicator 檢查資料庫連線是否正常
ElasticsearchHealthIndicator 檢查Elasticsearch cluster是否正常
JmsHealthIndicator 檢查JMS broker是否正常
MailHealthIndicator 檢查mail server是否正常
MongoHealthIndicator 檢查Mongo database是否正常
RabbitHealthIndicator 檢查Rabbit server是否正常
RedisHealthIndicator 檢查Redis server是否正常
SolrHealthIndicator 檢查Solr server是否正常

編寫自定義HealthIndicators

想提供自定義健康資訊,你可以註冊實現了HealthIndicator介面的Spring beans。你需要提供一個health()方法的實現,並返回一個Health響應。Health響應需要包含一個status和可選的用於展示的詳情。比如上面/health介面中的hello就是再下面定義的

@Component
public class HelloHealthIndicator 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();
    }

    int check(){
        return 0;
    }
}


metrics

訪問/actuator/metrics介面中,會返回actuator提供的所有metric的name

"names": [
    ...
    "jvm.classes.loaded",
    "jvm.classes.unloaded",
    "tomcat.global.error",
    "tomcat.sessions.active.current",
    "tomcat.sessions.alive.max",
    "jvm.gc.live.data.size",
    "tomcat.servlet.request.max",
    "http.server.requests",
    "tomcat.threads.current",
    ...
  ]


在/actuator/metrics介面後面直接加上metric的name,則可以訪問該metric的資訊。我比較關心的是http.server.requests這個metric,因為利用它可以完成對介面的監控

訪問/actuator/metrics/http.server.requests介面,可以看到類似下面的內容

{
  "name": "http.server.requests",
  "description": null,
  "baseUnit": "seconds",
  "measurements": [
    {
      "statistic": "COUNT",
      "value": 12
    },
    {
      "statistic": "TOTAL_TIME",
      "value": 0.045945588
    },
    {
      "statistic": "MAX",
      "value": 0.003358018
    }
  ],
  "availableTags": [
    {
      "tag": "exception",
      "values": [
        "None"
      ]
    },
    {
      "tag": "method",
      "values": [
        "GET"
      ]
    },
    {
      "tag": "uri",
      "values": [
        "/clog"
      ]
    },
    {
      "tag": "outcome",
      "values": [
        "SUCCESS"
      ]
    },
    {
      "tag": "status",
      "values": [
        "200"
      ]
    }
  ]
}


在measurements下面可以看到所有介面一共被訪問了多少次,返回所有結果一共耗時了多久,返回最慢的介面耗時了多久等。單單是這些資訊,並不覺得多麼重要。但後面還有一個屬性是availableTags,它給出了所有可用的tag key和tag value,根據這些可以進一步篩選你想要監控的內容,來看如何根據tag進一步獲取我們想要的監控資訊。

根據tag進行篩選

可以用下面的語法來對tag進行篩選

/actuator/metrics/http.server.requests?tag=uri:/actuator/metrics

上面的地址可以只關注uri=/actuator/metrics的指標,可以看到該介面一共被訪問了多少次,最慢的情況下耗時了多久等。

SpringBoot2.0 Actuator監控指標分析

序號 引數 引數說明 是否監控 監控手段 重要度
--- JVM ---      
1 jvm.memory.max JVM最大記憶體      
2 jvm.memory.committed JVM可用記憶體 展示並監控堆記憶體和Metaspace 重要
3 jvm.memory.used JVM已用記憶體 展示並監控堆記憶體和Metaspace 重要
4 jvm.buffer.memory.used JVM緩衝區已用記憶體      
5 jvm.buffer.count 當前緩衝區數      
6 jvm.threads.daemon JVM守護執行緒數 顯示在監控頁面  
7 jvm.threads.live JVM當前活躍執行緒數 顯示在監控頁面;監控達到閾值時報警 重要
8 jvm.threads.peak JVM峰值執行緒數 顯示在監控頁面  
9 jvm.classes.loaded 載入classes數      
10 jvm.classes.unloaded 未載入的classes數      
11 jvm.gc.memory.allocated GC時,年輕代分配的記憶體空間      
12 jvm.gc.memory.promoted GC時,老年代分配的記憶體空間      
13 jvm.gc.max.data.size GC時,老年代的最大記憶體空間      
14 jvm.gc.live.data.size FullGC時,老年代的記憶體空間      
15 jvm.gc.pause GC耗時 顯示在監控頁面  
--- TOMCAT ---      
16 tomcat.sessions.created tomcat已建立session數      
17 tomcat.sessions.expired tomcat已過期session數      
18 tomcat.sessions.active.current tomcat活躍session數      
19 tomcat.sessions.active.max tomcat最多活躍session數 顯示在監控頁面,超過閾值可報警或者進行動態擴容 重要
20 tomcat.sessions.alive.max.second tomcat最多活躍session數持續時間      
21 tomcat.sessions.rejected 超過session最大配置後,拒絕的session個數 顯示在監控頁面,方便分析問題  
22 tomcat.global.error 錯誤總數 顯示在監控頁面,方便分析問題  
23 tomcat.global.sent 傳送的位元組數      
24 tomcat.global.request.max request最長時間      
25 tomcat.global.request 全域性request次數和時間      
26 tomcat.global.received 全域性received次數和時間      
27 tomcat.servlet.request servlet的請求次數和時間      
28 tomcat.servlet.error servlet發生錯誤總數      
29 tomcat.servlet.request.max servlet請求最長時間      
30 tomcat.threads.busy tomcat繁忙執行緒 顯示在監控頁面,據此檢查是否有執行緒夯住  
31 tomcat.threads.current tomcat當前執行緒數(包括守護執行緒) 顯示在監控頁面 重要
32 tomcat.threads.config.max tomcat配置的執行緒最大數 顯示在監控頁面 重要
33 tomcat.cache.access tomcat讀取快取次數      
34 tomcat.cache.hit tomcat快取命中次數      
--- CPU... ---      
35 system.cpu.count CPU數量      
36 system.load.average.1m load average 超過閾值報警 重要
37 system.cpu.usage 系統CPU使用率      
38 process.cpu.usage 當前程序CPU使用率 超過閾值報警  
39 http.server.requests http請求呼叫情況 顯示10個請求量最大,耗時最長的URL;統計非200的請求量 重要
40 process.uptime 應用已執行時間 顯示在監控頁面  
41 process.files.max 允許最大控制代碼數 配合當前開啟控制代碼數使用  
42 process.start.time 應用啟動時間點 顯示在監控頁面  
43 process.files.open 當前開啟控制代碼數 監控檔案控制代碼使用率,超過閾值後報警 重要