1. 程式人生 > >Spring Boot (十): Spring Boot Admin 監控 Spring Boot 應用

Spring Boot (十): Spring Boot Admin 監控 Spring Boot 應用

1. 引言

在上一篇文章《Spring Boot (九): 微服務應用監控 Spring Boot Actuator 詳解》我們介紹了 Spring Boot 基於 Spring Boot Actuator 的服務監控, 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 將資料展示在前端。

本文將介紹如何使用 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>
  • <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 。點進去一樣可以看到對應的例項的詳情。

4. 示例程式碼

示例程式碼-Github

示例程式碼-Gitee

5. 參考

使用 spring-boot-admin 對 Spring Boot 服務進行監