5.1 SpringBoot-Actuator介绍
Actuator是Spring Boot 的监控系统健康情况的工具,可帮将应用程序推送到生产环境时对其进行监控和管理,可以选择使用 HTTP 端点或 JMX 来管理和监视您的应用程序
由spring-boot-starter-actuator 提供很多监控所需的接口,可以对应用系统进行配置查看,例如自动化配置信息、创建的Spring beans信息、系统环境变量的配置信息等
Actuator 参考文档:Spring Boot Actuator: Production-ready Features
5.2 Endpoints 介绍
Spring Boot 提供了 Endpoints (端点)给外部与应用程序进行访问和交互
例如health端点可以提供基本的应用程序健康信息,映射到/actuator/health
默认情况下,除shutdown之外的所有端点都启用了,可使用management.endpoint.<id>.enabled属性配置端点的启动,例如启用shutdown端点management.endpoint.shutdown.enabled=true
Sensors类Endpoints
名称 | 说明 |
autoconfig | 提供 SpringBoot 的自动配置报告,告诉我们哪些自动配置模块生效了,以及哪些 没有生效,原因是什么 |
beans | 给出当前应用的容器中所有 bean 的信息 |
configprops | 对现有容器中的 ConfigurationProperties 提供的信息进行“消毒”处理后给出汇总信息 |
info | 提供当前 SpringBoot 应用的任意信息 |
health | 针对当前 SpringBoot 应用的健康检查用的 endpoint |
env | 关于当前 SpringBoot 应用对应的 Environment 信息 |
metrics | 显示应用多样的度量信息 |
trace | 当前 SpringBoot 应用的 trace 信息 |
mapping | 如果是基于 SpringMVC 的 Web 应用,将给出 @RequestMapping 相关信息 |
Actuator类Endpoints
名称 | 说明 |
shutdown | 用于关闭当前 SpringBoot 应用的 endpoint |
dump | 用于执行线程的 dump 操作 |
5.3 Actuator原理
Spring Boot Actuator 提供了一些 Actuator Endpoints端点用于应用程序交互,比如在项目出错时,自动报警、监控内容况等,Actuator原理可以归结为执行器端点的实现原理
- 将端点适配委托给MVC层策略端点(MvcEndpoint)
通过端点MVC适配器(EndpointMvcAdapter),将端点暴露为HTTP请求方式的MVC端点
分别使用端点自动配置(EndpointAutoConfiguration)和MVC方式暴露端点的配置(EndpointWebMvcManagementContextConfiguration)
注入端点组件和端点处理程序映射组件、MVC端点注册表组件、MVC端点组件
其中,端点处理程序映射(EndpointHandlerMapping)通过SpringMVC方式来暴露MVC端点
以上原理参考:Spring Boot之执行器端点(Actuator Endpoint)实现剖析
使用Actuator
- 健康检查
- 审计
- 统计
- 监控
5.4 Actuator依赖引入
要实现SpringBoot应用程序启用Actuator Endpoints,需要在构建配置文件中添加spring-boot-starter-actuator
依赖项
Pom文件添加依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
使用HTTP调用
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
例如导入Actuator依赖后,想要监控或操作Actuator的所有功能,将所有的端点开放,访问http://localhost:8080/actuator
查看暴露出来的端点
server: port: 8080 management: endpoints: web: exposure: include: "*" # 暴露所有端点