1. 程式人生 > >SpringBoot | 第二十八章:監控管理之Spring Boot Admin使用

SpringBoot | 第二十八章:監控管理之Spring Boot Admin使用

前言

上一章節,我們介紹了Actuator的使用,知道了可通過訪問不同的端點路徑,獲取相應的監控資訊。但使用後也能發現,返回的監控資料都是以JSON串的形式進行返回的,對於實施或者其他人員來說,不是很直觀,而當需要監控的應用越來越多時,依次去訪問對應的應用也過於繁瑣和低效了。所以,本章節來介紹下Spring Boot Admin這個UI監控工具。

Spring-Boot-Admin是什麼

先看看,官網給其定義:

簡單來說,Spring Boot Admin是一個管理和監控Spring Boot應用程式的開源軟體。每個應用都認為是一個客戶端,通過HTTP或者服務註冊發現Spring Cloud

(Eureka、Consul等等)註冊到admin server中進行展示,Spring Boot Admin UI部分使用AngularJs將資料展示在前端。

Spring Boot Admin是一個針對spring-bootactuator介面進行UI美化封裝的監控工具。它可以:在列表中瀏覽所有被監控spring-boot專案的基本資訊,詳細的Health資訊、記憶體資訊、JVM資訊、垃圾回收資訊、各種配置資訊(比如資料來源、快取列表和命中率)等,還可以直接修改loggerlevel

監控例項

Spring Boot Admin包含admin-serveradmin-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>

注意:由於使用的SprinBoot1.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 ,即可看見監控頁面已經包含了此應用資料了:

此時,我們點選詳情,即可看見各類監控資料了。

環境變數:

執行緒資訊:

日誌相關:

logger

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

loglevel-management

其他監控指標,大家可以自行檢視下。

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

securing_spring_boot_admin_server

監控通知

雖然我們可以通過介面進行視覺化監控,但不可能實時去盯著螢幕的,我們希望在服務有問題,比如下線、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}

多說幾句:這裡的subjecttext都支援SpEL(Spring Expression Language)表示式的,關於SpEL表示式,有興趣的同學可以自行搜尋下,是一個支援執行時查詢和操作物件圖的強大的表示式語言,類似於EL表示式,定界符為#{},一種簡化開發的表示式,通過使用表示式來簡化開發,減少一些邏輯、配置的編寫。

而此次,傳送郵件的引數,通過跟蹤原始碼獲悉,入口的引數為ClientApplicationEvent,對應路徑為:de.codecentric.boot.admin.event.ClientApplicationEvent,即應用資訊。其繼承的類如下:

ClientApplicationEvent繼承類

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

ClientApplicationStatusChangedEvent

所以,需要額外一些引數時,可以根據de.codecentric.boot.admin.model.Application的屬性獲取更加詳細的資訊,如metadatainfo等等。

Application

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

自定義郵件內容

自定義通知

除了使用自帶的一些通知機制外,我們還能通過自定義,來進行個性化通知的建立,比如在一些場景下,我們會把訊息推送到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來進行構建了,同時很會整合Hystrixturbine的整合監控,會更加方便。

最後

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

老生常談

  • 個人QQ:499452441
  • 微信公眾號:lqdevOps

公眾號