Spring Boot應用監控的實戰教程
概述
Spring Boot 監控核心是 spring-boot-starter-actuator 依賴,增加依賴後, Spring Boot 會默認配置一些通用的監控,比如 jvm 監控、類加載、健康監控等。
我們之前講過Docker容器的可視化監控,即監控容器的運行情況,包括 CPU使用率、內存占用、網絡狀況以及磁盤空間等等一系列信息。同樣利用SpringBoot作為微服務單元的實例化技術選型時,我們不可避免的要面對的一個問題就是如何實時監控應用的運行狀況數據,比如:健康度、運行指標、日誌信息、線程狀況等等。本文就該問題做一點探索並記錄試驗過程。
入門使用:Actuator插件
Actuator插件是SpringBoot原生提供的一個服務,可以通過暴露端點路由,用來輸出應用中的諸多 端點信息。實戰一下!
pom.xml中添加依賴:
?1 2 3 4 |
< dependency >
< groupId >org.springframework.boot</ groupId >
< artifactId >spring-boot-starter-actuator</ artifactId >
</ dependency >
|
啟動Spring Boot應用程序之後,只要在瀏覽器中輸入端點信息就能獲得應用的一些狀態信息。
常用端點列舉如下,可以一個個詳細試一下:
- /info 應用基本信息
- /health 健康度信息
- /metrics 運行指標
- /env 環境變量信息
- /loggers 日誌相關
- /dump 線程相關信息
- /trace 請求調用軌跡
當然此時只能使用/health 和 /info端點,其他因為權限問題無法訪問。想訪問指定端點的話可以在yml配置中添加相關的配置項,比如/metrics端點則需要配置:
?1 2 3 |
endpoints:
metrics:
sensitive: false
|
此時瀏覽器訪問/metrics端點就能得到諸如下面所示的信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
{
"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
}
|
當然也可以開啟全部端點權限,只需如下配置即可:
?1 2 |
endpoints:
sensitive: false
|
由於Actuator插件提供的監控能力畢竟有限,而且UI比較簡陋,因此需要一個更加成熟一點的工具
Spring Boot Admin監控系統
SBA則是基於Actuator更加進化了一步,其是一個針對Actuator接口進行UI美化封裝的監控工具。我們來實驗一下。
首先來創建一個Spring Boot Admin Server工程作為服務端
pom.xml中加入如下依賴:
1 2 3 4 5 6 7 8 9 10 11 |
< 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 >
|
然後在應用主類上通過加註解來啟用Spring Boot Admin
?1 2 3 4 5 6 7 8 |
@EnableAdminServer
@SpringBootApplication
public class SpringbtAdminServerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbtAdminServerApplication. class , args);
}
}
|
啟動程序,瀏覽器打開 localhost:8081 查看Spring Boot Admin主頁面:
Spring Boot Admin主頁面
此時Application一欄空空如也,等待待監控的應用加入
創建要監控的Spring Boot應用
pom.xml中加入以下依賴
?1 2 3 4 5 |
< dependency >
< groupId >de.codecentric</ groupId >
< artifactId >spring-boot-admin-starter-client</ artifactId >
< version >1.5.7</ version >
</ dependency >
|
然後在yml配置中添加如下配置,將應用註冊到Admin服務端去:
?1 2 3 4 5 6 |
spring:
boot:
admin:
url: http: //localhost:8081
client:
name: AdminTest
|
Client應用一啟動,Admin服務立馬推送來了消息,告訴你AdminTest上線了:
應用上線推送消息
此時去Admin主界面上查看,發現Client應用確實已經註冊上來了:
Client應用已註冊上來
查看Detail
Detail信息
查看 Metrics
Metrics信息
查看 Enviroment
Enviroment信息
查看JMX
JMX信息
查看Threads
Threads信息
查看Trace與詳情
Trace信息
點擊最上方JOURNAL,會看到被監控應用程序的事件變化:
應用程序的事件變化信息
圖中可以清晰地看到,應用從 REGISTRATION → UNKNOWN → UP 的狀態跳轉。
這樣就將Actuator插件提供的所有端點信息在SBA中全部嘗試了一遍。
參考文獻
http://codecentric.github.io/spring-boot-admin/1.5.7/
Spring Boot應用監控的實戰教程