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 |
要更改公開哪些端點,請使用以下技術特定的include
和exclude
屬性:
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公開所有端點並僅公開health和info端點,請使用以下屬性:
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: '*'
程式啟動時檢測到的端點: