天天看點

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

Spring Boot Admin 監控、介紹和使用,Spring Boot Admin圖形化監控,讓監控更直覺更省力。

上一篇文章《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

作者:純潔的微笑

出處:www.ityouknow.com

資源:微信搜【純潔的微笑】關注我,回複 【程式員】【面試】【架構師】有我準備的一線程式必備計算機書籍、大廠面試資料和免費電子書。 一共1024G的資料,希望可以幫助大家提升技術和能力。

本文如對您有幫助,還請多幫 【推薦】 下此文。

點我了解:Tooool-程式員一站式導航網站