日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringBoot - 构建监控体系03_使用 Admin Server 管理 Spring 应用程序

發(fā)布時(shí)間:2025/3/21 javascript 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringBoot - 构建监控体系03_使用 Admin Server 管理 Spring 应用程序 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • Pre
  • 引入 Spring Boot Admin 組件
  • 基于獨(dú)立服務(wù)構(gòu)建 Admin Server
  • 基于注冊中心構(gòu)建 Admin Server
  • 使用 Admin Server 監(jiān)控系統(tǒng)
    • 監(jiān)控系統(tǒng)運(yùn)行時(shí)關(guān)鍵指標(biāo)
  • 控制訪問安全性


Pre

通過引入 Actuator 組件,我們?yōu)?Spring Boot 應(yīng)用程序添加了系統(tǒng)監(jiān)控功能。基于 Actuator 暴露的各種 HTTP 端點(diǎn),開發(fā)人員可以獲取系統(tǒng)的運(yùn)行時(shí)狀態(tài)。而端點(diǎn)是一種底層的監(jiān)控技術(shù),這就要求我們對 HTTP 協(xié)議和 Spring Boot 應(yīng)用程序的構(gòu)建方式有一定的了解。

那么,有沒有更簡單的、基于可視化的方式獲取這些端點(diǎn)背后的信息呢? 我們將要介紹 Spring Boot Admin 組件。

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.4.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent>

引入 Spring Boot Admin 組件

Spring Boot Admin 是一個(gè)用于監(jiān)控 Spring Boot 的應(yīng)用程序,它的基本原理是通過統(tǒng)計(jì)、集成 Spring Boot Actuator 中提供的各種 HTTP 端點(diǎn),從而提供簡潔的可視化 WEB UI,如下圖所示

從上圖中,我們不難看出,Spring Boot Admin 的整體架構(gòu)中存在兩大角色,即服務(wù)器端組件 Admin Server 和客戶端組件 Admin Client。其中,Admin Client 實(shí)際上是一個(gè)普通的 Spring Boot 應(yīng)用程序,而 Admin Server 則是一個(gè)獨(dú)立服務(wù),需要進(jìn)行專門構(gòu)建。

接下來,我們先介紹構(gòu)建 Admin Server 的兩種實(shí)現(xiàn)方式:

  • 一種是簡單的基于獨(dú)立的 Admin 服務(wù);
  • 另一種則相對復(fù)雜,需要依賴服務(wù)注冊中心的服務(wù)注冊和發(fā)現(xiàn)機(jī)制。

基于獨(dú)立服務(wù)構(gòu)建 Admin Server

無論使用哪種方式實(shí)現(xiàn) Admin Server,首先我們都需要?jiǎng)?chuàng)建一個(gè) Spring Boot 應(yīng)用程序,并在 pom 文件中添加如下所示的依賴項(xiàng):

<dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-server</artifactId><version>2.2.3</version></dependency><dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-server-ui</artifactId><version>2.2.3</version></dependency>

請注意: Spring Boot Admin 組件并不是 Spring 家族官方提供的組件,而是來自一個(gè) codecentric AG 團(tuán)隊(duì)。

如果我們想將普通的 Spring Boot 應(yīng)用程序轉(zhuǎn)變?yōu)?Spring Boot Admin Server,只需要在 Bootstrap 類上添加一個(gè) @EnableAdminServer 注解即可,添加完該注解的 BootStrap 類如下代碼所示:

@SpringBootApplication @EnableAdminServer public class AdminApplication {public static void main(String[] args) {SpringApplication.run(AdminApplication.class, args);} }

從圖中我們可以看到,目前還沒有一個(gè)應(yīng)用程序與 Admin Server 有關(guān)聯(lián)。如果想將應(yīng)用程序與 Admin Server 進(jìn)行關(guān)聯(lián),我們還需要對原有的 Spring Boot 應(yīng)用程序做一定的改造。

首先,我們在 Maven 依賴中引入對 Spring Boot Admin Client 組件的依賴,如下代碼所示:

<dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-client</artifactId> </dependency>

然后,我們在配置文件中添加如下配置信息,以便該應(yīng)用程序能夠與 Admin Server 進(jìn)行關(guān)聯(lián)。

spring:boot:admin:client:url: http://localhost:9000

注意:這里的 9000 就是 Admin Server 的服務(wù)器端口。

