在上一篇文章《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
UTF-8
UTF-8
1.8
Greenwich.SR3
2.1.5
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
de.codecentric
spring-boot-admin-dependencies
${spring-boot-admin.version}
pom
import
中增加 spring-boot-admin-dependencies
的版本配置,因为 spring-boot-admin
有关的版本信息未集成在 spring-boot-dependencies
中,咱也不知道为啥,咱也不敢问。Spring Boot Admin 可以用作单台服务的监控,也可用于集群的监控,我们先介绍单台服务的监控配置。
pom.xml 配置文件如下:
代码清单:spring-boot-admin/spring-boot-admin-server/pom.xml
de.codecentric
spring-boot-admin-starter-server
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
注意: 如果只是单台服务使用,只需引入 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
代码清单:
de.codecentric
spring-boot-admin-starter-client
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 使用图形化的界面展示了该应用的各种信息,如下:
此工程示例为微服务版本的 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
de.codecentric
spring-boot-admin-starter-client
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
配置文件 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 服务进行监控