20201029 Actuator监控

一,Spring Boot Actuator

将核心的微服务应用全部监控起来,借助Spring Boot 的Actuator 模块。

SpringBoot 微服务应用集成Prometheus + Grafana实现监控告警。

 

Spring Boot Actuator 模块提供了生产级别的功能,比如健康检查,审计,指标收集,HTTP 跟踪等,帮助我们监控和管理Spring Boot 应用。这个模块是一个采集应用内部信息暴露给外部的模块,上述的功能可以通过HTTP访问。

 

因为暴露内部信息的特性,Actuator 也可以和一些外部的应用监控系统整合(Prometheus, Graphite, DataDog, Influx, Wavefront, New Relic等)。这些监控系统提供了出色的仪表板,图形,分析和警报,可帮助你通过一个统一友好的界面,监视和管理你的应用程序。

 

Actuator使用Micrometer与这些外部应用程序监视系统集成。这样一来,只需很少的配置即可轻松集成外部的监控系统。

 

Micrometer 为 Java 平台上的性能数据收集提供了一个通用的 API,应用程序只需要使用 Micrometer 的通用 API 来收集性能指标即可。Micrometer 会负责完成与不同监控系统的适配工作。这就使得切换监控系统变得很容易。

spring-boot-starter-actuator

 

二,Endpoints 介绍

Spring Boot 提供了所谓的 endpoints (端点)给外部来与应用程序进行访问和交互。

/health 端点提供了关于应用健康情况的一些基础信息。

metrics 端点提供了一些有用的应用程序指标(JVM 内存使用、系统CPU使用等)。

这些Actuator 模块本来就有的端点我们称之为原生端点。根据端点的作用的话,我们大概可以分为三大类

1,应用配置类:获取应用程序中加载的应用配置、环境变量、自动化配置报告等与Spring Boot应用密切相关的配置类信息。

2,度量指标类:获取应用程序运行过程中用于监控的度量指标,比如:内存信息、线程池信息、HTTP请求统计等。

3,操作控制类:提供了对应用的关闭等操作类功能。

 

注意:

每一个端点都可以通过配置来单独禁用或者启动。

不同于Actuator 1.x,Actuator 2.x 的大多数端点默认被禁掉。Actuator 2.x 中的默认端点增加了/actuator前缀。默认暴露的两个端点为/actuator/health和 /actuator/info

 

三,端点暴露配置

可以通过配置,来配置通过 HTTP 访问的端点

management.endpoints.web.exposure.include=into,health 

可以打开所有的监控点

management.endpoints.web.exposure.include=*

也可以选择打开部分,"*" 代表暴露所有的端点,如果指定多个端点,用","分开

management.endpoints.web.exposure.exclude=beans,trace

Actuator 默认所有的监控点路径都在/actuator/*,当然如果有需要这个路径也支持定制。

management.endpoints.web.base-path=/minitor

设置完重启后,再次访问地址就会变成/minitor/*。

 

http://localhost:8080/actuator

查看暴露出来的端点

 

四、重要端点解析

1,/health

/health端点会聚合你程序的健康指标,来检查程序的健康情况。端点公开的应用健康信息取决于:

management.endpoint.health.show-details=always

当如上的组件有一个状态异常,应用服务的整体状态即为down。我们也可以通过配置禁用某个组件的健康监测。

 

2,/metrics端点

/metrics端点用来返回当前应用的各类重要度量指标,比如:内存信息、线程信息、垃圾回收信息、tomcat、数据库连接池等。

http://localhost:8000/actuator/metrics/

http://localhost:8000/actuator/metrics/{具体指标}

 

3,/loggers端点

/loggers 端点暴露了我们程序内部配置的所有logger的信息。我们访问/actuator/loggers可以看到。

/loggers端点我最想提的就是这个功能,能够动态修改你的日志等级。

如果在生产环境中,你想要你的应用输出一些Debug信息以便于你诊断一些异常情况,你你只需要按照上述方式就可以修改,而不需要重启应用。

 

4,/info端点

/info端点可以用来展示你程序的信息。我理解过来就是一些程序的基础信息。并且你可以按照自己的需求在配置文件application.properties中个性化配置。

 

5,/beans端点(特别有用)

/beans端点会返回Spring 容器中所有bean的别名、类型、是否单例、依赖等信息。

 

6,/heapdump端点

访问:http://localhost:8080/actuator/heapdump会自动生成一个 Jvm 的堆文件 heapdump。我们可以使用 JDK 自带的 Jvm 监控工具 VisualVM 打开此文件查看内存快照。

 

7,/threaddump端点(特别有用)

方便我们在日常定位问题的时候查看线程的情况。主要展示了线程名、线程ID、线程的状态、是否等待锁资源、线程堆栈等信息。

 

如何通过Actuator 模块实时查看当前应用的堆信息?

如何通过Actuator 模块实时查看当前应用的线程dump信息?

通过 VisualVM查看内存快照的方式

如果你有一个保存在本地的heap dump文件,在VisualVM中通过File > Load菜单项加载该文件。VisualVM能打开.hprof格式的heap dumps文件。打开后,heap dump作为主窗口的一个子标签页。

 

可以搜索查看某个类的实例数量,实例大小等等。当前某一时刻的内存快照。

 

浏览Heap Dump

VisualVM提供了一下可视化视图来浏览heap dumps:

Summary View(概述)

打开一个heap dump时,VisualVM默认显示“概述”标签页。概述视图显示了该heap dump的捕获环境和其他系统属性。

 

Classes View(类)

类视图显示了类列表和其对应的实例数量、所占比例。右击类名选择“Show in Instances View(在实例视图中显示)”即可查看指定类的实例列表。

点击列头可按指定列排序。可以使用类列表下方的“类名过滤器(Class Name Filter)”来过滤类,也可以通过右击一个类名选择“Show Only Subclasses(只显示子类)”来将显示结果限制为指定类的子类。

 

Instances View(实例数)

实例数视图显示了选中类的对象实例。在“实例(Instance)”栏中选中一个实例,右侧的“字段(Fields)”和“引用(References)”栏将显示该实例对应的字段和对它的引用。在引用栏中,右击一条并选择“显示最近的垃圾回收根节点(Show Nearest GC Root)”就会显示最近的垃圾回收根节点。