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

📅 2026/8/3 14:20:34
《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的使用文档来测试此处不再赘述。AutowiredprivateMeterRegistrymeterRegistry;privateCountercounter;PostConstructpublicvoidinit(){countermeterRegistry.counter(product_controller_counter,method,selectProduct);}counter.increment();15.3.3 基于场景的指标当 Spring Boot 整合官方提供的启动场景后大多数场景中会一同引入相应场景的监控指标比如引入 WebMvc 的场景启动器后Spring Boot Actuator 提供的监控指标信息中会多出一组以 tomcat 开头的嵌入式 Tomcat 指标以及一些其他与 WebMvc 相关的场景指标本节会针对几种常用的场景进行简单介绍。WebMvcWebMvc 中包含的场景指标大体分为两个部分嵌入式 Web 的指标HTTP 服务端与客户端的指标。嵌入式 Tomcat 的性能指标主要是会话信息我们可以得到 Tomcat 内部会话的数量、最大值等而 HTTP 服务端与客户端的指标中我们可以得知当前应用的接口被请求的次数、总耗时、最大耗时等对应指标的名称是 http.server.requests。如果访问 /actuator/ metrics/http.server.requests 请求则会收到一组响应数据。WebMvc 模块中的客户端主要指 RestTemplateSpring 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 请求中必然可以收集到的指标。packagecom.yangjunbo.monitoring.config;importorg.springframework.boot.web.client.RestTemplateBuilder;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.web.client.RestTemplate;importjava.time.Duration;/** * ClassName: RestTemplateConfig * Package: com.yangjunbo.monitoring.config * Description: RestTemplate 配置类使用 RestTemplateBuilder 构造并注册到 IOC 容器 * * Author 杨钧博 * Create 2026/8/3 10:00 * Version 1.0 */ConfigurationpublicclassRestTemplateConfig{/** * 通过 RestTemplateBuilder 构造 RestTemplate 并注册到 IOC 容器 * Spring Boot 会自动注入 RestTemplateBuilder 实例 */BeanpublicRestTemplaterestTemplate(RestTemplateBuilderbuilder){returnbuilder// 设置连接超时时间.connectTimeout(Duration.ofSeconds(5))// 设置读取超时时间.readTimeout(Duration.ofSeconds(10)).build();}}AutowiredprivateRestTemplaterestTemplate;GetMapping(/test)publicvoidtest(){restTemplate.getForObject(https://www.baidu.com,String.class);}JDBC当整合 JDBC 场景后我们最关心的指标是 DataSource 的状态和指标比如数据源中的连接池大小、当前活跃的线程、最大线程数量等。当引入 spring-boot-starter-jdbc 场景启动器并配置数据源的信息后再次访问 /actuator/metrics即可看到返回的监控指标中多出一组 hikaricp 开头和一组 jdbc 开头的指标这些就是 JDBC 场景下我们可以获取的监控指标信息。Redis与整合 JDBC 场景类似当整合 Spring Data Redis 场景后默认 Spring Boot 选择使用 Lettuce 作为 Redis 的连接工具所以 Actuator 的监控指标中会多出一组 lettuce 开头的指标通过它们可以得知 Lettuce 的相关监控信息。