基于 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------
1jvm.memory.maxJVM 最大内存---
2jvm.memory.committedJVM 可用内存展示并监控堆内存和 Metaspace重要
3jvm.memory.usedJVM 已用内存展示并监控堆内存和 Metaspace重要
4jvm.buffer.memory.usedJVM 缓冲区已用内存---
5jvm.buffer.count当前缓冲区数---
6jvm.threads.daemonJVM 守护线程数显示在监控页面-
7jvm.threads.liveJVM 当前活跃线程数显示在监控页面;监控达到阈值时报警重要
8jvm.threads.peakJVM 峰值线程数显示在监控页面-
9jvm.classes.loaded加载 classes 数---
10jvm.classes.unloaded未加载的 classes 数---
11jvm.gc.memory.allocatedGC 时,年轻代分配的内存空间---
12jvm.gc.memory.promotedGC 时,老年代分配的内存空间---
13jvm.gc.max.data.sizeGC 时,老年代的最大内存空间---
14jvm.gc.live.data.sizeFullGC 时,老年代的内存空间---
15jvm.gc.pauseGC 耗时显示在监控页面-
---TOMCAT------
16tomcat.sessions.createdTomcat 已创建 session 数---
17tomcat.sessions.expiredTomcat 已过期 session 数---
18tomcat.sessions.active.currentTomcat 活跃 session 数---
19tomcat.sessions.active.maxTomcat 最多活跃 session 数显示在监控页面,超过阈值可报警或者进行动态扩容重要
20tomcat.sessions.alive.max.secondTomcat 最多活跃 session 数持续时间---
21tomcat.sessions.rejected超过 session 最大配置后,拒绝的 session 个数显示在监控页面,方便分析问题-
22tomcat.global.error错误总数显示在监控页面,方便分析问题-
23tomcat.global.sent发送的字节数---
24tomcat.global.request.maxRequest 最长时间---
25tomcat.global.request全局 Request 次数和时间---
26tomcat.global.received全局 Received 次数和时间---
27tomcat.servlet.requestServlet 的请求次数和时间---
28tomcat.servlet.errorServlet 发生错误总数---
29tomcat.servlet.request.maxServlet 请求最长时间---
30tomcat.threads.busyTomcat 繁忙线程显示在监控页面,据此检查是否有线程夯住-
31tomcat.threads.currentTomcat 当前线程数(包括守护线程)显示在监控页面重要
32tomcat.threads.config.maxTomcat 配置的线程最大数显示在监控页面重要
33tomcat.cache.accessTomcat 读取缓存次数---
34tomcat.cache.hitTomcat 缓存命中次数---
---CPU...------
35system.cpu.countCPU 数量---
36system.load.average.1mLoad Average超过阈值报警重要
37system.cpu.usage系统 CPU 使用率---
38process.cpu.usage当前进程 CPU 使用率超过阈值报警-
39http.server.requestsHTTP 请求调用情况显示 10 个请求量最大,耗时最长的 URL;统计非 200 的请求量重要
40process.uptime应用已运行时间显示在监控页面-
41process.files.max允许最大句柄数配合当前打开句柄数使用-
42process.start.time应用启动时间点显示在监控页面-
43process.files.open当前打开句柄数监控文件句柄使用率,超过阈值后报警重要

监控 Dashboard 可使用 Grafana 进行可视化展示。

说明:本文内容基于 Spring Boot 2.0 及 Oracle JDK 9 环境编写。随着版本迭代,部分指标名称或配置方式可能有所调整,请以官方最新文档为准。