SpringBoot | 第二十八章:監控管理之Spring Boot Admin使用
前言
上一章節,我們介紹了
Actuator
的使用,知道了可通過訪問不同的端點路徑,獲取相應的監控資訊。但使用後也能發現,返回的監控資料都是以JSON串的形式進行返回的,對於實施或者其他人員來說,不是很直觀,而當需要監控的應用越來越多時,依次去訪問對應的應用也過於繁瑣和低效了。所以,本章節來介紹下Spring Boot Admin
這個UI監控工具。
Spring-Boot-Admin是什麼
先看看,官網給其定義:
簡單來說,Spring Boot Admin
是一個管理和監控Spring Boot
應用程式的開源軟體。每個應用都認為是一個客戶端,通過HTTP
或者服務註冊發現Spring Cloud
admin server
中進行展示,Spring Boot Admin UI
部分使用AngularJs
將資料展示在前端。
Spring Boot Admin
是一個針對spring-boot
的actuator
介面進行UI美化封裝的監控工具。它可以:在列表中瀏覽所有被監控spring-boot專案的基本資訊,詳細的Health資訊、記憶體資訊、JVM資訊、垃圾回收資訊、各種配置資訊(比如資料來源、快取列表和命中率)等,還可以直接修改logger
的level
。
監控例項
Spring Boot Admin
包含admin-server
與admin-client
兩個元件,admin-server
通過採集actuator
端點資料,顯示在spring-boot-admin-ui
上。
提醒:為了演示服務端和客戶端,本例項建立了一個maven多模組
專案。
admin-server端
admin-server
端主要是資料展現功能,包含了一個ui頁面。
建立一個spring-boot-admin-server
工程。
0.引入pom依賴
<dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-server</artifactId> </dependency> <dependencyManagement> <dependencies> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-dependencies</artifactId> <version>1.5.7</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
注意:由於使用的SprinBoot
為1.5.15
版本,所以選用的Spring Boot Admin
版本為1.5.7
版本。同時為了版本依賴,使用dependencyManagement
加入了spring-boot-admin-dependencies
進行版本管理。
1.啟動類,加入註解@EnableAdminServer
。
@SpringBootApplication
@EnableAdminServer
@Slf4j
public class Chapter28AdminServerApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(Chapter28AdminServerApplication.class, args);
log.info("Chapter28AdminServer啟動!");
}
}
一個服務端就基本配置結束了,啟動應用,訪問:http://127.0.0.1:8080 ,即可看見監控頁面了:
由於現在還沒有加入客戶端,所以應用列表都是空的。
admin-client端
被監控的應用只需要加入相關依賴和服務端配置即可。
建立一個spring-boot-admin-client
專案
0.引入pom依賴
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>
1.配置檔案加入服務端地址等資訊。
application.properties
# 應用名稱 便於識別
spring.application.name=spring-boot-admin-client
server.port=8081
#服務端地址
spring.boot.admin.url=http://127.0.0.1:8080
# 關閉安全認證
management.security.enabled=false
# 利用info端點,加入版本等資訊
[email protected]@
[email protected]@
# 可自定義資訊
info.author=oKong
info.blog=http://blog.lqdev.cn/
注意:為了能獲取maven的配置內容,需要在pom檔案中加入以下配置:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>build-info</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
只需要這兩部,客戶端就配置完了,啟動下,訪問http://127.0.0.1:8080 ,即可看見監控頁面已經包含了此應用資料了:
此時,我們點選詳情,即可看見各類監控資料了。
環境變數:
執行緒資訊:
日誌相關:
若需要動態的修改日誌級別,按官網的提示,需要加入logback-spring.xml
檔案,具體的可檢視官網文件吧,寫的很詳細了。
其他監控指標,大家可以自行檢視下。
注意:在生產環境中,為了資料的安全,還是需要加上安全認證的,具體的可以檢視官方文件:securing-spring-boot-admin,相對比較簡單,簡單來說就是加入spring-boot-starter-security
進行安全認證,這裡可以直接引入spring-boot-admin-server-ui-login
進行登入安全認證。本文就不闡述了。
監控通知
雖然我們可以通過介面進行視覺化監控,但不可能實時去盯著螢幕的,我們希望在服務有問題,比如下線、CPU異常等情況時,能通過郵件等形式及時通知對應責任人,這樣就能做到預警效果了。
在SpingBootAdmin
中,提供了多種通知機制,來實現監控告警功能。
可以看見,其集成了國外的一些通訊軟體,而對於我們而言,還是使用郵件通知比較靠譜。當然也能自定義通知,進行個性化訊息通知功能,比如釘釘機器人通知等。
傳送郵件通知
這裡簡單以郵件通知為例。具體郵件傳送相關知識點,可檢視:第二十六章:郵件傳送,這裡不在闡述了。
以下配置都是在服務端spring-boot-admin-server
進行新增。
0.引入pom依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
1.配置郵箱資訊。
# 郵件相關
# SMTP伺服器地址
spring.mail.host=smtp.qq.com
# SMTP伺服器埠號 預設-1
# spring.mail.port=-1
# 傳送方帳號
spring.mail.username=郵箱
# 傳送方密碼(授權碼)
spring.mail.password=郵箱密碼
#javaMailProperties 配置
# 開啟使用者身份驗證
spring.mail.properties.mail.smtp.auth=true
# 傳送給誰
[email protected]
# 誰發的
[email protected]
再次啟動服務端應用和客戶端,之後停止客戶端,就可以收到下線通知郵件了。
同時,我們還能自定義傳送郵件的主題和內容,配置檔案加入
# 主題格式
# 使用中文會亂碼,可使用yml檔案格式解決
# 之類直接unicode編碼了
# 應用#{application.name}(#{application.id}) 狀態為:#{to.status}
spring.boot.admin.notify.mail.subject=\u5e94\u7528#{application.name}(#{application.id}) \u72b6\u6001\u4e3a\uff1a#{to.status}
# 郵件內容
#應用#{application.name} (#{application.id})\n狀態從 #{from.status} 變為 #{to.status}\n\n 應用健康地址:#{application.healthUrl}
spring.boot.admin.notify.mail.text=\u5e94\u7528#{application.name} (#{application.id})\n\u72b6\u6001\u4ece #{from.status} \u53d8\u4e3a #{to.status}\n\n \u5e94\u7528\u5065\u5eb7\u5730\u5740\uff1a#{application.healthUrl}
多說幾句:這裡的subject
和text
都支援SpEL(Spring Expression Language)
表示式的,關於SpEL
表示式,有興趣的同學可以自行搜尋下,是一個支援執行時查詢和操作物件圖的強大的表示式語言,類似於EL
表示式,定界符為#{}
,一種簡化開發的表示式,通過使用表示式來簡化開發,減少一些邏輯、配置的編寫。
而此次,傳送郵件的引數,通過跟蹤原始碼獲悉,入口的引數為ClientApplicationEvent
,對應路徑為:de.codecentric.boot.admin.event.ClientApplicationEvent
,即應用資訊。其繼承的類如下:
當應用傳送狀態變更時,就會觸發ClientApplicationStatusChangedEvent
事件了,對應的引數如下所示:
所以,需要額外一些引數時,可以根據de.codecentric.boot.admin.model.Application
的屬性獲取更加詳細的資訊,如metadata
、info
等等。
之後,傳送的郵件內如如下:
自定義通知
除了使用自帶的一些通知機制外,我們還能通過自定義,來進行個性化通知的建立,比如在一些場景下,我們會把訊息推送到MQ伺服器上或者手機上等等。實現通知比較簡單,就是實現
Notifier
介面,而官方提供給了一個抽象類AbstractStatusChangeNotifier
,我們直接繼承此類就好了。
0.建立一個自定義通知類
CustomNotifier.java
/**
* 自定義通知
* @author oKong
*
*/
@Component
@ConfigurationProperties("okong.custom.notify")
@Setter
@Getter
@Slf4j
public class CustomNotifier extends AbstractStatusChangeNotifier{
String name;
@Override
protected void doNotify(ClientApplicationEvent event) throws Exception {
//這裡只是為了示例 ,直接輸出到控制檯了。
log.info("{}-自定義通知:應用-{}", name,event.getApplication().getName());
}
}
1.配置檔案配置屬性name的值
# 自定義通知型別
okong.custom.notify.name=oKong
再次,啟動應用,當監控的應用狀態發生變動時,可以看見郵件和自定義通知都生效了,控制檯可以看見自定義輸出內容了。
大家可以結合實際的業務需求,編寫不同的自定義通知類的,比如利用小程式或者微信公眾號,傳送微信資訊;或者傳送簡訊;或者其他的通訊工具都可以的,自由發揮~
參考資料
總結
本章節主要講解了利用
Spring Boot Admin
這個web監控工具進行視覺化的監控應用各指標資訊。關於使用Spring Cloud
註冊中心來進行客戶端自動註冊與發現的,本系列就不闡述了,因為涉及到一些Eureka
的相關知識點,後期會在白話SpringCloud
的實施監控裡面進行詳細闡述,而且基於Spring Boot2
的介面風格也有大變動,使用Vue.js
來進行構建了,同時很會整合Hystrix
和turbine
的整合監控,會更加方便。
最後
目前網際網路上很多大佬都有
SpringBoot
系列教程,如有雷同,請多多包涵了。原創不易,碼字不易,還希望大家多多支援。若文中有所錯誤之處,還望提出,謝謝。
老生常談
- 個人QQ:
499452441
- 微信公眾號:
lqdevOps