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 服務進行監控


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM