Spring Boot應(yīng)用監(jiān)控的實(shí)戰(zhàn)教程
概述
Spring Boot 監(jiān)控核心是 spring-boot-starter-actuator 依賴,增加依賴后, Spring Boot 會(huì)默認(rèn)配置一些通用的監(jiān)控,比如 jvm 監(jiān)控、類加載、健康監(jiān)控等。
我們之前講過Docker容器的可視化監(jiān)控,即監(jiān)控容器的運(yùn)行情況,包括 CPU使用率、內(nèi)存占用、網(wǎng)絡(luò)狀況以及磁盤空間等等一系列信息。同樣利用SpringBoot作為微服務(wù)單元的實(shí)例化技術(shù)選型時(shí),我們不可避免的要面對(duì)的一個(gè)問題就是如何實(shí)時(shí)監(jiān)控應(yīng)用的運(yùn)行狀況數(shù)據(jù),比如:健康度、運(yùn)行指標(biāo)、日志信息、線程狀況等等。本文就該問題做一點(diǎn)探索并記錄試驗(yàn)過程。
入門使用:Actuator插件
Actuator插件是SpringBoot原生提供的一個(gè)服務(wù),可以通過暴露端點(diǎn)路由,用來輸出應(yīng)用中的諸多 端點(diǎn)信息。實(shí)戰(zhàn)一下!
pom.xml中添加依賴:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
啟動(dòng)Spring Boot應(yīng)用程序之后,只要在瀏覽器中輸入端點(diǎn)信息就能獲得應(yīng)用的一些狀態(tài)信息。
常用端點(diǎn)列舉如下,可以一個(gè)個(gè)詳細(xì)試一下:
- /info 應(yīng)用基本信息
- /health 健康度信息
- /metrics 運(yùn)行指標(biāo)
- /env 環(huán)境變量信息
- /loggers 日志相關(guān)
- /dump 線程相關(guān)信息
- /trace 請(qǐng)求調(diào)用軌跡
當(dāng)然此時(shí)只能使用/health 和 /info端點(diǎn),其他因?yàn)闄?quán)限問題無法訪問。想訪問指定端點(diǎn)的話可以在yml配置中添加相關(guān)的配置項(xiàng),比如/metrics端點(diǎn)則需要配置:
endpoints: metrics: sensitive: false
此時(shí)瀏覽器訪問/metrics端點(diǎn)就能得到諸如下面所示的信息:
{
"mem": 71529,
"mem.free": 15073,
"processors": 4,
"instance.uptime": 6376,
"uptime": 9447,
"systemload.average": -1.0,
"heap.committed": 48024,
"heap.init": 16384,
"heap.used": 32950,
"heap": 506816,
"nonheap.committed": 23840,
"nonheap.init": 160,
"nonheap.used": 23506,
"nonheap": 0,
"threads.peak": 25,
"threads.daemon": 23,
"threads.totalStarted": 28,
"threads": 25,
"classes": 6129,
"classes.loaded": 6129,
"classes.unloaded": 0,
"gc.copy.count": 74,
"gc.copy.time": 173,
"gc.marksweepcompact.count": 3,
"gc.marksweepcompact.time": 88,
"httpsessions.max": -1,
"httpsessions.active": 0
}
當(dāng)然也可以開啟全部端點(diǎn)權(quán)限,只需如下配置即可:
endpoints: sensitive: false
由于Actuator插件提供的監(jiān)控能力畢竟有限,而且UI比較簡(jiǎn)陋,因此需要一個(gè)更加成熟一點(diǎn)的工具
Spring Boot Admin監(jiān)控系統(tǒng)
SBA則是基于Actuator更加進(jìn)化了一步,其是一個(gè)針對(duì)Actuator接口進(jìn)行UI美化封裝的監(jiān)控工具。我們來實(shí)驗(yàn)一下。
首先來創(chuàng)建一個(gè)Spring Boot Admin Server工程作為服務(wù)端
pom.xml中加入如下依賴:
<dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-server</artifactId> <version>1.5.7</version> </dependency> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-server-ui</artifactId> <version>1.5.7</version> </dependency>
然后在應(yīng)用主類上通過加注解來啟用Spring Boot Admin
@EnableAdminServer
@SpringBootApplication
public class SpringbtAdminServerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbtAdminServerApplication.class, args);
}
}
啟動(dòng)程序,瀏覽器打開 localhost:8081 查看Spring Boot Admin主頁面:

Spring Boot Admin主頁面
此時(shí)Application一欄空空如也,等待待監(jiān)控的應(yīng)用加入
創(chuàng)建要監(jiān)控的Spring Boot應(yīng)用
pom.xml中加入以下依賴
<dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-client</artifactId> <version>1.5.7</version> </dependency>
然后在yml配置中添加如下配置,將應(yīng)用注冊(cè)到Admin服務(wù)端去:
spring: boot: admin: url: http://localhost:8081 client: name: AdminTest
Client應(yīng)用一啟動(dòng),Admin服務(wù)立馬推送來了消息,告訴你AdminTest上線了:

應(yīng)用上線推送消息
此時(shí)去Admin主界面上查看,發(fā)現(xiàn)Client應(yīng)用確實(shí)已經(jīng)注冊(cè)上來了:

Client應(yīng)用已注冊(cè)上來
查看Detail

Detail信息
查看 Metrics

Metrics信息
查看 Enviroment

Enviroment信息
查看JMX

JMX信息
查看Threads

Threads信息
查看Trace與詳情

Trace信息
點(diǎn)擊最上方JOURNAL,會(huì)看到被監(jiān)控應(yīng)用程序的事件變化:

應(yīng)用程序的事件變化信息
圖中可以清晰地看到,應(yīng)用從 REGISTRATION → UNKNOWN → UP 的狀態(tài)跳轉(zhuǎn)。
這樣就將Actuator插件提供的所有端點(diǎn)信息在SBA中全部嘗試了一遍。
參考文獻(xiàn)
http://codecentric.github.io/spring-boot-admin/1.5.7/
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
MyBatis傳入集合 list 數(shù)組 map參數(shù)的寫法
這篇文章主要介紹了MyBatis傳入集合 list 數(shù)組 map參數(shù)的寫法的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06
Java編程使用Runtime和Process類運(yùn)行外部程序的方法
這篇文章主要介紹了Java編程使用Runtime和Process類運(yùn)行外部程序的方法,結(jié)合實(shí)例形式分析了java使用Runtime.getRuntime().exec()方法運(yùn)行外部程序的常見情況與操作技巧,需要的朋友可以參考下2017-08-08
Spring AOP如何整合redis(注解方式)實(shí)現(xiàn)緩存統(tǒng)一管理詳解
這篇文章主要給大家介紹了關(guān)于Spring AOP如何整合redis(注解方式)實(shí)現(xiàn)緩存統(tǒng)一管理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08
基于html5+java實(shí)現(xiàn)大文件上傳實(shí)例代碼
本文通過一段實(shí)例代碼給大家介紹基于html5+java實(shí)現(xiàn)大文件上傳,涉及到html5 java 文件上傳相關(guān)知識(shí),感興趣的朋友一起學(xué)習(xí)吧2016-01-01
Java實(shí)現(xiàn)高校教務(wù)系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)高校教務(wù)系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08

