SpringBoot应用监控解析:Actuator实现原理

Spring Boot 应用监控解析在企业应用中除了要了解 Spring Boot 业务的单元测试、集成测试等功能使用外 , 在上线之后还需要对线上应用的各项指标(比如 , CPU 利用率、内存利用率、数据库连接是否正常、用户请求数据等)进行监控和运维 。
在传统项目中 , 这些监控和运维往往需要借助其他第三方的工具实现 , 而在 Spring Boot 中提供了 spring-boot-actuator 模块 , 可以通过 http、jmx、 ssh、telnet 等形式来监控和管理生产环境 。 同时 , Spring Boot 还提供了灵活的自定义接口用来扩展监控的功能 。
本章不会过多涉及 actuator 基础使用 , 而是重点绍 actuator 的自动配置及实现原理 。
Actuator 简介Spring Boot Actuator 提供了应用的审计(Auditing) 、健康(Health) 状态信息、数据采集(Metrics gathering)统计等监控运维的功能 。 同时 , 还提供了可扩展的端点(Endpoint) 功能 , 方便使用者进行自定义监控指标 。 默认情况下 , 这些信息以 JSON 的数据格式呈现 , 用户也可以使用 Spring BootAdmin 项目进行界面管理 。
Spring Boot Actuator 通常使用下面的 starter 引入 。
org. springframework . bootspring- boot -starter-actuator通过上面的 starter 会间接引入以下两个依赖 。
org. springframework . bootspring- boot- actuatororg. springfr amework . bootspring- boot- actuator autoconfigure在 Spring Boot 项目中 , spring-boot-actuator 作为一 个独立的项目 , 提供 Actuator 的核心功能 , spring-boot-actuator-autoconfigure 提供 了 Actuator 自动配置的功能 。
引入 spring-boot- starter-actuator 之后 , 默认情况下便开启了监控功能 , 我们可通过http://localhost:8080/actuator 来查看默认支持的监控信息 。
通过浏览器访问 , 上述请求地址 , 默认返回结果信息如下 。
{_links":"self": {"href": "http://localhost: 8080/actuator","templated": false} , "health-path": {"href": "http://localhost: 8080/ actuator/health/{*path}" , "templated": true"health": {"href": "http://localhost :8080/ actuator/health" ,"templated": false} , "info": {"href": "http://localhost : 8080/actuator/info","templated": false}}}默 认 情 况 下,上 述 返 回 信 息 对 应 的 监 控 处 于 开 启 状 态,使 用 者 也 可 以 在application.properties 中进行配置来禁用或开启具体的监控 。
#启用 shutdownmanagement . endpoint . shutdown. enabled=true#全部禁用management . endpoints . enabled-by-default=falses 启用 infomanagement . endpoint. info. enabled=true了解了监控的基本集成和配置 , 下面重 点讲解一下 Actuator 的自动配置及原理 。
Actuator 自动配置关于 Actuator 自动配置 , 我们以 HealthEndpoint 为例 ,了解一下在 SpringBoot 中是如何进行自动配置并获取到对应的监控信息的 。 同时 , 也简单了解一下 , 这些自动配置组件获得的信息是如何通过 URL 访问展示出来的 。
HealthEndpoint 自动配置
Actuator 的自动配置默认没有在 Spring Boot Autoconfigure 中集成 , 而是通过独立的spring-boot actuator- autoconfigure 项目来实现 。 在该项目中实现了大量关于不同组件监控的自动配置 。
在继续本章学习或将 Spring Boot 版本升级之前 , 需提醒读者注意对照所使用的 Spring BootActuator 的版本 , 因为从 Spring Boot 2.0.x 到 2.2.x 版本 , 关于 Actuator 及其自动配置的实现代码发生了比较大的变动 。
本节以监控点(Health) 相关的自动配置源码及实现原理为例进行讲解,步及的自动配置类有HealthEndpointAutoConfigurationHealthEndpointConfiguration 等 。 关于 Health 的相关类均位于 org.springframework.boot.actuate .autoconfigure.health 包下 。
Actuator 的 自 动 配 置 类 的 注 册 都 是 在 spring-boot-actuator-autoconfigure 项 目 下 的spring.factories 中完成的 。 HealthEndpointAutoConfiguration 也不例外 , 源码如下 。
@Configuration(proxyBeanMethods = false)@ConditionalOnAvailableEndpoint (endpoint = HealthEndpoint . class)@EnableConfigurationProperties@Import({ LegacyHealthEndpointAdaptersConfiguration. class, LegacyHealthEndpoint-CompatibilityConfiguration. class,HealthEndpointConfiguration. class, ReactiveHealthEndpointConfiguration. class,HealthEndpointWebExtens ionConfiguration. class, HealthEndpointReactive-WebExtens ionConfiguration.class })public class HealthEndpointAutoConfiguration {@Bean@SuppressWarnings("deprecation")HealthEndpointProperties healthEndpointProperties (HealthIndicatorProperties healthIndicatorProperties) {HealthEndpointProperties healthEndpointProperties = new HealthEndpoint -Properties();healthEndpointProperties . getStatus(). getOrder(). addAll(healthIndicator-Properties . get0rder());healthEndpointProperties . getStatus(). getHttpMapping() . putAll(healthIn-dicatorProperties . getHttpMapping());return healthEndpointProperties;}}