來源于公眾號(hào)未讀代碼 ,
作者達(dá)西呀
1.Spring Boot Admin 是什么
Spring Boot Admin 是由 codecentric 組織開發(fā)的開源項(xiàng)目,使用 Spring Boot Admin 可以管理和監(jiān)控你的 Spring Boot 項(xiàng)目。它分為客戶端和服務(wù)端兩部分,客戶端添加到你的 Spring Boot 應(yīng)用增加暴漏相關(guān)信息的 HTTP 接口,然后注冊(cè)到 Spring Boot Admin 服務(wù)端,這一步驟可以直接向服務(wù)端注冊(cè),也可以通過 Eureka 或者 Consul 進(jìn)行注冊(cè)。而 Spring Boot Admin Server 通過 Vue.js 程序監(jiān)控信息進(jìn)行可視化呈現(xiàn)。并且支持多種事件通知操作。
2. Spring Boot Admin 服務(wù)端
Spring Boot Admin 服務(wù)端是基于 Spring Boot 項(xiàng)目的,如何創(chuàng)建一個(gè) Spring Boot 項(xiàng)目這里不提,你可以參考之前文章或者從 https://start.spring.io/ 直接獲得一個(gè) Spring Boot 項(xiàng)目。
2.1. 添加依賴
只需要添加 web 依賴和 Spring-boot-admin-starter-server 依賴。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
</dependency>
2.2. 啟動(dòng)配置
為了和下面的客戶端端口不沖突,先修改端口號(hào)為 9090。
server:
port:9090
添加 @EnableAdminServer 注解啟用 Spring Boot Admin Server 功能。

服務(wù)端已經(jīng)配置完成,啟動(dòng)項(xiàng)目進(jìn)行訪問就可以看到 Spring Boot Admin Server 的頁面了。

Spring Boot Admin Server UI
3. Spring Boot Admin 客戶端
創(chuàng)建 Spring Boot 項(xiàng)目依舊不提,這里只需要添加 Spring Boot Admin 客戶端需要的依賴,在項(xiàng)目啟動(dòng)時(shí)就會(huì)增加相關(guān)的獲取信息的 API 接口。然后在 Spring Boot 配置文件中配置 Spring Boot Admin 服務(wù)端,就可以進(jìn)行監(jiān)控了。
3.1 客戶端依賴
pom.xml

3.2 客戶端配置
客戶端配置主要為了讓客戶端可以成功向服務(wù)端注冊(cè),所以需要配置客戶端所在應(yīng)用相關(guān)信息以及 Spring Boot Admin Server 服務(wù)端的 url。

配置中的 include: "*" 公開了所有的端口,對(duì)于生產(chǎn)環(huán)境,應(yīng)該自信的選擇要公開的接口。
Spring Boot Admin 可以獲取應(yīng)用中的定時(shí)任務(wù),所以在代碼中增加一個(gè)定時(shí)任務(wù)計(jì)劃,每 20 秒輸出一次當(dāng)前時(shí)間,日志級(jí)別為 INFO,用于下面的定時(shí)任務(wù)和日志監(jiān)控測(cè)試。

3.3. 客戶端運(yùn)行
啟動(dòng)客戶端會(huì)暴漏相關(guān)的運(yùn)行狀態(tài)接口,并且自動(dòng)向配置的服務(wù)端發(fā)送注冊(cè)信息。
下面是客戶端的啟動(dòng)日志:

從啟動(dòng)日志里的 Exposing 15 endpoint(s) beneath base path '/actuator' 這段,可以看到暴漏了 15 個(gè) /actuator 的 API 接口,可以直接訪問查看響應(yīng)結(jié)果。

Spring Boot Admin Client 監(jiān)測(cè)接口
從日志 Application registered itself as 6bcf19a6bf8c 可以看到客戶端已經(jīng)注冊(cè)成功了。再看服務(wù)端可以看到注冊(cè)上來的一個(gè)應(yīng)用實(shí)例。

Spring Boot Admin Server
4. Spring Boot Admin 功能
點(diǎn)擊監(jiān)控頁面上的在線的應(yīng)用實(shí)例,可以跳轉(zhuǎn)到應(yīng)用實(shí)例詳細(xì)的監(jiān)控管理頁面,也就是 Vue.js 實(shí)現(xiàn)的 web 展示。

