SpringCloud相关组件——健康监控!
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数据,这里的例子为了简便,直接返回基本数据类型,得到结果如下。
相关文章
- SpringBoot注解 & 拦截器 & 反射
- 如何批量获取指定歌手的音乐(批量搜索歌曲)
- 系列:第五篇—接口发生异常如何统一处理
- Spring Cloud Hystrix熔断与负载均衡深度解析:原理实践与避坑指南
- Spring WebFlux核心处理组件DispatcherHandler
- SpringCloud相关组件——健康监控!
- springboot中ServletComponentScan注解的作用
- JavaEE概述总结:Servlet生命周期+JSP内置对象
- Spring Boot3中解决跨域问题的五种常用方法?
- Java中拦截器和过滤器的比较(java 拦截器和过滤器)