使用 SpringBoot Admin 監控你的 SpringBoot 程序

作者達西呀

1.Spring Boot Admin 是什麼


Spring Boot Admin 是由 codecentric 組織開發的開源項目,使用 Spring Boot Admin 可以管理和監控你的 Spring Boot 項目。它分為客戶端和服務端兩部分,客戶端添加到你的 Spring Boot 應用增加暴漏相關信息的 HTTP 接口,然後註冊到 Spring Boot Admin 服務端,這一步驟可以直接向服務端註冊,也可以通過 Eureka 或者 Consul 進行註冊。而 Spring Boot Admin Server 通過 Vue.js 程序監控信息進行可視化呈現。並且支持多種事件通知操作。

2. Spring Boot Admin 服務端

Spring Boot Admin 服務端是基於 Spring Boot 項目的,如何創建一個 Spring Boot 項目這裡不提,你可以參考之前文章或者從 https://start.spring.io/ 直接獲得一個 Spring Boot 項目。

2.1. 添加依賴

只需要添加 web 依賴和 Spring-boot-admin-starter-server 依賴。

<code><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>/<code>

2.2. 啟動配置

為了和下面的客戶端端口不衝突,先修改端口號為 9090。

<code>server:port:9090/<code>

添加 @EnableAdminServer 註解啟用 Spring Boot Admin Server 功能。


使用 SpringBoot Admin 監控你的 SpringBoot 程序

服務端已經配置完成,啟動項目進行訪問就可以看到 Spring Boot Admin Server 的頁面了。

使用 SpringBoot Admin 監控你的 SpringBoot 程序

Spring Boot Admin Server UI

3. Spring Boot Admin 客戶端

創建 Spring Boot 項目依舊不提,這裡只需要添加 Spring Boot Admin 客戶端需要的依賴,在項目啟動時就會增加相關的獲取信息的 API 接口。然後在 Spring Boot 配置文件中配置 Spring Boot Admin 服務端,就可以進行監控了。

3.1 客戶端依賴

pom.xml

使用 SpringBoot Admin 監控你的 SpringBoot 程序

3.2 客戶端配置

客戶端配置主要為了讓客戶端可以成功向服務端註冊,所以需要配置客戶端所在應用相關信息以及 Spring Boot Admin Server 服務端的 url。

使用 SpringBoot Admin 監控你的 SpringBoot 程序

配置中的 include: "*" 公開了所有的端口,對於生產環境,應該自信的選擇要公開的接口。

Spring Boot Admin 可以獲取應用中的定時任務,所以在代碼中增加一個定時任務計劃,每 20 秒輸出一次當前時間,日誌級別為 INFO,用於下面的定時任務和日誌監控測試。

使用 SpringBoot Admin 監控你的 SpringBoot 程序

3.3. 客戶端運行

啟動客戶端會暴漏相關的運行狀態接口,並且自動向配置的服務端發送註冊信息。

下面是客戶端的啟動日誌:

使用 SpringBoot Admin 監控你的 SpringBoot 程序

從啟動日誌裡的 Exposing 15 endpoint(s) beneath base path '/actuator' 這段,可以看到暴漏了 15 個 /actuator 的 API 接口,可以直接訪問查看響應結果。

使用 SpringBoot Admin 監控你的 SpringBoot 程序

Spring Boot Admin Client 監測接口


從日誌 Application registered itself as 6bcf19a6bf8c 可以看到客戶端已經註冊成功了。再看服務端可以看到註冊上來的一個應用實例。

使用 SpringBoot Admin 監控你的 SpringBoot 程序

Spring Boot Admin Server


4. Spring Boot Admin 功能

點擊監控頁面上的在線的應用實例,可以跳轉到應用實例詳細的監控管理頁面,也就是 Vue.js 實現的 web 展示。

使用 SpringBoot Admin 監控你的 SpringBoot 程序

Spring Boot Admin Server 監控頁面


Spring Boot Admin Server 可以監控的功能很多,使用起來沒有難度,下面描述下可以監測的部分內容:

  • 應用運行狀態,如時間、垃圾回收次數,線程數量,內存使用走勢。
  • 應用性能監測,通過選擇 JVM 或者 Tomcat 參數,查看當前數值。
  • 應用環境監測,查看系統環境變量,應用配置參數,自動配置參數。
  • 應用 bean 管理,查看 Spring Bean ,並且可以查看是否單例。
  • 應用計劃任務,查看應用的計劃任務列表。
  • 應用日誌管理,動態更改日誌級別,查看日誌。
  • 應用 JVM 管理,查看當前線程運行情況,dump 內存堆棧信息。
  • 應用映射管理,查看應用接口調用方法、返回類型、處理類等信息。

