亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

Spring Boot 監控與報警

1. 前言

因為公司開發的項目多、為客戶部署的項目實例多。工作中我們都會經常遇到,由于某個客戶的項目突然無法訪問,一堆研發、售后部門的同事火急火燎處理問題的場景。

所以我非常希望能夠實現這樣的功能:

  • 能夠有一個界面,監控所有關注的項目實例運行狀態。
  • 對于某個項目實例來說,可以監控該實例的各項運行參數,例如內存占用情況、磁盤使用情況、數據庫連接情況。
  • 項目實例因各種原因關閉時,可以自動報警。

在很長一段時間內,我感覺要實現這些功能比較復雜。后來我稍微研究了下,在 Spring Boot 中實現這種監控和報警的功能非常簡單,那還等什么呢, Let’s Go !

2. 可視化監控

可以直接利用 Spring Boot Admin 實現可視化監控,此時至少需要兩個項目實例,一個是監控的管理端,一個是被監控的客戶端。

2.1 構建監控管理端項目

打開 Spring Initializr , Spring Boot 版本選擇 2.2.5 ,Group 為 com.imooc , Artifact 為 spring-boot-monitor-manager,生成項目后導入 Eclipse 開發環境。

2.2 引入管理端項目依賴

監控管理端需要使用網頁展示監控信息,所以引入 Web 依賴,另外添加 Spring Boot Admin 管理端依賴項。

實例:

		<!-- Web 依賴 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- Spring Boot Admin 管理端依賴項 -->
		<dependency>
			<groupId>de.codecentric</groupId>
			<artifactId>spring-boot-admin-starter-server</artifactId>
			<version>2.2.3</version>
		</dependency>

2.3 開啟監控管理端

在啟動類上添加 @EnableAdminServer 注解開啟 Spring Boot Admin 監控管理功能,代碼如下:

實例:

@SpringBootApplication
@EnableAdminServer // 開啟監控管理
public class SpringBootMonitorManagerApplication {
	public static void main(String[] args) {
		SpringApplication.run(SpringBootMonitorManagerApplication.class, args);
	}
}

然后運行啟動類,訪問 http://127.0.0.1:8080 會發現界面上已經顯示監控信息了。

圖片描述

Spring Boot Admin 監控管理頁面

2.4 構建監控客戶端項目

打開 Spring Initializr , Spring Boot 版本選擇 2.2.5 ,Group 為 com.imooc , Artifact 為 spring-boot-monitor-client,生成項目后導入 Eclipse 開發環境。

2.5 引入客戶端項目依賴

直接引入 Web 依賴和監控客戶端依賴。

實例:

		<!-- Web 依賴 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- Spring Boot Admin監控客戶端依賴 -->
		<dependency>
			<groupId>de.codecentric</groupId>
			<artifactId>spring-boot-admin-starter-client</artifactId>
			<version>2.2.3</version>
		</dependency>

2.6 修改客戶端配置

修改客戶端的配置文件 application.properties ,以便指定客戶端指向的服務端的地址。由于剛剛服務端已經占用了 8080 端口,所以將客戶端的端口設置為 8091 。

還有一個必要設置是客戶端的名稱,當我們監控的項目實例比較多時,需要通過客戶端名稱來區分。

實例:

# 配置端口
server.port=8091
# 配置監控管理端地址
spring.boot.admin.client.url=http://127.0.0.1:8080
# 客戶端的名稱,用于區分不同的客戶端
spring.boot.admin.client.instance.name=CLIENT1

TIps:此處指定監控管理端地址使用的是 spring.boot.admin.client.url ,我個人認為應使用 spring.boot.admin.server.url 更加合理。當然大家不用糾結于此,此處只是特別提示。

2.7 測試監控效果

啟動客戶端程序,然后刷新服務端網頁,會發現監控管理頁面已經顯示了客戶端信息。

圖片描述

監控頁面展示客戶端信息

此時我們關閉客戶端程序,然后稍等一會刷新下監控管理頁面(注意服務端發現客戶端離線是需要一定時間的),會發現監控管理頁已經顯示了離線項目實例信息。

圖片描述

監控頁面展示離線客戶端信息

3. 監控實例運行參數

使用 Spring Boot Admin 后,默認顯示的項目實例信息比較少。

圖片描述

CLIENT1 實例默認顯示信息

默認設置主要是為了保證項目實例的安全性,只展示了非常少的信息,我們可以通過配置文件指定展示哪些信息,如下。

實例:

# 配置客戶端展示哪些信息,*表示展示全部信息
management.endpoints.web.exposure.include=*

此時刷新監控管理頁,會發現已經展示各類運行參數信息。

圖片描述

全面展示項目實例運行參數信息

Tips:不同項目需要展示的信息不同,可以通過 management.endpoints.web.exposure.include 配置項進行設置,感興趣的同學可以自行查閱相關資料。

4. 自動報警

可視化監控提供了全面了解項目運行狀況的手段,但是我們不可能 7*24 小時盯著界面看哪個應用離線了。

最妙的效果是,項目離線時自動通知售后、運維等相關技術人員。

Spring Boot Admin 也提供了自動報警的功能,簡直太完美了,接下來我們來實現下。

4.1 引入依賴項

為監控服務端項目引入郵件依賴。

實例:

		<!-- 郵件依賴 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-mail</artifactId>
		</dependency>

4.2 配置郵件發送所需信息

只需要配置常規的郵件收發信息即可。

實例:

# 網易郵箱發件服務器
spring.mail.host=smtp.163.com
# 網易郵箱發件端口
spring.mail.prot=25
# 發件人賬號
spring.mail.username=[email protected]
# 發件授權密碼,注意授權碼是用于登錄第三方郵件客戶端的專用密碼
spring.mail.password=123456
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
# Spring Boot Admin 發件收件信息
spring.boot.admin.notify.mail.from=[email protected]
spring.boot.admin.notify.mail.to=[email protected]
spring.boot.admin.notify.mail.cc=[email protected]

此處特別注意發件授權密碼不是普通郵箱的登錄密碼,而是授權密碼,以網易郵箱為例在下圖位置設置。

圖片描述

網易郵箱授權密碼設置

4.3 項目實例離線郵件報警

啟動監控服務端和客戶端,然后關閉客戶端,稍等一會檢查指定的報警接收郵箱,就會發現已收到報警郵件了。

圖片描述

項目實例離線郵件報警內容

5. 視頻演示

6. 小結

報警和監控機制可以為上線運行的項目提供額外的保障機制。

  • 可視化監控可以提供一種總攬全局的監控視角,眾多項目運行狀況一目了然,做到心里有底。
  • 對于重點項目,可以定期監控項目實例的詳細運行參數。通過分析參數信息,預測性能瓶頸發生的時間節點,提前采取擴容等措施,防患于未然。
  • 當發生嚴重錯誤,或者由于人為誤操作導致項目離線時,指定郵箱能夠及時收到報警信息。技術人員及時排查處理,作為項目運維方心里更有底。