現(xiàn)在我們啟動(dòng)這個(gè)應(yīng)用程序,就會(huì)發(fā)現(xiàn) Admin Server 中已經(jīng)出現(xiàn)了這個(gè)應(yīng)用的名稱和地址了


基于注冊中心構(gòu)建 Admin Server

雖然基于獨(dú)立服務(wù)構(gòu)建 Admin Server 和 Admin Client 非常簡單,但是需要我們在每個(gè)應(yīng)用程序中添加對 Spring Boot Admin 的 Maven 依賴,并指定 Admin Server 地址。這實(shí)際上是一種代碼侵入,意味著應(yīng)用程序與 Admin Server 之間有一種強(qiáng)耦合。

那么,有沒有更好的辦法分離或轉(zhuǎn)嫁這種耦合呢?

聯(lián)想到 Admin Server 和 Admin Client 之間需要建立類似服務(wù)注冊的關(guān)聯(lián)關(guān)系,我們可以認(rèn)為這是服務(wù)注冊和發(fā)現(xiàn)機(jī)制的一種表現(xiàn)形式。

在 Spring 家族中,存在一個(gè)用于構(gòu)建微服務(wù)架構(gòu)的 Spring Cloud 框架,而該框架中恰好存在一款專門實(shí)現(xiàn)服務(wù)注冊和發(fā)現(xiàn)的組件——服務(wù)注冊中心 Spring Cloud Netflix Eureka ,且 Spring Boot Admin 內(nèi)置了與這款注冊中心實(shí)現(xiàn)工具的無縫集成。

基于注冊中心,Admin Server 與各個(gè) Admin Client 之間的交互方式如下圖所示:


使用 Eureka 構(gòu)建注冊中心的過程也很簡單,首先我們創(chuàng)建一個(gè)獨(dú)立的 Spring Boot 應(yīng)用程序,并在 pom 文件中添加如下所示的用于提供 Eureka 服務(wù)端功能的 Maven 依賴:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>

引入 Maven 依賴后,我們就可以創(chuàng)建 Spring Boot 的啟動(dòng)類。在示例代碼中,我們把該啟動(dòng)類命名為 EurekaServerApplication,如下代碼所示:

@SpringBootApplication @EnableEurekaServer public class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class, args);} }

注意:在上面的代碼中,我們在啟動(dòng)類上加了一個(gè)@EnableEurekaServer 注解。在 SpringCloud 中,包含 @EnableEurekaServer 注解的服務(wù)也就是一個(gè) Eureka 服務(wù)器組件。這樣,Eureka 服務(wù)就構(gòu)建完畢了。

同樣,Eureka 服務(wù)還為我們提供了一個(gè)可視化的 UI 界面,它可以用來觀察當(dāng)前注冊到 Eureka 中的應(yīng)用程序信息,如下圖所示:
接下來,我們需要 Admin Server 也做相應(yīng)調(diào)整。首先,我們在 pom 文件中添加一個(gè)對 spring-cloud-starter-netflix-eureka-client 這個(gè) Eureka 客戶端組件的依賴:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>

這時(shí) Admin Server 相當(dāng)于 Eureka 的客戶端,因此,我們需要在它的 BootStrap 類上添加 @EnableEurekaClient 注解,以便將 Admin Server 注冊到 Eureka 上。

重構(gòu) Admin Server 的最后一步是調(diào)整配置信息,此時(shí)我們需要在配置文件中添加如下所示的配置項(xiàng)來指定 Eureka 服務(wù)器地址。

eureka:client:registerWithEureka: truefetchRegistry: trueserviceUrl:defaultZone: http://localhost:8761/eureka/

好了,現(xiàn)在 Admin Server 已經(jīng)重構(gòu)完畢,接下來我們一起看看 Admin Client。

引入注冊中心的目的是降低 Admin Client 與 Admin Server 之間的耦合度,關(guān)于這點(diǎn)我們從 Maven 依賴上就可以得到印證。有了注冊中心后,Admin Client 就不再依賴 spring-boot-admin-starter-client 組件了,而是直接使用如下所示的 Eureka 客戶端組件。

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>

在配置文件中,我們需要去掉對 Admin Server 地址的引用,直接使用 Eureka 服務(wù)端地址即可,且無須對 Admin Client 中的 Bootstrap 類做任何修改。

通過以上調(diào)整,各個(gè) Admin Client 就能通過 Eureka 注冊中心完成與 Admin Server 的關(guān)聯(lián)了。


使用 Admin Server 監(jiān)控系統(tǒng)

