1. 引言
Spring Boot Actuator 提供了對單個 Spring Boot 的監控,信息包含:應用狀態、內存、線程、堆棧等等,比較全面的監控了 Spring Boot 應用的整個生命週期。但是, Spring Boot Actuator 只爲我們提供了監控的數據接口,而且返回的數據量非常的大,我們不可能通過人工肉眼的方式去分析這些返回的數據,肯定是希望能有一個圖形化的界面幫助我們去分析這些信息,同時,在微服務的體系中,我們的服務數量是非常多的,這同樣不方便我們人工管理,在這樣的背景下,誕生了另一個開源軟件,也是本篇文章要介紹的: Spring Boot Admin 。
2. Spring Boot Admin 簡介
Spring Boot Admin 是一個 Web 應用,用於管理和監視 Spring Boot 應用程序的運行狀態。每個 Spring Boot 應用程序都被視爲客戶端並註冊到管理服務器。背後的數據採集是由 Spring Boot Actuator 端點提供。前端 Spring Boot Admin UI 展示使用 VueJs 將數據展示在前端。
(瞭解源碼可+求求: 1791743380)
本文將介紹如何使用 Spring Boot Admin 對 Spring Boot 進行監控。
3. 工程實戰
3.1 創建父工程 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>
在 中增加 spring-boot-admin-dependencies 的版本配置,因爲 spring-boot-admin 有關的版本信息未集成在 spring-boot-dependencies 中,咱也不知道爲啥,咱也不敢問。
3.2 創建子工程 spring-boot-admin-server
Spring Boot Admin 可以用作單臺服務的監控,也可用於集羣的監控,我們先介紹單臺服務的監控配置。
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>
注意: 如果只是單臺服務使用,只需引入 spring-boot-admin-starter-server 的依賴即可, spring-cloud-starter-netflix-eureka-client 此依賴是 Spring Boot Admin 基於 Eureka 服務中心會使用到的依賴。
配置文件 application.yml 如下:
代碼清單:spring-boot-admin/spring-boot-admin-server/src/main/resources/application.yml
server:
port: 8888
spring:
application:
name: spring-boot-admin-server
eureka:
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.***.*** 等相關內容。
啓動主類 SpringBootAdminServerApplication.java 如下:
代碼清單:spring-boot-admin/spring-boot-admin-server/src/main/java/com/springboot/springbootadminserver/SpringBootAdminServerApplication.java
@SpringBootApplication
@EnableAdminServer
@EnableEurekaClient
public class SpringBootAdminServerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootAdminServerApplication.class, args);
}
}
注意: 單機版本無需添加 @EnableEurekaClient 註解。
3.3 創建子工程 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>
此工程僅需引入 spring-boot-admin-starter-client Spring Boot Admin 的客戶端即可。
配置文件 application.yml 如下:
代碼清單:spring-boot-admin/spring-boot-admin-clienta/src/main/resources/application.yml
server:
port: 9090
spring:
application:
name: spring-boot-clienta
boot:
admin:
client:
url: http://localhost:8888
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: ALWAYS
spring.application.name 配置的名稱會在 Spring Boot Admin 的 UI 界面中顯示出來
spring.boot.admin.client.url 配置的是我們 Spring Boot Admin 服務端的地址。
management.endpoints.web.exposure.include 開啓 Spring Boot Actuator 的全部監控。
management.endpoint.health.show-details 開啓 Spring Boot Actuator 監控的應用的詳細的應用健康信息。
啓動 spring-boot-admin-server 工程和 spring-boot-admin-clienta ,稍等一會, spring-boot-admin-clienta 會自動註冊到 spring-boot-admin-server 上面去。
打開瀏覽器訪問 http://localhost:8888/ ,這時我們可以看到 Spring Boot Admin 監控圖,如下:
點擊後會進入該應用的詳細信息,我們可以看到 Spring Boot Admin 使用圖形化的界面展示了該應用的各種信息,如下:
3.4 創建子工程 spring-boot-admin-client
此工程示例爲微服務版本的 Spring Boot Admin 使用示例,其中使用服務中心 Eureka 註冊服務, Spring Boot Admin 會從服務中心 Eureka 上讀取相關的信息,進行服務監控。這樣我們就不需要在客戶端再配置 Spring Boot Admin 的服務地址,後續如果 Spring Boot Admin 服務發生地址遷移等事情時,也無需修改客戶端的配置文件。
Eureka 代碼示例這裏不再列出,如果有需要補課的同學,可以訪問筆者的 《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>
這裏僅添加 Spring Boot Admin 的客戶端和 Spring Cloud Eureka 的客戶端依賴。
配置文件 application.yml 如下:
代碼清單:spring-boot-admin/spring-boot-admin-client/src/main/resources/application.yml
server:
port: 8080
spring:
application:
name: spring-boot-admin-client
eureka:
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
對比前面單機版的配置,這裏去掉了 Spring Boot Admin 服務地址的配置,增加了 Eureka 服務中心的配置。
啓動主類 SpringBootAdminClientApplication.java 如下:
代碼清單:
@SpringBootApplication
@EnableEurekaClient
public class SpringBootAdminClientApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootAdminClientApplication.class, args);
}
}
@EnableEurekaClient 含義爲啓用 Eureka 客戶端,實測雖然這裏不寫也一樣會啓用,但是最好還是寫一下吧:)
測試:
修改編輯器 idea 配置,在兩個不同的端口啓動子工程 spring-boot-admin-client ,打開 Spring Boot Admin 的 UI 界面,顯示如下:
可以看到,這裏顯示了兩個應用( APPLICATIONS ),一個是我們的 spring-boot-admin-server 本身的監控,還有一個是我們的 spring-boot-admin-client 應用,且該應用有兩個實例( INSTANCES ),分別位於兩個不同的端口 8080 和 8081 。點進去一樣可以看到對應的實例的詳情。