1. 程式人生 > >Springboot(一)監控與管理Actuator

Springboot(一)監控與管理Actuator

前言:

     Actuator是一個暴露自身資訊的模組,主要實現對應用系統的監控與管理。主要有三大功能:

  • 應用配置類:獲取應用程式中載入的應用配置、環境變數、自動化配置報告等與Spring Boot應用密切相關的配置類資訊。
  • 度量指標類:獲取應用程式執行過程中用於監控的度量指標,比如:記憶體資訊、執行緒池資訊、HTTP請求統計等。
  • 操作控制類:提供了對應用的關閉等操作類功能。
加入maven包:
 
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

在springboot配置檔案中配置訪問根路徑,springboot2.0預設: /actuator,老版本為/

management:
  endpoints:
    web:
      base-path: /actuator
端點(Endpoints)
    端點可用於監控應用或者與應用進行互動,Spring Boot包含很多內建的端點,每個斷電都可以禁用或者啟用,要訪問遠端端點必須通過JMX或者http進行暴露,下圖為啟動應用程式的端點。

端點列表:


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

端點啟動不代表可以直接用,必須將其暴露出來。

啟用端點:

   預設除了shutdown以外,所有端點均已啟用,要配置單個端點的啟用,需要按照下面方式:

management.endpoint.shutdown.enabled=true

另外可以通過management.endpoints.enabled-by-default來修改全域性埠預設配置,以下示例啟用info端點並禁用所有其他端點:

management.endpoints.enabled-by-default=false
management.endpoint.info.enabled=tru
暴露端點

由於端點可能包含敏感資訊,因此應仔細考慮何時公開它們。下表顯示了內建端點的預設曝光:

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列表進行配置。

例如,要停止通過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: '*'
跨域支援

跨源資源共享(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
自定義管理伺服器地址

您可以通過設定management.server.address屬性來自定義管理端點可用的地址。如果您只想在內部網路或面向作業系統的網路上收聽,或只收聽本地主機的連線,那麼這樣做會很有用。

只有當埠與主伺服器埠不同時,您才可以監聽其他地址。

以下示例application.properties不允許遠端管理連線:

management.server.port=8081
management.server.address=127.0.0.1
  • 2禁用HTP端點

如果您不想通過HTTP公開端點,則可以將管理埠設定為-1,如以下示例所示:

management.server.port=-1

我的spring配置檔案:

management:
  endpoints:
    web:
      base-path: /actuator
      exposure:
        include: '*'

程式啟動時檢測到的端點:


參考: