《SpringBoot 3:入门与应用实战》第 15 章 生产级特性 监控指标 Metrics 阅读笔记

《SpringBoot 3:入门与应用实战》第 15 章 生产级特性 监控指标 Metrics 阅读笔记

一 参考资料

二 笔记总结

15.3 监控指标 Metrics

除了监控端点,Spring Boot Actuator 提供的另一项核心生产级特性是监控指标 (Metrics)。监控指标通常用于监控应用和服务器的某些具体指标值。

15.3.1 内置指标

Spring Boot Actuator 给我们提供了非常多的监控端点,此外我们还可以通过访问 metrics 端点获得当前的监控指标 (Metrics),比如此时我们访问 /actuator/metrics 端点,就可以得到非常多的监控指标名称。

要想使用这些监控指标,我们可以直接复制其中某个指标的名称,并追加在 /actuator/metrics 请求后面,例如要获取当前 CPU 的内核数量,可以访问 /actuator/metrics/system.cpu.count,发送请求后可以得到 JSON 数据,这里面有指标的描述、指标的单位、当前指标的参数值等。

15.3.2 自定义指标

除了使用 Spring Boot Actuator 提供的内置指标,在实际的项目开发中我们可能还需要自己来扩展一些监控指标,用于了解应用的运行情况和状态,此时就需要自定义监控指标。从 Spring Boot 2.x 开始 Spring Boot Actuator 选择使用 Micrometer 完成监控指标信息的收集( Micrometer 由 Pivotal 公司开发)​,我们可以选择的一个监控指标扩展方式是利用 Micrometer 提供的一个名为 MeterRegistry 的 API。下面通过一个简单的示例进行演示。

假设有一个业务接口,我们需要监控的是这个接口的调用次数,那么编码的方式就是利用 MeterRegistry 的计数功能来逐次累加。

除了频数监控 外,MeterRegistry 还支持聚合统计耗时监控 等。关于更多使用方式,读者可以参照 Spring Boot 的官方文档,结合 Micrometer的使用文档来测试,此处不再赘述。

java 复制代码
    @Autowired
    private MeterRegistry meterRegistry;

    private Counter counter;

    @PostConstruct
    public void init(){
        counter = meterRegistry.counter("product_controller_counter", "method", "selectProduct");
    }
java 复制代码
counter.increment();

15.3.3 基于场景的指标

当 Spring Boot 整合官方提供的启动场景后,大多数场景中会一同引入相应场景的监控指标,比如引入 WebMvc 的场景启动器后,Spring Boot Actuator 提供的监控指标信息中会多出一组以 tomcat 开头的嵌入式 Tomcat 指标,以及一些其他与 WebMvc 相关的场景指标,本节会针对几种常用的场景进行简单介绍。

  1. WebMvc
    WebMvc 中包含的场景指标大体分为两个部分:嵌入式 Web 的指标;HTTP 服务端与客户端的指标。嵌入式 Tomcat 的性能指标主要是会话信息,我们可以得到 Tomcat 内部会话的数量、最大值等;而 HTTP 服务端与客户端的指标中我们可以得知当前应用的接口被请求的次数、总耗时、最大耗时等,对应指标的名称是 http.server.requests。如果访问 /actuator/ metrics/http.server.requests 请求,则会收到一组响应数据。

    WebMvc 模块中的客户端主要指 RestTemplate,Spring Boot Actuator 也可以对 RestTemplate 进行监控,只需要使用 RestTemplateBuilder 构造 RestTemplate 并将其注册到 IOC 容器(注意直接通过 new 操作得来的 RestTemplate 不会被 Spring Boot Actuator 监控收集信息)。比如我们编写一个配置类注册 RestTemplate 到 IOC 容器,并使用 RestTemplate 请求百度的首页。
    随后重启应用,多次访问 /test 请求后再访问 /actuator/metrics,即可在监控指标中发现一个名为 http.client.requests 的指标,这就是 HTTP 客户端的监控指标。对比 http.client.requests 和 http.server.requests 返回的内容,可以发现两者记录的内容中有部分是重叠的,这部分本来就是HTTP 请求中必然可以收集到的指标。



java 复制代码
package com.yangjunbo.monitoring.config;

import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

import java.time.Duration;

/**
 * ClassName: RestTemplateConfig
 * Package: com.yangjunbo.monitoring.config
 * Description: RestTemplate 配置类,使用 RestTemplateBuilder 构造并注册到 IOC 容器
 *
 * @Author 杨钧博
 * @Create 2026/8/3 10:00
 * @Version 1.0
 */
@Configuration
public class RestTemplateConfig {

    /**
     * 通过 RestTemplateBuilder 构造 RestTemplate 并注册到 IOC 容器
     * Spring Boot 会自动注入 RestTemplateBuilder 实例
     */
    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
        return builder
                // 设置连接超时时间
                .connectTimeout(Duration.ofSeconds(5))
                // 设置读取超时时间
                .readTimeout(Duration.ofSeconds(10))
                .build();
    }
}
java 复制代码
    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/test")
    public void test(){
        restTemplate.getForObject("https://www.baidu.com",String.class);
    }
  1. JDBC
    当整合 JDBC 场景后,我们最关心的指标是 DataSource 的状态和指标,比如数据源中的连接池大小、当前活跃的线程、最大线程数量等。当引入 spring-boot-starter-jdbc 场景启动器并配置数据源的信息后,再次访问 /actuator/metrics,即可看到返回的监控指标中多出一组 hikaricp 开头和一组 jdbc 开头的指标,这些就是 JDBC 场景下我们可以获取的监控指标信息。

  2. Redis
    与整合 JDBC 场景类似,当整合 Spring Data Redis 场景后,默认 Spring Boot 选择使用 Lettuce 作为 Redis 的连接工具,所以 Actuator 的监控指标中会多出一组 lettuce 开头的指标,通过它们可以得知 Lettuce 的相关监控信息。
相关推荐
弹简特1 小时前
【Java项目-企悦抽】11-用户与认证模块-实现用户登录03(结束登录功能)-完成测试+对接前端+登录拦截器
java·开发语言
噜~噜~噜~2 小时前
操作系统笔记-1.1.3 操作系统的特征
笔记·操作系统
杨先生哦2 小时前
【2026热端攻防系列 10/12】前端凭据安全深度攻防:Cookie/Storage劫持、会话固定、凭据泄露与浏览器最新加固方案
前端·笔记·安全·web安全
大模型丫丫2 小时前
Loop Engineering:从强化学习视角看 Agent 循环的本质
java·人工智能·学习
数电发票API2 小时前
税局接口,需要的来~~
java
天天爱吃肉82182 小时前
# 商用车多体动力学实战笔记|第7篇:制动系统与制动热衰退、ABS滞环控制
大数据·人工智能·笔记·python·嵌入式硬件·汽车
骇客野人2 小时前
IntelliJ IDEA 使用技巧
java·ide·intellij-idea
龙亘川2 小时前
【客户定制更新】能源充电(汽车充电管理模块)版本更新详情
spring boot·汽车·系统安全·智慧城市·能源
xiaoyuchidayuma2 小时前
【交流绕组及其磁动势-典型交流绕组结构(绘制绕组展开图)】
笔记·学习