Springboot actuator應(yīng)用后臺監(jiān)控實現(xiàn)
一 前言
springboot 額外的特色是提供了后臺應(yīng)用監(jiān)控,可以通過 HTTP 或者 JMX的方式管理監(jiān)控應(yīng)用,本文主講HTTP方式;其主要的功能是監(jiān)控應(yīng)用的健康狀態(tài),查看環(huán)境變量等;
二 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;結(jié)果如下,狀態(tài)是UP;

翻翻源碼heath狀態(tài)碼如下
public OrderedHealthAggregator() {
this.setStatusOrder(Status.DOWN, Status.OUT_OF_SERVICE, Status.UP, Status.UNKNOWN);
}
- DOWN 服務(wù)無法獲得,狀態(tài)碼503;
- .OUT_OF_SERVICE 服務(wù)無法獲得,狀態(tài)碼503;
- UP 獲得服務(wù),狀態(tài)碼200;
- UNKNOWN 獲得未知服務(wù),狀態(tài)碼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
展示結(jié)果如下:

四 HTTP端點說明
| 端點 | 端點描述 | 默認值 |
|---|---|---|
| auditevents | 當前應(yīng)用的審計事件 | Yes |
| beans | 顯示spring IOC 容器加載的所有bean | Yes |
| caches | 顯示可獲得的緩存 | Yes |
| conditions | 顯示自動配置通過condition判斷匹配或者不匹配的配置信息 | Yes |
| configprops | 顯示 通過 @ConfigurationProperties 配置的屬性信息 | Yes |
| env | spring環(huán)境變量屬性信息 | Yes |
| flyway | 顯示flyway 配置數(shù)據(jù)庫已經(jīng)遷移的信息 | Yes |
| health | 顯示應(yīng)用的健康信息 | Yes |
| httptrace | 顯示 HTTP 軌跡信息默認最新的100 HTTP request或response | Yes |
| info | 顯示自定義的應(yīng)用信息 | Yes |
| integrationgraph | 顯示spring 整合 graph 信息 | Yes |
| loggers | 顯示配置文件中日志修改信息 | Yes |
| liquibase | 顯示 任意的 Liquibase 數(shù)據(jù)庫已經(jīng)遷移的信息 | Yes |
| metrics | 顯示當前應(yīng)用的指標 | Yes |
| mappings | 顯示 @RequestMapping paths. 配置的路徑信息 | Yes |
| scheduledtasks | 顯示任務(wù)調(diào)度信息 | Yes |
| sessions | 刪除或者恢復(fù)Spring Session會話,不支持web響應(yīng)式編程 | Yes |
| shutdown | 關(guān)閉應(yīng)用 | No |
| threaddump | 執(zhí)行一個線程轉(zhuǎn)儲 | Yes |
五 配置開啟端點
application.yml 中配置需要開啟的端點,其中 * 表示開啟所有端點,示例如下:
management: endpoints: web: exposure: # 使用通配符 * 表示匹配所有端點 # 排除的端點 exclude: caches # 包括的端點 include: info,health,beans,env,shutdown,threaddump
5.1 threaddump示例
http://localhost:8080/actuator/threaddump ;用于返回線程快照,分析線程阻塞,死鎖等,部分內(nèi)容如下
{
"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,部分內(nèi)容如下;
{
"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": [],
"scope": "singleton",
"type": "org.springframework.web.servlet.HandlerMapping",
"resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]",
"dependencies": []
}
5.3 關(guān)閉應(yīng)用示例
普通情況下是沒有開啟這個配置,是比較危險的動作,會導(dǎo)致應(yīng)用停止;修改application.yml配置如下
management: endpoints: web: exposure: # 使用通配符 * 表示匹配所有端點 # 排除的端點 exclude: caches # 包括的端點 include: info,health,beans,env,shutdown endpoint: health: show-details: always # 開啟關(guān)閉應(yīng)用 需要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,health,beans,env,shutdown # 跨域處理 cors: allowed-origins: http://localhost:8080/ allowed-methods: post,delete,get,put endpoint: health: show-details: always # 開啟關(guān)閉應(yīng)用 需要post請求 shutdown: enabled: true
七 修改默認路徑
在 配置文件中添加 base-path , 會修改掉默認路徑 actuator/endpoint;
management: endpoints: web: exposure: # 使用通配符 * 表示匹配所有端點 # 排除的端點 exclude: caches # 包括的端點 include: info,health,beans,env,shutdown # 自定義配置監(jiān)控路徑 base-path: /zszxz # 跨域處理 cors: allowed-origins: http://localhost:8080/ allowed-methods: post,delete,get,put endpoint: health: show-details: always # 開啟關(guān)閉應(yīng)用 需要post請求 shutdown: enabled: true
示例url: http://localhost:8080/zszxz/info
結(jié)果如下

八 其他配置說明
還可以引入 security 依賴 配置 賬號密碼,角色信息,達到訪問控制,詳細的可以參照官網(wǎng);
還可以使用注解進行配置,自定義端點,詳細參照官網(wǎng);
jmx支持,可以使用open jdk 自帶的工具 jconsole 進行監(jiān)控;
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Springboot集成Actuator監(jiān)控功能詳解
- SpringBoot監(jiān)控模塊Actuator的用法詳解
- SpringBoot2開啟Actuator端點監(jiān)控的方法
- SpringBoot 指標監(jiān)控actuator的專題
- springboot Actuator的指標監(jiān)控可視化功能詳解
- 基于SpringBoot應(yīng)用監(jiān)控Actuator安全隱患及解決方式
- 使用SpringBoot Actuator監(jiān)控應(yīng)用示例
- springboot 使用Spring Boot Actuator監(jiān)控應(yīng)用小結(jié)
- 詳解關(guān)于springboot-actuator監(jiān)控的401無權(quán)限訪問
- SpringBoot Actuator監(jiān)控的項目實踐
相關(guān)文章
IDEA+Maven創(chuàng)建Spring項目的實現(xiàn)步驟
這篇文章主要介紹了IDEA+Maven創(chuàng)建Spring項目的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
spring cloud gateway全局過濾器實現(xiàn)向request header中放數(shù)據(jù)
這篇文章主要介紹了spring cloud gateway全局過濾器實現(xiàn)向request header中放數(shù)據(jù)的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
Java中通過三級緩存解決Spring循環(huán)依賴詳解
這篇文章主要介紹了Java中通過三級緩存解決Spring循環(huán)依賴詳解,當出現(xiàn)兩個或多個 Bean 在初始化時相互依賴的情況時,Spring Boot 會將其中一個 Bean 提前暴露出來,以便其他 Bean 能夠在初始化時正確地引用它,這一策略能有效避免循環(huán)依賴導(dǎo)致的問題,需要的朋友可以參考下2023-09-09
Java存儲過程調(diào)用CallableStatement的方法
這篇文章主要介紹了Java存儲過程調(diào)用CallableStatement的方法,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下2020-11-11