根據(jù) Spring Boot Admin 官方 Github 上的介紹,Admin Server 監(jiān)控系統(tǒng)提供了一套完整的可視化方案。基于 Admin Server,健康狀態(tài)、JVM、內(nèi)存、Micrometer 的度量、線程、HTTP 跟蹤等核心功能都可以通過可視化的 UI 界面進(jìn)行展示。

監(jiān)控系統(tǒng)運(yùn)行時(shí)關(guān)鍵指標(biāo)

注意到 Admin Server 菜單中有一個(gè)“Wallboard”,點(diǎn)擊該菜單,我們就可以看到一面應(yīng)用墻,如下圖所示:

點(diǎn)擊應(yīng)用墻中的某個(gè)應(yīng)用,我們就能進(jìn)入針對該應(yīng)用的監(jiān)控信息主界面。在該界面的左側(cè),包含了監(jiān)控功能的各級目錄,如下圖所示:

咩有的話,看看你是否

management:endpoints:web:exposure:include: "*"

在圖中,我們看到了最重要的“Health”信息,顯然,這一信息來自 Spring Boot Actuator 組件的 Health 端點(diǎn),

在這個(gè)界面上繼續(xù)往下滑動(dòng),我們將看到一些與 JVM 相關(guān)的監(jiān)控信息,比如非常有用的線程、垃圾回收、內(nèi)存狀態(tài)等數(shù)據(jù),如下圖所示:


這些 JVM 數(shù)據(jù)都是通過可視化的方式進(jìn)行展現(xiàn),并隨著運(yùn)行時(shí)狀態(tài)的變化而實(shí)時(shí)更新。

Spring Boot Actuator 中的度量指標(biāo) ,而在 Admin Server 中,同樣存在一個(gè)“Metrics”菜單,展示效果如下圖所示:


在“Metrics”菜單中,開發(fā)人員可以通過對各種條件進(jìn)行篩選,然后添加對應(yīng)的度量指標(biāo)。比如上圖中,我們針對 HTTP 請求中 /actuator/health 端點(diǎn)進(jìn)行了過濾,從而得到了度量結(jié)果。

接著我們一起看看系統(tǒng)環(huán)境方面的屬性,因?yàn)檫@方面的屬性非常之多,所以 Admin Server 也提供了一個(gè)過濾器,如下圖所示:
在上圖中,通過輸入“spring.”參數(shù),我們就能獲取一系列與該參數(shù)相關(guān)的環(huán)境屬性。

日志也是我們監(jiān)控系統(tǒng)的一個(gè)重要途徑,在 Admin Server 的“Loggers”菜單中,可以看到該應(yīng)用程序的所有日志信息,如下圖所示:
通過”springcss”關(guān)鍵詞對這些日志進(jìn)行過濾,我們就可以獲取 SpringCSS中的日志詳細(xì)了,圖中也顯示了每個(gè)日志記錄器對應(yīng)的日志級別。

最后,我們來看一下 Admin Server 中的“JVM”菜單,該菜單下存在兩個(gè)子菜單:“Thread Dump”和“Heap Dump”。

以“Thread Dump”為例,盡管 Actuator 提供了 /threaddump 端點(diǎn),但開發(fā)人員只能獲取觸發(fā)該端點(diǎn)時(shí)的 Dump 信息,而 Admin Server 則提供了一個(gè)連續(xù)性的可視化監(jiān)控界面,如下圖所示:


點(diǎn)擊圖中的色條,我們就可以獲取每一個(gè)線程的詳細(xì)信息了,這里你可以嘗試做一些分析。


控制訪問安全性

講到這里,我們會(huì)發(fā)現(xiàn) Admin Server 的功能非常強(qiáng)大,而這些功能顯然也不應(yīng)該暴露給所有的開發(fā)人員。因此,我們需要控制 Admin Server 的訪問安全性。

想做到這一點(diǎn)也非常簡單,我們只需要集成 Spring Security 即可。我們在 Spring Boot 應(yīng)用程序中添加一個(gè)對 spring-boot-starter-security 的 Maven 依賴:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId> </dependency>

然后,我們在配置文件中添加如下配置項(xiàng):

spring:security:user:name: "artisan"password: "artisan123"

重啟 Admin Server 后,再次訪問 Web 界面時(shí),就需要我們輸入用戶名和密碼了,如下圖所示:

總結(jié)

以上是生活随笔為你收集整理的SpringBoot - 构建监控体系03_使用 Admin Server 管理 Spring 应用程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。