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

前言

上一章節,咱們介紹了Actuator的使用,知道了可經過訪問不一樣的端點路徑,獲取相應的監控信息。但使用後也能發現,返回的監控數據都是以JSON串的形式進行返回的,對於實施或者其餘人員來講,不是很直觀,而當須要監控的應用愈來愈多時,依次去訪問對應的應用也過於繁瑣和低效了。因此,本章節來介紹下Spring Boot Admin這個UI監控工具。前端

Spring-Boot-Admin是什麼

先看看,官網給其定義:java

簡單來講,Spring Boot Admin是一個管理和監控Spring Boot應用程序的開源軟件。每一個應用都認爲是一個客戶端,經過HTTP或者服務註冊發現Spring Cloud(Eureka、Consul等等)註冊到admin server中進行展現,Spring Boot Admin UI部分使用AngularJs將數據展現在前端。git

Spring Boot Admin是一個針對spring-bootactuator接口進行UI美化封裝的監控工具。它能夠:在列表中瀏覽全部被監控spring-boot項目的基本信息,詳細的Health信息、內存信息、JVM信息、垃圾回收信息、各類配置信息(好比數據源、緩存列表和命中率)等,還能夠直接修改loggerlevelgithub

監控實例

Spring Boot Admin包含admin-serveradmin-client兩個組件,admin-server經過採集actuator端點數據,顯示在spring-boot-admin-ui上。web

**提醒:爲了演示服務端和客戶端,本實例建立了一個maven多模塊項目。 **spring

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進行版本管理。springboot

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端點,加入版本等信息  
info.version=@project.version@
info.name=@project.artifactId@
# 可自定義信息
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
# 發送給誰
spring.boot.admin.notify.mail.to=499452441@qq.com
# 誰發的
spring.boot.admin.notify.mail.from=499452441@qq.com

再次啓動服務端應用和客戶端,以後中止客戶端,就能夠收到下線通知郵件了。

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

# 主題格式
# 使用中文會亂碼,可以使用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

再次,啓動應用,當監控的應用狀態發生變更時,能夠看見郵件和自定義通知都生效了,控制檯能夠看見自定義輸出內容了。

自定義通知

你們能夠結合實際的業務需求,編寫不一樣的自定義通知類的,好比利用小程序或者微信公衆號,發送微信信息;或者發送短信;或者其餘的通信工具均可以的,自由發揮~

參考資料

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

總結

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

最後

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

老生常談

  • 我的QQ:499452441
  • 微信公衆號:lqdevOps

公衆號

我的博客:http://blog.lqdev.cn

完整示例:https://github.com/xie19900123/spring-boot-learning/tree/master/chapter-28

原文地址:http://blog.lqdev.cn/2018/09/14/springboot/chapter-twenty-eight/

相關文章
相關標籤/搜索