在上一篇文章 《Spring Boot (九): 微服务应用监控 Spring Boot Actuator 详解》 我们介绍了 Spring Boot 基于 Spring Boot Actuator 的服务监控, Spring Boot Actuator 提供了对单个 Spring Boot 的监控,信息包含:应用状态、内存、线程、堆栈等等,比较全面的监控了 Spring Boot 应用的整个生命周期。但是, Spring Boot Actuator 只为我们提供了监控的数据接口,而且返回的数据量非常的大,我们不可能通过人工肉眼的方式去分析这些返回的数据,肯定是希望能有一个图形化的界面帮助我们去分析这些信息,同时,在微服务的体系中,我们的服务数量是非常多的,这同样不方便我们人工管理,在这样的背景下,诞生了另一个开源软件,也是本篇文章要介绍的: Spring Boot Admin 。
Spring Boot Admin 是一个 Web 应用,用于管理和监视 Spring Boot 应用程序的运行状态。每个 Spring Boot 应用程序都被视为客户端并注册到管理服务器。背后的数据采集是由 Spring Boot Actuator 端点提供。前端 Spring Boot Admin UI 展示使用 VueJs 将数据展示在前端。
本文将介绍如何使用 Spring Boot Admin 对 Spring Boot 进行监控。
依赖文件 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
中,咱也不知道为啥,咱也不敢问。 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
注解。
此工程为 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.client.url management.endpoints.web.exposure.include management.endpoint.health.show-details
启动 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 使用图形化的界面展示了该应用的各种信息,如下:
此工程示例为微服务版本的 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>
配置文件 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
启动主类 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 。点进去一样可以看到对应的实例的详情。
示例代码-Github
示例代码-Gitee
使用 spring-boot-admin 对 Spring Boot 服务进行监控