《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 的相关监控信息。
相关推荐
lll23526917793 小时前
2026行业语音转写工具专业术语转写功能横向分析
笔记·智能手机
_Evan_Yao4 小时前
Redis 缓存穿透、击穿、雪崩,一次讲清!
java·spring·mybatis
梓豪csd5 小时前
消息订阅中心:谁该收到哪条通知
java·开发语言·人工智能·低代码·自动化·1024程序员节
秋饼5 小时前
Spring AI 2.1 Message Parts 深度实战:推理签名回放与跨轮记忆持久化的源码级落地
java·ai·技术分享·后端开发
thefool1122666 小时前
TCP 1
java·1024程序员节
paopaokaka_luck8 小时前
宠物门店经营管理系统(销售与库存联动、进货自动记账、 退换与退款关联、员工个人业绩、ECharts 经营分析、滞销识别与客户分层、宠物档案年龄计算)
前端·javascript·spring boot·mysql·echarts·mybatis·1024程序员节
金銀銅鐵8 小时前
[Java] 用 GUI 展示 EnumSet 增减元素时的内部变化(下)
java·后端·ai编程
AI人工智能+电脑小能手8 小时前
一次请求打几个下游,这个Java并行任务工具类6个方法按序聚合
java·线程池·并发编程·1024程序员节·批量处理·并行任务
paopaokaka_luck10 小时前
心理咨询管理系统(WebSocket实时沟通、基于用户的协同过滤、 ECharts多维分析、 预约业务流程、预约校验与定时处理)
java·vue.js·spring boot·mysql·spring·echarts·1024程序员节
2301_322414280410 小时前
springboot农产品交易平台的设计与实现08055-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·spring boot·redis·mysql·tomcat·maven·mybatis