pring-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 ,即可看見監控頁面了:
由于現在還沒有加入客戶端,所以應用列表都是空的。
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 ,即可看見監控頁面已經包含了此應用數據了:
此時,我們點擊詳情,即可看見各類監控數據了。
環境變量:
線程信息:
日志相關:
若需要動態的修改日志級別,按官網的提示,需要加入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系列教程,如有雷同,請多多包涵了。原創不易,碼字不易,還希望大家多多支持。若文中有所錯誤之處,還望提出,謝謝。
HTML+CSS-->移動web->JavaScript基礎-->Web APIs->數據交互&異步編程-->Node.js-->Vue2+Vue3-->React核心技術-->微信小程序
新手不要光看,學完基礎就可以寫靜態頁面,學完特性就可以獨立搞一個商城首頁。可以獨立完成之后再去學習JavaScript。
一條清晰的學習路線了很重要,基礎部分(定義變量、函數、數組、字符串、內置函數、內置對象)——>面向過程的編程思想(在這里可以試著用自定義按鈕、自定義播放器練習)——>面向過程編程思想(封裝一些我們自己想的對象,提供有意義的接口)
最后想說的最簡單的方法就是找到官方幫助手冊,所有的方法屬性,都讀。讀到自己我安全理解了,這些文檔可以幫我們夯實基礎學習,起碼有一個幫助,就是優化了我們不規范的代碼。很多人上來就建議看文檔學習,個人感覺沒必要。學完基礎知識之后,夯實基礎看官方文檔會讓大家更受益。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。