Spring Boot Admin Server 監(jiān)控頁面
Spring Boot Admin Server 可以監(jiān)控的功能很多,使用起來沒有難度,下面描述下可以監(jiān)測(cè)的部分內(nèi)容:
- 應(yīng)用運(yùn)行狀態(tài),如時(shí)間、垃圾回收次數(shù),線程數(shù)量,內(nèi)存使用走勢(shì)。
- 應(yīng)用性能監(jiān)測(cè),通過選擇 JVM 或者 Tomcat 參數(shù),查看當(dāng)前數(shù)值。
- 應(yīng)用環(huán)境監(jiān)測(cè),查看系統(tǒng)環(huán)境變量,應(yīng)用配置參數(shù),自動(dòng)配置參數(shù)。
- 應(yīng)用 bean 管理,查看 Spring Bean ,并且可以查看是否單例。
- 應(yīng)用計(jì)劃任務(wù),查看應(yīng)用的計(jì)劃任務(wù)列表。
- 應(yīng)用日志管理,動(dòng)態(tài)更改日志級(jí)別,查看日志。
- 應(yīng)用 JVM 管理,查看當(dāng)前線程運(yùn)行情況,dump 內(nèi)存堆棧信息。
- 應(yīng)用映射管理,查看應(yīng)用接口調(diào)用方法、返回類型、處理類等信息。
上面提到的日志管理,可以動(dòng)態(tài)的更改日志級(jí)別,以及查看日志。默認(rèn)配置下是只可以動(dòng)態(tài)更改日志級(jí)別的,如果要在線查看日志,就需要手動(dòng)配置日志路徑了。
客戶端上可以像下面這樣配置日志路徑以及日志高亮。
#配置文件:application.yml
logging:
file:
name:boot.log
pattern:
#日志高亮
file:'%clr(%d{yyyy-MM-ddHH:mm:ss.SSS}){faint}%clr(%5p)%clr(${PID}){magenta}%clr(---){faint}%clr([%15.15t]){faint}%clr(%-40.40logger{39}){cyan}%clr(:){faint}%m%n%wEx'
下面是在 Spring Boot Admin 監(jiān)測(cè)頁面上查看的客戶端應(yīng)用日志。

Spring Boot Admin Server 查看日志
5. Spring Boot Admin 進(jìn)階
5.1. 郵件通知
Spring Boot Admin Server 支持常見的通知方式,比如郵件通知、電報(bào)通知、PagerDuty 通知等,下面將會(huì)演示常見的通知方式 - 郵件通知,最后也會(huì)演示如何通過監(jiān)聽時(shí)間進(jìn)下設(shè)置自定義通知方式。
Spring Boot Admin Server 的郵件通知通過 Thymeleaf 模板發(fā)送 html 格式的電子郵件。因此,想要使用郵件通知首先要引入 Thymeleaf 依賴以及 spring-boot-starter-mail 依賴,并配置郵件發(fā)送者信息和接受者信息。
1. 添加依賴

2. 配置郵件
主要設(shè)置發(fā)送者信息和接收者信息。

配置好郵件通知之后,重啟服務(wù)端和客戶端,等客戶端注冊(cè)到服務(wù)端之后直接終止客戶端的運(yùn)行,稍等片刻就可以在配置的通知接收郵箱里收到客戶端實(shí)例下線通知了。

Sping Boot Admin Server 郵件通知
郵件通知使用的模板存放在 server 依賴的 classpath:/META-INF/spring-boot-admin-server/mail/status-changed.html 路徑,如果想要自定義模板內(nèi)容。可以拷貝這個(gè)文件放到自己的 templates 目錄下,修改成自己想要的效果,然后在配置中指定自定義模板路徑。

5.2 自定義通知
自定義通知只需要自己實(shí)現(xiàn) Spring Boot Admin Server 提供的監(jiān)聽通知類即可,下面會(huì)演示如何在實(shí)例狀態(tài)改變時(shí)輸出實(shí)例相關(guān)信息。

5.2. 訪問限制
上面提到過,因?yàn)榭蛻舳嗽黾恿吮┞┻\(yùn)行信息的相關(guān)接口,所以在生產(chǎn)環(huán)境中使用存在風(fēng)險(xiǎn),而服務(wù)端沒有訪問限制,誰的可以訪問也是不合理的。
下面將會(huì)為客戶端和服務(wù)端分別增加訪問限制,客戶端主要是限制敏感接口的訪問權(quán)限,服務(wù)端則是全局的訪問限制。這些訪問限制都通過 spring 安全框架 security 來實(shí)現(xiàn),所以首先要為客戶端和服務(wù)端都增加 maven 依賴。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
1. 服務(wù)端
在引入安全框架依賴之后,需要配置訪問控制,比如靜態(tài)資源不需要限制,登錄登出頁面指定等。


在 application.yml 配置文件中配置用戶名和密碼。
spring:
security:
user:
name:user
password:123
重啟服務(wù)端,再次訪問就需要用戶名和密碼進(jìn)行登錄了。

Spring Boot Admin Server 登錄
2. 客戶端
客戶端在引入安全框架之后,也需要配置訪問權(quán)限,主要是配置哪些路徑可以訪問,哪些路徑訪問需要登錄限制,默認(rèn)所有接口都需要登錄限制。
同樣的,客戶端應(yīng)用也需要在配置中配置客戶端應(yīng)用對(duì)于敏感接口的登錄用戶和密碼,同時(shí)需要配置 Spring Boot Admin Server 的訪問用戶和密碼,還要把自身的用戶和密碼注冊(cè)時(shí)告訴服務(wù)端,不然服務(wù)端不能獲取到監(jiān)測(cè)數(shù)據(jù)。

客戶端敏感接口訪問測(cè)試。

客戶端應(yīng)用訪問
到這里,客戶端的敏感接口訪問需要登錄,服務(wù)端的管理頁面也需要登錄,客戶端和服務(wù)端的訪問控制已經(jīng)完成了。
文中代碼已經(jīng)上傳到:github.com/niumoo/springboot/tree/master/springboot-admin
參考資料:
https://github.com/codecentric/spring-boot-admin
https://codecentric.github.io/spring-boot-admin/current/