前言
去年我们项目做了微服务1.0的架构转型,但是服务监控这块却没有跟上。这不,最近我就被分配了要将我们核心的微服务应用全部监控起来的任务。我们的微服务应用都是SpringBoot 应用,因此就自然而然的想到了借助Spring Boot 的Actuator 模块。(没吃过猪肉总听过猪叫见过猪跑吧🤪)。
本篇是我在完成这个工单之后,对Spring Boot Actuator模块 学习应用的总结。在本篇文章中,你可以学习到:
Spring Boot Actuator 的快速使用入门
Spring Boot Actuator 的一些重要的endpoints的介绍
如何通过Actuator 模块实时查看当前应用的线程 dump信息
如何通过Actuator 模块实时查看当前应用的堆信息
如何通过Actuator 模块实时修改当前应用的日志打印等级
...
之后我还会介绍:
TODO:SpringBoot 微服务应用集成Prometheus + Grafana实现监控告警
一、什么是 Spring Boot Actuator
Spring Boot Actuator 模块提供了生产级别的功能,比如健康检查,审计,指标收集,HTTP 跟踪等,帮助我们监控和管理Spring Boot 应用。这个模块是一个采集应用内部信息暴露给外部的模块,上述的功能都可以通过HTTP 和 JMX 访问。
因为暴露内部信息的特性,Actuator 也可以和一些外部的应用监控系统整合(Prometheus, Graphite, DataDog, Influx, Wavefront, New Relic等)。这些监控系统提供了出色的仪表板,图形,分析和警报,可帮助你通过一个统一友好的界面,监视和管理你的应用程序。
Actuator使用Micrometer与这些外部应用程序监视系统集成。这样一来,只需很少的配置即可轻松集成外部的监控系统。
Micrometer 为 Java 平台上的性能数据收集提供了一个通用的 API,应用程序只需要使用 Micrometer 的通用 API 来收集性能指标即可。Micrometer 会负责完成与不同监控系统的适配工作。这就使得切换监控系统变得很容易。
对比 Slf4j 之于 Java Logger 中的定位。
二、快速开始,创建一个Spring Boot Actuator Demo
我们先创建一个demo应用。
你可以通过Spring Boot CLI 创建:
spring init -d=web,actuator -n=actuator-demo actuator-demo
复制代码
或者通过Spring Initializr 创建:
对应的maven依赖:
...
org.springframework.boot
spring-boot-starter-actuator
...
对应的Gradle 依赖:
dependencies {
compile("org.springframework.boot:spring-boot-starter-actuator")
}
三、Endpoints 介绍
Spring Boot 提供了所谓的 endpoints (下文翻译为端点)给外部来与应用程序进行访问和交互。
打比方来说,/health 端点 提供了关于应用健康情况的一些基础信息。metrics 端点提供了一些有用的应用程序指标(JVM 内存使用、系统CPU使用等)。
这些 Actuator 模块本来就有的端点我们称之为原生端点。根据端点的作用的话,我们大概可以分为三大类:
应用配置类:获取应用程序中加载的应用配置、环境变量、自动化配置报告等与Spring Boot应用密切相关的配置类信息。
度量指标类:获取应用程序运行过程中用于监控的度量指标,比如:内存信息、线程池信息、HTTP请求统计等。
操作控制类:提供了对应用的关闭等操作类功能。
详细的原生端点介绍,请以官网为准,这里就不赘述徒增篇幅。
需要注意的就是:
每一个端点都可以通过配置来单独禁用或者启动
不同于Actuator 1.x,Actuator 2.x 的大多数端点默认被禁掉。Actuator 2.x 中的默认端点增加了/actuator前缀。默认暴露的两个端点为/actuator/health和 /actuator/info
四、端点暴露配置
我们可以通过以下配置,来