Spring Boot Admin 是一款开源的监控平台,可以监控多个 Spring Boot 应用。除了系统提供的基本监控外,Spring Boot Admin 还提供了自定义监控的功能,可以帮助我们更好地把控我们的应用程序在各种情况下的性能表现。
一、自定义监控指标
Spring Boot Admin 自定义监控指标,可按照业务需求为应用添加自定义指标。添加自定义监控一般分为两步:
第一步,在被监控的应用程序中,引入对应的依赖包,例如添加以下 Maven 依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.3.1</version>
</dependency>
第二步,在 Spring Boot Admin 控制台中添加对应的监控指标。默认情况下,Spring Boot Admin 可以监控应用程序的一些基础指标,如内存使用情况、线程数、请求响应等信息。如果需要监控更多指标,可以在 Spring Boot Admin 的“Details”标签下,通过添加扩展来实现。
以监控数据库连接为例,我们可以通过添加自定义的 HealthIndicator 扩展来实现。具体步骤如下:
1.在需要被监控的应用程序中,添加以下 Maven 依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2.为 HealthIndicator 创建一个类,实现 HealthIndicator 接口的 health() 方法:
package com.example.demo.health;
import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.stereotype.Component;
import java.sql.Connection;
import java.sql.DriverManager;
@Component
public class DatabaseHealthIndicator implements HealthIndicator {
@Override
public Health health() {
try {
Connection connection = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/demo", "root", "123456");
connection.close();
return Health.up().build();
} catch (Exception e) {
return Health.down().withException(e).build();
}
}
}
3.在应用程序的配置文件中,添加以下配置:
management.endpoint.health.show-details=always
这个配置允许访问 扩展信息 标签页面来查看我们自定义的监控项。
4.在 Spring Boot Admin 控制台的“Details”标签下,添加新的扩展。点击“Add extension”按钮,在“Extension Name”字段中输入任意名称,在“Type”字段中选择“Health”项,点击“Add”按钮,保存扩展。
二、自定义监控警报
Spring Boot Admin 还支持为监控指标设置警报,当指标超过特定阈值时,自动发送警报信息。
为了实现自定义警报,我们需要在 Spring Boot Admin 控制台中预先设置警报规则:
1.在“Alerts”标签下,点击“Add Alert”按钮,创建新的警报规则。
2.在警报规则设置页面中,可以设置警报的名称、触发警报的条件、警报的持续时间等。在触发警报的条件中,可以选择已有的监控指标,也可以添加自定义的监控指标。
3.当监控指标超过设定的阈值时,Spring Boot Admin 将会发送邮件通知管理员。可以在邮件模板中自定义邮件的内容和格式。
4.可以在“Alerts”标签下查看所有警报规则的状态和历史记录。
三、自定义监控视图
除了默认的监控视图之外,Spring Boot Admin 还支持自定义监控视图。我们可以通过添加自定义模板和自定义页面实现。
1.为应用程序添加自定义监控模板。在应用程序的配置文件中,添加以下配置:
spring.boot.admin.ui.extension-resource-locations=file:/path/to/custom/templates/
其中,/path/to/custom/templates/ 是自定义模板所在的目录。在这个目录下,可以添加自定义的 Thymeleaf 模板,覆盖默认的模板。
2.为 Spring Boot Admin 添加自定义监控页面。这需要我们重写 Spring Boot Admin 的视图。具体步骤如下:
Step 1. 先创建一个自定义页面,比如 admin-custom-page.html:
<html>
<head>
<title>Custom view - {{application.name}}</title>
</head>
<body>
<p>Hello, <b>{{application.name}}</b>!</p>
<p>This is a custom view.</p>
<p>You can add your own content here. <i>Happy monitoring!</i></p>
</body>
</html>
Step 2. 在应用程序的配置文件中,添加以下配置:
spring.boot.admin.ui.index-templates.admin-custom-page=/admin-custom-page.html
这个配置允许我们在 Spring Boot Admin 的主页面中添加一个指向我们自定义页面的链接。
Step 3. 重新启动 Spring Boot Admin,访问 http://localhost:8080/#/applications 可以看到我们自定义的页面链接已经添加到了主页上。
需要注意的是,我们可以通过自定义页面来展示自定义监控指标的结果,以及设置自定义的警报规则。自定义监控页面中可以直接嵌入 JavaScript 代码,用于实现更加复杂的前端交互效果。
四、自定义监控数据源
在 Spring Boot Admin 中,默认的监控数据源是内存。在实际生产环境中,我们可能需要使用数据库等数据存储方式来保存和管理监控数据。
Spring Boot Admin 内置了许多数据存储方式,可以通过配置来切换使用不同的数据源。例如,我们可以使用 JDBC 数据库来存储监控数据:
Step 1. 添加 Spring Boot Admin JDBC 依赖:
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server-db</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
Step 2. 在应用程序的配置文件中,添加以下配置:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/spring_boot_admin
spring.datasource.username=root
spring.datasource.password=123456
spring.boot.admin.export.db.jdbc.enabled=true
spring.boot.admin.export.db.jdbc.sql-schema=classpath:/schema.sql
spring.boot.admin.export.db.jdbc.sql-init=classpath:/data.sql
其中,spring.boot.admin.export.db.jdbc.enabled=true 表示启用 JDBC 数据库作为监控数据源;spring.boot.admin.export.db.jdbc.sql-schema 和 spring.boot.admin.export.db.jdbc.sql-init 分别表示初始化监控数据表结构和插入一些测试数据。
Step 3. 在应用程序的 schema.sql 中添加以下代码:
CREATE TABLE IF NOT EXISTS `SPRING_BOOT_ADMIN_EVENT` (
`ID` INTEGER(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
`EVENT` VARCHAR(255) NOT NULL,
`TIMESTAMP` BIGINT(20) NOT NULL,
`APPLICATION` VARCHAR(255) NOT NULL,
`INSTANCE` VARCHAR(255) NOT NULL,
`VERSION` VARCHAR(255) NOT NULL,
`HOST` VARCHAR(255),
`ORIGIN` VARCHAR(255),
`DATA` TEXT
);
Step 4. 在应用程序的 data.sql 中添加以下代码:
INSERT INTO SPRING_BOOT_ADMIN_EVENT(EVENT, TIMESTAMP, APPLICATION, INSTANCE, VERSION, HOST, ORIGIN, DATA)
VALUES('test-event', UNIX_TIMESTAMP() * 1000, 'sample-app', 'localhost:8080', '1.0', 'localhost', 'http://localhost:8080', '{"Name": "TestEvent"}');
重启 Spring Boot Admin,我们就可以使用 JDBC 数据库作为监控数据源,从而更好地管理监控数据。
五、自定义监控策略
Spring Boot Admin 还支持自定义监控策略,可以根据实际需要更灵活地控制监控行为。例如,可以设置在指定时间段内不监控某个应用程序。
我们可以在应用程序的配置文件中,使用 Spring Boot Admin 的配置项来设置监控策略。具体的配置项和使用方式,请参考 Spring Boot Admin 官方文档。
六、结语
本文介绍了 Spring Boot Admin 自定义监控的基本概念和操作流程,包括自定义监控指标、警报、视图、数据源和策略。通过对 Spring Boot Admin 的深入理解和灵活应用,可以更好地实现监控、管理和优化 Spring Boot 应用程序的性能表现。