上面提到的日誌管理,可以動態的更改日誌級別,以及查看日誌。默認配置下是隻可以動態更改日誌級別的,如果要在線查看日誌,就需要手動配置日誌路徑了。

客戶端上可以像下面這樣配置日誌路徑以及日誌高亮。

<code>#配置文件:application.ymllogging:file:name:boot.logpattern:#日誌高亮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'/<code>

下面是在 Spring Boot Admin 監測頁面上查看的客戶端應用日誌。

使用 SpringBoot Admin 監控你的 SpringBoot 程序

Spring Boot Admin Server 查看日誌

5. Spring Boot Admin 進階

5.1. 郵件通知

Spring Boot Admin Server 支持常見的通知方式,比如郵件通知、電報通知、PagerDuty 通知等,下面將會演示常見的通知方式 - 郵件通知,最後也會演示如何通過監聽時間進下設置自定義通知方式。

Spring Boot Admin Server 的郵件通知通過 Thymeleaf 模板發送 HTML 格式的電子郵件。因此,想要使用郵件通知首先要引入 Thymeleaf 依賴以及 spring-boot-starter-mail 依賴,並配置郵件發送者信息和接受者信息。

1. 添加依賴


使用 SpringBoot Admin 監控你的 SpringBoot 程序

2. 配置郵件

主要設置發送者信息和接收者信息。

使用 SpringBoot Admin 監控你的 SpringBoot 程序

配置好郵件通知之後,重啟服務端和客戶端,等客戶端註冊到服務端之後直接終止客戶端的運行,稍等片刻就可以在配置的通知接收郵箱裡收到客戶端實例下線通知了。

使用 SpringBoot Admin 監控你的 SpringBoot 程序

Sping Boot Admin Server 郵件通知


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

使用 SpringBoot Admin 監控你的 SpringBoot 程序

5.2 自定義通知

自定義通知只需要自己實現 Spring Boot Admin Server 提供的監聽通知類即可,下面會演示如何在實例狀態改變時輸出實例相關信息。

使用 SpringBoot Admin 監控你的 SpringBoot 程序

5.2. 訪問限制

上面提到過,因為客戶端增加了暴漏運行信息的相關接口,所以在生產環境中使用存在風險,而服務端沒有訪問限制,誰的可以訪問也是不合理的。

下面將會為客戶端和服務端分別增加訪問限制,客戶端主要是限制敏感接口的訪問權限,服務端則是全局的訪問限制。這些訪問限制都通過 spring 安全框架 security 來實現,所以首先要為客戶端和服務端都增加 maven 依賴。

<code><dependency><groupid>org.springframework.boot/<groupid><artifactid>spring-boot-starter-security/<artifactid>/<dependency>/<code>

1. 服務端

在引入安全框架依賴之後,需要配置訪問控制,比如靜態資源不需要限制,登錄登出頁面指定等。


使用 SpringBoot Admin 監控你的 SpringBoot 程序


使用 SpringBoot Admin 監控你的 SpringBoot 程序

在 application.yml 配置文件中配置用戶名和密碼。

<code>spring:security:user:name:userpassword:123/<code>

重啟服務端,再次訪問就需要用戶名和密碼進行登錄了。

使用 SpringBoot Admin 監控你的 SpringBoot 程序

Spring Boot Admin Server 登錄


2. 客戶端

客戶端在引入安全框架之後,也需要配置訪問權限,主要是配置哪些路徑可以訪問,哪些路徑訪問需要登錄限制,默認所有接口都需要登錄限制。

同樣的,客戶端應用也需要在配置中配置客戶端應用對於敏感接口的登錄用戶和密碼,同時需要配置 Spring Boot Admin Server 的訪問用戶和密碼,還要把自身的用戶和密碼註冊時告訴服務端,不然服務端不能獲取到監測數據。


使用 SpringBoot Admin 監控你的 SpringBoot 程序

客戶端敏感接口訪問測試。

使用 SpringBoot Admin 監控你的 SpringBoot 程序

客戶端應用訪問


到這裡,客戶端的敏感接口訪問需要登錄,服務端的管理頁面也需要登錄,客戶端和服務端的訪問控制已經完成了。

文中代碼已經上傳到:github.com/niumoo/springboot/tree/master/springboot-admin

https://github.com/codecentric/spring-boot-admin

https://codecentric.github.io/spring-boot-admin/current/


分享到:


相關文章: