5:SpringBoot-Actuator-Java Spring

181 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第25天,点击查看活动详情

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: "*" # 暴露所有端点