Spring Boot(二十):使用 spring-boot-admin 對 Spring Boot 服務進行監控

純潔的微笑發表於2018-02-11

上一篇文章《Spring Boot(十九):使用 Spring Boot Actuator 監控應用》介紹了 Spring Boot Actuator 的使用,Spring Boot Actuator 提供了對單個 Spring Boot 的監控,資訊包含:應用狀態、記憶體、執行緒、堆疊等等,比較全面的監控了 Spring Boot 應用的整個生命週期。

但是這樣監控也有一些問題:第一,所有的監控都需要呼叫固定的介面來檢視,如果全面檢視應用狀態需要呼叫很多介面,並且介面返回的 Json 資訊不方便運營人員理解;第二,如果 Spring Boot 應用叢集非常大,每個應用都需要呼叫不同的介面來檢視監控資訊,操作非常繁瑣低效。在這樣的背景下,就誕生了另外一個開源軟體:Spring Boot Admin

什麼是 Spring Boot Admin?

Spring Boot Admin 是一個管理和監控 Spring Boot 應用程式的開源軟體。每個應用都認為是一個客戶端,通過 HTTP 或者使用 Eureka 註冊到 admin server 中進行展示,Spring Boot Admin UI 部分使用 VueJs 將資料展示在前端。

這篇文章給大家介紹如何使用 Spring Boot Admin 對 Spring Boot 應用進行監控。

監控單體應用

這節給大家展示如何使用 Spring Boot Admin 監控單個 Spring Boot 應用。

Admin Server 端

專案依賴

<dependencies>
  <dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-server</artifactId>
    <version>2.1.0</version>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
</dependencies>

配置檔案

server.port=8000

服務端設定埠為:8000。

啟動類

@Configuration
@EnableAutoConfiguration
@EnableAdminServer
public class AdminServerApplication {

  public static void main(String[] args) {
    SpringApplication.run(AdminServerApplication.class, args);
  }
}

完成上面三步之後,啟動服務端,瀏覽器訪問http://localhost:8000可以看到以下介面:

Spring Boot(二十):使用 spring-boot-admin 對 Spring Boot 服務進行監控

Admin Client 端

專案依賴

<dependencies>
    <dependency>
      <groupId>de.codecentric</groupId>
      <artifactId>spring-boot-admin-starter-client</artifactId>
      <version>2.1.0</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

配置檔案

server.port=8001
spring.application.name=Admin Client
spring.boot.admin.client.url=http://localhost:8000  
management.endpoints.web.exposure.include=*
  • spring.boot.admin.client.url 配置 Admin Server 的地址
  • management.endpoints.web.exposure.include=* 開啟客戶端 Actuator 的監控。

啟動類

@SpringBootApplication
public class AdminClientApplication {
  public static void main(String[] args) {
    SpringApplication.run(AdminClientApplication.class, args);
  }
}

配置完成之後,啟動 Client 端,Admin 服務端會自動檢查到客戶端的變化,並展示其應用

Spring Boot(二十):使用 spring-boot-admin 對 Spring Boot 服務進行監控

頁面會展示被監控的服務列表,點選詳專案名稱會進入此應用的詳細監控資訊。

Spring Boot(二十):使用 spring-boot-admin 對 Spring Boot 服務進行監控

通過上圖可以看出,Spring Boot Admin 以圖形化的形式展示了應用的各項資訊,這些資訊大多都來自於 Spring Boot Actuator 提供的介面。

監控微服務

如果我們使用的是單個 Spring Boot 應用,就需要在每一個被監控的應用中配置 Admin Server 的地址資訊;如果應用都註冊在 Eureka 中就不需要再對每個應用進行配置,Spring Boot Admin 會自動從註冊中心抓取應用的相關資訊。

如果我們使用了 Spring Cloud 的服務發現功能,就不需要在單獨新增 Admin Client 客戶端,僅僅需要 Spring Boot Server ,其它內容會自動進行配置。

接下來我們以 Eureka 作為服務發現的示例來進行演示,實際上也可以使用 Consul 或者 Zookeeper。

1、服務端和客戶端新增 spring-cloud-starter-eureka 到包依賴中

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

2、啟動類新增註解

@Configuration
@EnableAutoConfiguration
@EnableDiscoveryClient
@EnableAdminServer
public class SpringBootAdminApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootAdminApplication.class, args);
    }

    @Configuration
    public static class SecurityPermitAllConfig extends WebSecurityConfigurerAdapter {
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.authorizeRequests().anyRequest().permitAll()  
                .and().csrf().disable();
        }
    }
}

使用類 SecurityPermitAllConfig 關閉了安全驗證。

3、在客戶端中配置服務發現的地址

eureka:   
  instance:
    leaseRenewalIntervalInSeconds: 10
    health-check-url-path: /actuator/health
    metadata-map:
      startup: ${random.int}    #needed to trigger info and endpoint update after restart
  client:
    registryFetchIntervalSeconds: 5
    serviceUrl:
      defaultZone: ${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/

management:
  endpoints:
    web:
      exposure:
        include: "*"  
  endpoint:
    health:
      show-details: ALWAYS

Spring Cloud 提供了示例程式碼可以參考這裡:spring-boot-admin-sample-eureka

重啟啟動服務端和客戶端之後,訪問服務端的相關地址就可以看到監控頁面了。

文章內容已經升級到 Spring Boot 2.x

示例程式碼-github

示例程式碼-碼雲

參考

Spring Boot Admin Reference Guide

相關文章