您的位置:

Spring Boot Admin自定义监控

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 应用程序的性能表现。