09.15 監控管理之Spring Boot Admin使用

Spring-Boot-Admin是什麼

先看看,官網給其定義:

監控管理之Spring Boot Admin使用

簡單來說,Spring Boot Admin是一個管理和監控Spring Boot應用程序的開源軟件。每個應用都認為是一個客戶端,通過HTTP或者服務註冊發現Spring Cloud(Eureka、Consul等等)註冊到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 ,即可看見監控頁面了:

監控管理之Spring Boot Admin使用

由於現在還沒有加入客戶端,所以應用列表都是空的。

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 ,即可看見監控頁面已經包含了此應用數據了:

監控管理之Spring Boot Admin使用

此時,我們點擊詳情,即可看見各類監控數據了。

監控管理之Spring Boot Admin使用

環境變量:

監控管理之Spring Boot Admin使用

線程信息:

監控管理之Spring Boot Admin使用

日誌相關:

監控管理之Spring Boot Admin使用

若需要動態的修改日誌級別,按官網的提示,需要加入logback-spring.xml文件,具體的可查看官網文檔吧,寫的很詳細了。

監控管理之Spring Boot Admin使用

其他監控指標,大家可以自行查看下。


注意:在生產環境中,為了數據的安全,還是需要加上安全認證的,具體的可以查看官方文檔:securing-spring-boot-admin,相對比較簡單,簡單來說就是加入spring-boot-starter-security進行安全認證,這裡可以直接引入spring-boot-admin-server-ui-login進行登錄安全認證。本文就不闡述了。

監控管理之Spring Boot Admin使用


監控通知

雖然我們可以通過界面進行可視化監控,但不可能實時去盯著屏幕的,我們希望在服務有問題,比如下線、CPU異常等情況時,能通過郵件等形式及時通知對應責任人,這樣就能做到預警效果了。

在SpingBootAdmin中,提供了多種通知機制,來實現監控告警功能。

監控管理之Spring Boot Admin使用

可以看見,其集成了國外的一些通訊軟件,而對於我們而言,還是使用郵件通知比較靠譜。當然也能自定義通知,進行個性化消息通知功能,比如釘釘機器人通知等。

發送郵件通知

這裡簡單以郵件通知為例。具體郵件發送相關知識點,可查看:第二十六章:郵件發送,這裡不在闡述了。

以下配置都是在服務端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]

再次啟動服務端應用和客戶端,之後停止客戶端,就可以收到下線通知郵件了。

監控管理之Spring Boot Admin使用

同時,我們還能自定義發送郵件的主題和內容,配置文件加入

# 主題格式
# 使用中文會亂碼,可使用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,即應用信息。其繼承的類如下:

監控管理之Spring Boot Admin使用

當應用發送狀態變更時,就會觸發ClientApplicationStatusChangedEvent事件了,對應的參數如下所示:

監控管理之Spring Boot Admin使用

所以,需要額外一些參數時,可以根據de.codecentric.boot.admin.model.Application的屬性獲取更加詳細的信息,如metadata、info等等。

監控管理之Spring Boot Admin使用

之後,發送的郵件內如如下:

監控管理之Spring Boot Admin使用

自定義通知

除了使用自帶的一些通知機制外,我們還能通過自定義,來進行個性化通知的創建,比如在一些場景下,我們會把消息推送到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使用

大家可以結合實際的業務需求,編寫不同的自定義通知類的,比如利用小程序或者微信公眾號,發送微信信息;或者發送短信;或者其他的通訊工具都可以的,自由發揮~

  1. http://codecentric.github.io/spring-boot-admin/1.5.7/

總結

本章節主要講解了利用Spring Boot Admin這個web監控工具進行可視化的監控應用各指標信息。關於使用Spring Cloud註冊中心來進行客戶端自動註冊與發現的,本系列就不闡述了,因為涉及到一些Eureka的相關知識點,後期會在白話SpringCloud的實施監控裡面進行詳細闡述,而且基於Spring Boot2的界面風格也有大變動,使用Vue.js來進行構建了,同時很會集成Hystrix和turbine的集成監控,會更加方便。

最後

目前互聯網上很多大佬都有SpringBoot系列教程,如有雷同,請多多包涵了。原創不易,碼字不易,還希望大家多多支持。若文中有所錯誤之處,還望提出,謝謝。


分享到:


相關文章: