1. 引言在微服務(wù)的體系中,我們的服務(wù)數(shù)量是非常多的,這同樣不方便我們?nèi)斯す芾?,在這樣的背景下,誕生了另一個開源軟件,也是本篇文章要介紹的: Spring Boot Admin 。 2. Spring Boot Admin 簡介Spring Boot Admin 是一個 Web 應(yīng)用,用于管理和監(jiān)視 Spring Boot 應(yīng)用程序的運行狀態(tài)。每個 Spring Boot 應(yīng)用程序都被視為客戶端并注冊到管理服務(wù)器。背后的數(shù)據(jù)采集是由 Spring Boot Actuator 端點提供。前端 Spring Boot Admin UI 展示使用 VueJs 將數(shù)據(jù)展示在前端。(了解源碼可+求求: 1791743380) 本文將介紹如何使用 Spring Boot Admin 對 Spring Boot 進行監(jiān)控。 3. 工程實戰(zhàn)3.1 創(chuàng)建父工程 spring-boot-admin依賴文件 pom.xml 如下: 代碼清單:spring-boot-admin/pom.xml
<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><spring-cloud.version>Greenwich.SR3</spring-cloud.version><spring-boot-admin.version>2.1.5</spring-boot-admin.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-dependencies</artifactId><version>${spring-boot-admin.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
3.2 創(chuàng)建子工程 spring-boot-admin-serverSpring Boot Admin 可以用作單臺服務(wù)的監(jiān)控,也可用于集群的監(jiān)控,我們先介紹單臺服務(wù)的監(jiān)控配置。 pom.xml 配置文件如下: 代碼清單:spring-boot-admin/spring-boot-admin-server/pom.xml
<dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-server</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>
注意: 如果只是單臺服務(wù)使用,只需引入 spring-boot-admin-starter-server 的依賴即可, spring-cloud-starter-netflix-eureka-client 此依賴是 Spring Boot Admin 基于 Eureka 服務(wù)中心會使用到的依賴。 配置文件 application.yml 如下: 代碼清單:spring-boot-admin/spring-boot-admin-server/src/main/resources/application.yml
server: port: 8888spring: application: name: spring-boot-admin-servereureka: instance: leaseRenewalIntervalInSeconds: 10 health-check-url-path: /actuator/health client: registryFetchIntervalSeconds: 5 serviceUrl: defaultZone: ${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/management: endpoints: web: exposure: include: "*" endpoint: health: show-details: ALWAYS
注意: 單機版本無需配置其中的 eureka.***.*** 等相關(guān)內(nèi)容。 啟動主類 SpringBootAdminServerApplication.java 如下: 代碼清單:spring-boot-admin/spring-boot-admin-server/src/main/java/com/springboot/springbootadminserver/SpringBootAdminServerApplication.java
@SpringBootApplication@EnableAdminServer@EnableEurekaClientpublic class SpringBootAdminServerApplication { public static void main(String[] args) {
SpringApplication.run(SpringBootAdminServerApplication.class, args);
}
}
注意: 單機版本無需添加 @EnableEurekaClient 注解。 3.3 創(chuàng)建子工程 spring-boot-admin-clienta此工程為 Spring Boot Admin 單機版演示用例。 pom.xml 如下:spring-boot-admin/spring-boot-admin-clienta/pom.xml 代碼清單:
<dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-client</artifactId></dependency>
配置文件 application.yml 如下: 代碼清單:spring-boot-admin/spring-boot-admin-clienta/src/main/resources/application.yml
server: port: 9090spring: application: name: spring-boot-clienta boot: admin: client: url: http://localhost:8888management: endpoints: web: exposure: include: "*" endpoint: health: show-details: ALWAYS
spring.application.name 配置的名稱會在 Spring Boot Admin 的 UI 界面中顯示出來。
spring.boot.admin.client.url 配置的是我們 Spring Boot Admin 服務(wù)端的地址。
management.endpoints.web.exposure.include 開啟 Spring Boot Actuator 的全部監(jiān)控。
management.endpoint.health.show-details 開啟 Spring Boot Actuator 監(jiān)控的應(yīng)用的詳細(xì)的應(yīng)用健康信息。
啟動 spring-boot-admin-server 工程和 spring-boot-admin-clienta ,稍等一會, spring-boot-admin-clienta 會自動注冊到 spring-boot-admin-server 上面去。 打開瀏覽器訪問 http://localhost:8888/ ,這時我們可以看到 Spring Boot Admin 監(jiān)控圖,如下:
點擊后會進入該應(yīng)用的詳細(xì)信息,我們可以看到 Spring Boot Admin 使用圖形化的界面展示了該應(yīng)用的各種信息,如下:
3.4 創(chuàng)建子工程 spring-boot-admin-client此工程示例為微服務(wù)版本的 Spring Boot Admin 使用示例,其中使用服務(wù)中心 Eureka 注冊服務(wù), Spring Boot Admin 會從服務(wù)中心 Eureka 上讀取相關(guān)的信息,進行服務(wù)監(jiān)控。這樣我們就不需要在客戶端再配置 Spring Boot Admin 的服務(wù)地址,后續(xù)如果 Spring Boot Admin 服務(wù)發(fā)生地址遷移等事情時,也無需修改客戶端的配置文件。 Eureka 代碼示例這里不再列出,如果有需要補課的同學(xué),可以訪問筆者的 《Spring Cloud 系列文章》 。 工程依賴 pom.xml 如下: 代碼清單:spring-boot-admin/spring-boot-admin-client/pom.xml
<dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-client</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>
配置文件 application.yml 如下: 代碼清單:spring-boot-admin/spring-boot-admin-client/src/main/resources/application.yml
server: port: 8080spring: application: name: spring-boot-admin-clienteureka: instance: leaseRenewalIntervalInSeconds: 10 health-check-url-path: /actuator/health client: registryFetchIntervalSeconds: 5 serviceUrl: defaultZone: ${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/management: endpoints: web: exposure: include: "*" endpoint: health: show-details: ALWAYS
啟動主類 SpringBootAdminClientApplication.java 如下: 代碼清單:
@SpringBootApplication@EnableEurekaClientpublic class SpringBootAdminClientApplication { public static void main(String[] args) {
SpringApplication.run(SpringBootAdminClientApplication.class, args);
}
}
測試: 修改編輯器 idea 配置,在兩個不同的端口啟動子工程 spring-boot-admin-client ,打開 Spring Boot Admin 的 UI 界面,顯示如下:
可以看到,這里顯示了兩個應(yīng)用( APPLICATIONS ),一個是我們的 spring-boot-admin-server 本身的監(jiān)控,還有一個是我們的 spring-boot-admin-client 應(yīng)用,且該應(yīng)用有兩個實例( INSTANCES ),分別位于兩個不同的端口 8080 和 8081 。點進去一樣可以看到對應(yīng)的實例的詳情。
|