当前位置: 首页 > 科技观察

使用Actuator实现SpringBoot应用监控

时间:2023-03-13 12:28:36 科技观察

本文转载请联系架构师京津公众号。我们知道SpringBoot提供了Actuator组件,方便我们对应用进行监控和维护。接下来,我们来介绍一下Actuator到底是什么?如何在SpringBoot项目中快速集成Actuator?一、执行器简介1、什么是执行器?Actuator是SpringBoot提供的一个应用系统监控的开源框架。它是SpringBoot系统的一部分。非常重要的组成部分。它可以轻松监控和管理应用程序。支持通过各种REST接口、远程shell、JMX收集应用程序的运行状态。2.端点(Endpoint)Actuator的核心是端点(Endpoint),用于监控和提供应用信息。SpringBoot提供的spring-boot-actuator组件内置了很多Endpoint(health、info、bean、metrics、httptrace、shutdown等),每个endpoint都可以启用和禁用。Actuator还允许我们扩展自己的端点。通过JMX或HTTP公开自定义端点。默认情况下,Actuator会将自定义端点的ID映射到以/actuator为前缀的URL。例如,health端点默认映射到/actuator/health。这样就可以通过HTTP的形式获取到自定义端点的数据。Actuator还可以集成外部应用监控系统,如Prometheus、Graphite、DataDog、Influx、Wavefront、NewRelic等。这些系统提供了很好的仪表板、图标、分析、告警等功能,让你轻松监控通过统一的界面管理您的应用系统。对于中小型团队实施微服务来说,这无疑是一种快速高效的解决方案。2.SpringBoot集成Actuator在SpringBoot项目中集成Actuator非常简单。只需要在项目中添加spring-boot-starter-actuator组件即可自动启动应用监控功能。首先,创建一个SpringBoot项目,添加spring-boot-starter-actuator依赖:>org.springframework.bootspring-boot-starter-actuator如上例所示,我们添加了actuator和web组件。除了监控web系统,spring-boot-starter-actuator还可以监控后台服务等SpringBoot应用。然后,修改配置文件,配置Actuator端点#打开所有监控点management.endpoints.web.exposure.include=*management.endpoint.health.show-details=always最后,启动项目,在浏览器/localhost:8080/actuator,我们可以看到它返回了Actuator提供的各种数据接口信息。Actuator提供了丰富的数据接口,包括/health、/env、/metrics等,接下来我们请求其中一个地址/actuator/health,查看接口返回的详细信息。如上图所示,/health接口返回系统详细的健康状态信息,包括系统状态(UP表示正常)、磁盘使用情况等信息。3.自定义端点SpringBoot支持自定义端点。你只需要在我们定义的类中使用@Endpoint、@JmxEndpoint、@WebEndpoint等注解实现相应的方法,就可以在Actuator中定义自定义端点。从SpringBoot2.x版本开始,Actuator支持CRUD(增删改查)模型,不再支持旧的RW(read/write)模型。我们可以根据三种策略进行定制:使用@Endpoint注解,同时支持JMX和HTTP方式。使用@JmxEndpoint注解只支持JMX技术。使用@WebEndpoint注释,仅支持HTTP。编写自定义端点类非常简单。首先需要在类的前面使用@Endpoint注解,然后在类的方法上使用@ReadOperation、@WriteOperation或@DeleteOperation(对应HTTP中的GET、POST、DELETE)等注解来获取和设置端点信息。下面我们创建一个自定义端点来获取系统的当前时间。首先创建一个自定义端点类SystemTimeEndpoint,使用@Endpoint注解声明端点ID,还需要使用@Component注解将这个类交给SpringBoot管理。示例代码如下:/**自定义端点类*@Endpoint//表示这是一个自定义的事件端点类*Endpoint中有一个id//是设置端点的URL路径**/@Endpoint(id="systemtime")//endpoint路径不要和系统自带的重合@ComponentpublicclassSystemTimeEndpoint{//一般endpoint是一个对象,或者json返回的格式,所以我们通常定义一个MAP端点的返回形式//通过ReadOperation//访问地址基于前缀+端点ID///actuator/systemtimeprivateStringformat="yyyy-MM-ddHH:mm:ss";@ReadOperation//显示监控指标publicMapinfo(){Mapinfo=newHashMap<>();info.put("系统","数据管理服务");info.put("memo","系统当前时间端点");info.put("datetime",newSimpleDateFormat(format).format(newDate()));返回信息;}//指标动态修改@WriteOperation//指标动态修改就是修改publicvoidsetFormat(Stringformat){this.format=format;}}在上面的例子中,我们通过@Endpoint注解定义了一个自定义端点,参数id是自定义端点的唯一标识和访问路径,必须是唯一的,不能重复。完成这些配置后,您可以访问http://127.0.0.1:8080/actuator/systemtime端点,如下图所示。最后,上面介绍了Actuator到底是什么,以及如何在SpringBoot项目中快速集成Actuator。Actuator是SpringBoot提供的一个非常重要的应用监控组件,希望大家能够熟悉。后面会介绍一个完整的SpringBoot应用监控平台的搭建。敬请关注。