SpringBoot2.0 Actuator监控指标分析
基于 SpringBoot 2.0+ Actuator Metrics 的监控分析
引言
Spring Boot 2 在 spring-boot-actuator 中引入了 Micrometer,对 1.x 版本的 Metrics 进行了重构。此外,它支持对接的监控系统也更加丰富,包括 Atlas、Datadog、Ganglia、Graphite、Influx、JMX、NewRelic、Prometheus、SignalFx、StatsD、Wavefront 等。本文将以 Prometheus 为例,阐述 Spring Boot 2.0 的监控体系。
参考文档:Prometheus
Maven 依赖
在项目中引入以下依赖以启用 Actuator 及 Prometheus 支持:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>配置示例
在 application.properties 中配置暴露所有端点(生产环境建议按需配置):
management.endpoints.web.exposure.include=*Spring Boot 2.0 Actuator 监控指标分析
下表列出了常见的监控指标及其说明、监控状态与重要程度。
| 序号 | 参数 | 参数说明 | 是否监控 | 监控手段 | 重要度 |
|---|---|---|---|---|---|
| --- | JVM | --- | - | - | - |
| 1 | jvm.memory.max | JVM 最大内存 | - | - | - |
| 2 | jvm.memory.committed | JVM 可用内存 | 是 | 展示并监控堆内存和 Metaspace | 重要 |
| 3 | jvm.memory.used | JVM 已用内存 | 是 | 展示并监控堆内存和 Metaspace | 重要 |
| 4 | jvm.buffer.memory.used | JVM 缓冲区已用内存 | - | - | - |
| 5 | jvm.buffer.count | 当前缓冲区数 | - | - | - |
| 6 | jvm.threads.daemon | JVM 守护线程数 | 是 | 显示在监控页面 | - |
| 7 | jvm.threads.live | JVM 当前活跃线程数 | 是 | 显示在监控页面;监控达到阈值时报警 | 重要 |
| 8 | jvm.threads.peak | JVM 峰值线程数 | 是 | 显示在监控页面 | - |
| 9 | jvm.classes.loaded | 加载 classes 数 | - | - | - |
| 10 | jvm.classes.unloaded | 未加载的 classes 数 | - | - | - |
| 11 | jvm.gc.memory.allocated | GC 时,年轻代分配的内存空间 | - | - | - |
| 12 | jvm.gc.memory.promoted | GC 时,老年代分配的内存空间 | - | - | - |
| 13 | jvm.gc.max.data.size | GC 时,老年代的最大内存空间 | - | - | - |
| 14 | jvm.gc.live.data.size | FullGC 时,老年代的内存空间 | - | - | - |
| 15 | jvm.gc.pause | GC 耗时 | 是 | 显示在监控页面 | - |
| --- | TOMCAT | --- | - | - | - |
| 16 | tomcat.sessions.created | Tomcat 已创建 session 数 | - | - | - |
| 17 | tomcat.sessions.expired | Tomcat 已过期 session 数 | - | - | - |
| 18 | tomcat.sessions.active.current | Tomcat 活跃 session 数 | - | - | - |
| 19 | tomcat.sessions.active.max | Tomcat 最多活跃 session 数 | 是 | 显示在监控页面,超过阈值可报警或者进行动态扩容 | 重要 |
| 20 | tomcat.sessions.alive.max.second | Tomcat 最多活跃 session 数持续时间 | - | - | - |
| 21 | tomcat.sessions.rejected | 超过 session 最大配置后,拒绝的 session 个数 | 是 | 显示在监控页面,方便分析问题 | - |
| 22 | tomcat.global.error | 错误总数 | 是 | 显示在监控页面,方便分析问题 | - |
| 23 | tomcat.global.sent | 发送的字节数 | - | - | - |
| 24 | tomcat.global.request.max | Request 最长时间 | - | - | - |
| 25 | tomcat.global.request | 全局 Request 次数和时间 | - | - | - |
| 26 | tomcat.global.received | 全局 Received 次数和时间 | - | - | - |
| 27 | tomcat.servlet.request | Servlet 的请求次数和时间 | - | - | - |
| 28 | tomcat.servlet.error | Servlet 发生错误总数 | - | - | - |
| 29 | tomcat.servlet.request.max | Servlet 请求最长时间 | - | - | - |
| 30 | tomcat.threads.busy | Tomcat 繁忙线程 | 是 | 显示在监控页面,据此检查是否有线程夯住 | - |
| 31 | tomcat.threads.current | Tomcat 当前线程数(包括守护线程) | 是 | 显示在监控页面 | 重要 |
| 32 | tomcat.threads.config.max | Tomcat 配置的线程最大数 | 是 | 显示在监控页面 | 重要 |
| 33 | tomcat.cache.access | Tomcat 读取缓存次数 | - | - | - |
| 34 | tomcat.cache.hit | Tomcat 缓存命中次数 | - | - | - |
| --- | CPU... | --- | - | - | - |
| 35 | system.cpu.count | CPU 数量 | - | - | - |
| 36 | system.load.average.1m | Load Average | 是 | 超过阈值报警 | 重要 |
| 37 | system.cpu.usage | 系统 CPU 使用率 | - | - | - |
| 38 | process.cpu.usage | 当前进程 CPU 使用率 | 是 | 超过阈值报警 | - |
| 39 | http.server.requests | HTTP 请求调用情况 | 是 | 显示 10 个请求量最大,耗时最长的 URL;统计非 200 的请求量 | 重要 |
| 40 | process.uptime | 应用已运行时间 | 是 | 显示在监控页面 | - |
| 41 | process.files.max | 允许最大句柄数 | 是 | 配合当前打开句柄数使用 | - |
| 42 | process.start.time | 应用启动时间点 | 是 | 显示在监控页面 | - |
| 43 | process.files.open | 当前打开句柄数 | 是 | 监控文件句柄使用率,超过阈值后报警 | 重要 |
监控 Dashboard 可使用 Grafana 进行可视化展示。
说明:本文内容基于 Spring Boot 2.0 及 Oracle JDK 9 环境编写。随着版本迭代,部分指标名称或配置方式可能有所调整,请以官方最新文档为准。
版权声明:本文为原创文章,版权归 戴老师的博客 所有,转载请联系博主获得授权。
本文地址:https://1diff.fun/archives/springboot20-actuator-jian-kong-zhi-biao-fen-xi.html
如果对本文有什么问题或疑问都可以在评论区留言,我看到后会尽量解答。