Spring Boot: Spring Boot Admin 監控 Spring Boot 應用

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 。點進去一樣可以看到對應的實例的詳情。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章