上一章節,咱們介紹了
Actuator
的使用,知道了可經過訪問不一樣的端點路徑,獲取相應的監控信息。但使用後也能發現,返回的監控數據都是以JSON串的形式進行返回的,對於實施或者其餘人員來講,不是很直觀,而當須要監控的應用愈來愈多時,依次去訪問對應的應用也過於繁瑣和低效了。因此,本章節來介紹下Spring Boot Admin
這個UI監控工具。前端
先看看,官網給其定義:java
簡單來講,Spring Boot Admin
是一個管理和監控Spring Boot
應用程序的開源軟件。每一個應用都認爲是一個客戶端,經過HTTP
或者服務註冊發現Spring Cloud
(Eureka、Consul等等)註冊到admin server
中進行展現,Spring Boot Admin UI
部分使用AngularJs
將數據展現在前端。git
Spring Boot Admin
是一個針對spring-boot
的actuator
接口進行UI美化封裝的監控工具。它能夠:在列表中瀏覽全部被監控spring-boot項目的基本信息,詳細的Health信息、內存信息、JVM信息、垃圾回收信息、各類配置信息(好比數據源、緩存列表和命中率)等,還能夠直接修改logger
的level
。github
Spring Boot Admin
包含admin-server
與admin-client
兩個組件,admin-server
經過採集actuator
端點數據,顯示在spring-boot-admin-ui
上。web
**提醒:爲了演示服務端和客戶端,本實例建立了一個maven多模塊
項目。 **spring
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
進行版本管理。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 ,便可看見監控頁面了:
因爲如今尚未加入客戶端,因此應用列表都是空的。
被監控的應用只須要加入相關依賴和服務端配置便可。
建立一個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 ,便可看見監控頁面已經包含了此應用數據了:
此時,咱們點擊詳情,便可看見各種監控數據了。
環境變量:
線程信息:
日誌相關:
若須要動態的修改日誌級別,按官網的提示,須要加入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 # 發送給誰 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}
多說幾句:這裏的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
系列教程,若有雷同,請多多包涵了。原創不易,碼字不易,還但願你們多多支持。若文中有所錯誤之處,還望提出,謝謝。
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/