Springboot actuator應用後臺監控實現
一 前言
springboot 額外的特色是提供了後臺應用監控,可以通過 HTTP 或者 JMX的方式管理監控應用,本文主講HTTP方式;其主要的功能是監控應用的健康狀態,檢視環境變數等;
二 pom.xml
springboot 2.1.1,主要引入 actuator 依賴,web依賴用於測試;
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
三 預設開啟端點
3.1 預設端點 health
直接編寫主程式入口,啟動;瀏覽器輸入 http://localhost:8080/actuator/health;結果如下,狀態是UP;
翻翻原始碼heath狀態碼如下
public OrderedHealthAggregator() { this.setStatusOrder(Status.DOWN,Status.OUT_OF_SERVICE,Status.UP,Status.UNKNOWN); }
- DOWN 服務無法獲得,狀態碼503;
- .OUT_OF_SERVICE 服務無法獲得,狀態碼503;
- UP 獲得服務,狀態碼200;
- UNKNOWN 獲得未知服務,狀態碼200;
在 application.yml 中配置 healthy 資訊 示例如下:
management: endpoint: health: show-details: always
列印詳細資訊:
基本配置如下:
never :預設,表示不顯示詳細資訊;when-authorized:詳細資訊顯示給 認證過的使用者;使用
management.endpoint.health.roles 配置always: 顯示詳細資訊給所有使用者3.2 預設端點 info
瀏覽器輸入 http://localhost:8080/actuator/info; 展示空資訊如下圖:
在application.yml 中 配置工程 info 資訊 示例如下;
#配置資訊info: actuator: name: springboot-actutor version: 1.0.0 author: zszxz
展示結果如下:
四 HTTP端點說明
端點 | 端點描述 | 預設值 |
---|---|---|
auditevents | 當前應用的審計事件 | Yes |
beans | 顯示spring IOC 容器載入的所有bean | Yes |
caches | 顯示可獲得的快取 | Yes |
conditions | 顯示自動配置通過condition判斷匹配或者不匹配的配置資訊 | Yes |
configprops | 顯示 通過 @ConfigurationProperties 配置的屬性資訊 | Yes |
env | spring環境變數屬性資訊 | Yes |
flyway | 顯示flyway 配置資料庫已經遷移的資訊 | Yes |
health | 顯示應用的健康資訊 | Yes |
httptrace | 顯示 HTTP 軌跡資訊預設最新的100 HTTP request或response | Yes |
info | 顯示自定義的應用資訊 | Yes |
integrationgraph | 顯示spring 整合 graph 資訊 | Yes |
loggers | 顯示配置檔案中日誌修改資訊 | Yes |
liquibase | 顯示 任意的 Liquibase 資料庫已經遷移的資訊 | Yes |
metrics | 顯示當前應用的指標 | Yes |
mappings | 顯示 @RequestMapping paths. 配置的路徑資訊 | Yes |
scheduledtasks | 顯示任務排程資訊 | Yes |
sessions | 刪除或者恢復Spring Session會話,不支援web響應式程式設計 | Yes |
shutdown | 關閉應用 | No |
threaddump | 執行一個執行緒轉儲 | Yes |
五 配置開啟端點
application.yml 中配置需要開啟的端點,其中 * 表示開啟所有端點,示例如下:
management: endpoints: web: exposure: # 使用萬用字元 * 表示匹配所有端點 # 排除的端點 exclude: caches # 包括的端點 include: info,health,beans,env,shutdown,threaddump
5.1 threaddump示例
http://localhost:8080/actuator/threaddump ;用於返回執行緒快照,分析執行緒阻塞,死鎖等,部分內容如下
{ "threads": [{ "threadName": "DestroyJavaVM","threadId": 41,"blockedTime": -1,"blockedCount": 0,"waitedTime": -1,"waitedCount": 0,"lockName": null,"lockOwnerId": -1,"lockOwnerName": null,"inNative": false,"suspended": false,"threadState": "RUNNABLE","stackTrace": [],"lockedMonitors": [],"lockedSynchronizers": [],"lockInfo": null }
5.2 beans示例
http://localhost:8080/actuator/beans ; 用於返回 spring 容器載入的所有bean,部分內容如下;
{ "contexts": { "application": { "beans": { "endpointCachingOperationInvokerAdvisor": { "aliases": [],"scope": "singleton","type": "org.springframework.boot.actuate.endpoint.invoker.cache.CachingOperationInvokerAdvisor","resource": "class path resource [org/springframework/boot/actuate/autoconfigure/endpoint/EndpointAutoConfiguration.class]","dependencies": ["environment"] },"defaultServletHandlerMapping": { "aliases": [],"type": "org.springframework.web.servlet.HandlerMapping","resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]","dependencies": [] }
5.3 關閉應用示例
普通情況下是沒有開啟這個配置,是比較危險的動作,會導致應用停止;修改application.yml配置如下
management: endpoints: web: exposure: # 使用萬用字元 * 表示匹配所有端點 # 排除的端點 exclude: caches # 包括的端點 include: info,shutdown endpoint: health: show-details: always # 開啟關閉應用 需要post請求 shutdown: enabled: true
訪問地址 http://localhost:8080/actuator/shutdown; 注意僅支援使用POST請求,否則 會 405錯誤;
六 CORS 支援
application.yml 修改配置如下, allowed-origins 中允許跨域的ip地址; allowed-methods 配置 允許通過的請求,還有支援時間等;
management: endpoints: web: exposure: # 使用萬用字元 * 表示匹配所有端點 # 排除的端點 exclude: caches # 包括的端點 include: info,shutdown # 跨域處理 cors: allowed-origins: http://localhost:8080/ allowed-methods: post,delete,get,put endpoint: health: show-details: always # 開啟關閉應用 需要post請求 shutdown: enabled: true
七 修改預設路徑
在 配置檔案中新增 base-path , 會修改掉預設路徑 actuator/endpoint;
management: endpoints: web: exposure: # 使用萬用字元 * 表示匹配所有端點 # 排除的端點 exclude: caches # 包括的端點 include: info,shutdown # 自定義配置監控路徑 base-path: /zszxz # 跨域處理 cors: allowed-origins: http://localhost:8080/ allowed-methods: post,put endpoint: health: show-details: always # 開啟關閉應用 需要post請求 shutdown: enabled: true
示例url: http://localhost:8080/zszxz/info
結果如下
八 其他配置說明
還可以引入 security 依賴 配置 賬號密碼,角色資訊,達到訪問控制,詳細的可以參照官網;
還可以使用註解進行配置,自定義端點,詳細參照官網;
jmx支援,可以使用open jdk 自帶的工具 jconsole 進行監控;
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。