SpringCloud相关组件——健康监控!

SpringCloud相关组件——健康监控!

编程文章jaq1232025-07-28 16:57:526A+A-

SpringCloud相关组件——健康监控

在生产环境中,我们通常会为服务添加各种监控组件或日志追踪等功能,看了Hystrix的监控功能是不是觉得很好用?除了Hystrix,我们还能对微服务进行哪些监控?下面了解一下其他的监控组件。

Spring Boot为我们提供了一个十分便捷的框架:Spring BootActuator。Actuator提供了几个生产级的服务,用于监控应用程序的运行信息,如运行状态、指标、环境变量、配置信息等,只要简单的几个步骤就可以使用。

Actuator本身的用法也十分简单,只需引入Actuator的依赖包
spring-boot-starter-actuator即可,然后启动服务。假设本地的端口 还 是 8080 , 通 过 HTTP 的 方 式 在 浏 览 器 中 访 问 地 址
http://localhost:8080/actuator,得到JSON数据如下。

其中,每个地址都被称为一个Endpoint(端点),Actuator提供了很多端点的实现,并且提供了JMX和Web两种接口方式。其中,JMX的接口几乎暴露了所有的端点,而Web的接口默认只开启health和info的端点,我们可以通过配置开启和关闭这些端点,具体如下。

通过在application.yml中添加如上配置,在Web接口上增加了env、metrics、beans等端点,移除了info的端点,如果想配置开启全部 的 端 点 , 也 可 以 配 置 include:* , 在 重 启 服 务 后 , 再 次 访想问/actuator的地址来验证配置是否生效,得到的JSON数据如下。

那么,这些端点是什么意思,监控了哪些信息,还有哪些端点呢?下面就为大家展示一些常用的端口说明。

(1)auditevents:安全相关的统计信息,如用户登录、注销等。(2)beans:返回所有BeanFactory使用的Bean。

(3)conditions:之前版本是autoconfig,展示所有的自动化配置信息。

(4)configprops:所有@ConfigurationProperties的Bean。

(5)env:应用的环境属性,可以通过/env/{name}进行过滤。

(6)flyway:flyway数据迁移的信息,flyway是一个数据库管理和迁移的工具。

(7)health:应用的健康信息总览。

(8)info:应用的一般信息,也可以是自定义数据。

(9)Liquibase:同flyway,是另一个数据库管理工具。

(10)Metrics:应用程序的指标信息,包括通用指标和自定义指标。

(11)Mappings:应用的Mapped的URL信息,包括Servlet和Filter的信息。

(12)Scheduledtasks:应用程序中计划任务的详细信息。

(13)Sessions:正在使用的Spring Session详细信息。

(14)Shutdown:关闭应用程序,不推荐使用,默认是关闭。

(15)threaddump:执行一个JVM线程dump。

(16)heapdump:从我们的应用程序使用的JVM构建,并返回当前JVM的堆快照信息(二进制格式)。

(17)logfile:应用程序日志信息。

(18)loggers:查询和修改应用程序的日志记录级别。

虽然Spring Boot Actuator提供了大量的内置端口,可以满足大部分的服务健康监控的需求,但实际项目中会遇到各种需求,有时想要自定义监控逻辑,但又不想从零全部自己实现监控的代码,这时该如何处理?Actuator也提供了自定义端点的方式,只需自己实现具体的监控业务代码即可。

例如,统计一个通过ID获取用户的API的请求次数,先定义一个端点来做统计这件事情,代码如下。

使用@Endpoint注解来声明这是一个端点,并且定义了端点的ID,为了简便就不实现持久化的存储了,仅使用AtomicInteger来做请求次数的统计,提供record方法去记录请求次数,通过@ReadOperation注解 提 供 GET 方 法 的 返 回 , Actuator 还 提 供 了 @WriteOperation 和@DeleteOperation注解,与HTTP的方法映射关系如下。

@ReadOperation ←→ GET

@WriteOperation ←→ POST

@DeleteOperation ←→ DELETE使用@ReadOperation,然后在对应的Controller或WebFilter中做记录即可。例如,这里将计数方法添加到Controller中,代码如下。

然后需要在配置文件中配置端口的ID,具体如下。

在启动服务后,先通过浏览器调用几次getById的接口,最后访问地址
http://localhost:8080/actuator/getuserbyid,得到我们想要的统计。当然,通常我们会返回一些对象,如Map,这样可以得到JSON数据,这里的例子为了简便,直接返回基本数据类型,得到结果如下。

点击这里复制本文地址 以上内容由jaq123整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

苍茫编程网 © All Rights Reserved.  蜀ICP备2024111239号-21