微服务健康监控之Spring Actuator是什么?
在微服务健康监控之Spring Actuator初体验中已经知道其是个开箱即用的工具——Actuator是spring boot的一个附加功能,可在应用程序生产环境时监视和管理应用程序。那么它有哪些功能,又是如何工作的呢?
Spring Boot Actuator提供了对单个 Spring Boot的监控,信息包含:应用状态、内存、线程、堆栈等等,比较全面的监控了Spring Boot应用的整个生命周期,其使用HTTP的各种请求来监管,审计,收集应用的运行情况——对于微服务管理十分有意义。
Actuator 监控分成两类:
原生端点:在应用程序里提供众多 Web 接口,通过它们了解应用程序运行时的内部状况。该端点可以细分为三类:
应用配置类:可以查看应用在运行期的静态信息,例如自动配置信息、加载的 springbean 信息、yml 文件配置信息、环境信息、请求映射信息;
度量指标类:主要是运行期的动态信息,例如堆栈、请求链、一些健康指标、metrics 信息 等;
操作控制类:主要是指 shutdown,用户可以发送一个请求将应用的监控功能关闭。
用户自定义端点:主要是指扩展性,用户可以根 据自己的实际应用,定义一些比较关心的指标,在运行期进行监控。
通过HTTP进行访问,就涉及到Actuator 的 REST 接口。Actuator 提供了以下接口:
HTTP 方法 | 路径 | 描述 |
GET | /auditevents | 显示应用暴露的审计事件 (比如认证进入、订单失败) |
GET | /beans | 描述应用程序上下文里全部的 Bean,以及它们的关系 |
GET | /conditions |
就是 1.0 的 /autoconfig ,提供一份自动配置生效的条件情 况, 记录哪些自动配置条件通过了,哪些没通过 |
GET | /configprops | 描述配置属性(包含默认值)如何注入Bean |
GET | /env | 获取全部环境属性 |
GET | /env/{name} | 根据名称获取特定的环境属性值 |
GET | /flyway | 提供一份 Flyway 数据库迁移信息 |
GET | /liquidbase | 显示Liquibase 数据库迁移的纤细信息 |
GET | /health | 报告应用程序的健康指标,这些值由 HealthIndicator 的实 现类提供 |
GET | /heapdump | dump 一份应用的 JVM 堆信息 |
GET | /httptrace | 显示HTTP足迹,最近100个HTTP request/repsponse |
GET | /info | 获取应用程序的定制信息,这些信息由info打头的属性提供 |
GET | /logfile | 返回log file中的内容(如果 logging.file 或者 logging.path 被 设置) |
GET | /loggers | 显示和修改配置的loggers |
GET | /metrics | 报告各种应用程序度量信息,比如内存用量和HTTP请求计 数 |
GET | /metrics/{name} | 报告指定名称的应用程序度量值 |
GET | /scheduledtasks | 展示应用中的定时任务信息 |
GET | /sessions | 如果我们使用了 Spring Session 展示应用中的 HTTP sessions 信息 |
POST | /shutdown | 关闭应用程序,要求endpoints.shutdown.enabled设置为 true |
GET | /mappings | 描述全部的 URI路径,以及它们和控制器(包含Actuator端 点)的映射关系 |
GET | /threaddump | 获取线程活动的快照 |
默认对外可以访问的端点有:
设置全部对外(management.endpoints.web.exposure.include=*)后,可以发现提供列表中的端点。下面介绍经常在项目中常用的属性:
1、health
health 主要用来检查应用的运行状态,这是使用最高频的一个监控点。通常使用此接口提醒应用实例的运行状态,以及应用不”健康“的原因,比如数据库连接、磁盘空间不够等。
默认情况下 health 的状态是开放的,添加依赖后启动项目,访问: http://localhost:port/actuator/health 即可看到应用的状态。 Spring Boot Actuator 有几个预定义的健康 指标比如 DataSourceHealthIndicator , DiskSpaceHealthIndicator , MongoHealthIndicator , RedisHealthIndicator 等,它使用这些健康指标作为健康检查的一 部分。
2、info
info 就是配置文件中以 info 开头的配置信息
3、beans
展示了 bean 的别名、类型、是否单例、类的地址、依赖等信息。
4、conditions
Spring Boot 的自动配置功能非常便利,但有时候也意味着出问题比较难找出具体的原因。使用 conditions 可以在应用运行时查看代码了某个配置在什么条件下生效,或者某个自动配置为什么 没有生效。
5、heapdump
返回一个 GZip 压缩的 JVM 堆 dump 启动示例项目,访问: http://localhost:port/actuator/heapdump 会自动生成一个 Jvm 的堆 文件 heapdump,我们可以使用 JDK 自带的 Jvm 监控工具 VisualVM 打开此文件查看内存快照。
6、mappings
描述全部的 URI 路径,以及它们和控制器的映射关系
7、threaddump
生成当前线程活动的快照,方便日常定位问题的时 查看线程的情况。 主要展示了线程名、线程ID、线程的状态、是否等待锁资源等信息。
8、shutdown
该接口默认关闭,需配置开启:management.endpoint.shutdown.enabled=true
注意访问提交方法为post。可以看到控制台中服务已经退出: