1. 引言 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 [AppleScript] 纯文本查看 复制代码 <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-serverSpring Boot Admin 可以用作单台服务的监控,也可用于集群的监控,我们先介绍单台服务的监控配置。 pom.xml 配置文件如下: 代码清单:spring-boot-admin/spring-boot-admin-server/pom.xml [AppleScript] 纯文本查看 复制代码 <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 [AppleScript] 纯文本查看 复制代码 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 [AppleScript] 纯文本查看 复制代码 @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 代码清单: [AppleScript] 纯文本查看 复制代码 <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 [AppleScript] 纯文本查看 复制代码 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 代码示例这里不再列出 工程依赖 pom.xml 如下: 代码清单:spring-boot-admin/spring-boot-admin-client/pom.xml [AppleScript] 纯文本查看 复制代码 <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 [AppleScript] 纯文本查看 复制代码 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 如下: 代码清单: [AppleScript] 纯文本查看 复制代码 @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 。点进去一样可以看到对应的实例的详情。
|