有道无术,术尚可求,有术无道,止于术。
本系列Spring Boot版本2.7.0
前言
在IT监控系统简介一文中,介绍过一个成熟的监控系统包含了系统层、中间件及基础设施类、应用层、业务层四个层面的监控,并且包含指标数据采集、指标数据存储、指标数据趋势分析及可视化、告警等功能。
Metrics 翻译过来是量度;指标 的意思,是指随时间推移产生的一些与监控相关的可聚合数据点。
接下里我们学习下Spring Boot 是如何进行应用层面指标采集的。
指标端点
Spring Boot 提供了应用层指标监控,可以诊断性检查应用程序收集的指标。
有了指标数据,就可以实现数据存储、可视化查询、告警,当然这些需要依赖于第三方监控系统。 访问metrics 端点,可以看到一些指标项: 访问具体的指标项可获取到对应的指标数据:
Micrometer
可以看到spring-boot-starter-actuator 默认是引入了一个Micrometer 框架: Micrometer 是一个用于基于 JVM 的应用程序的指标检测库。旨在为指标收集活动增加很少甚至没有开销,同时最大限度地提高指标工作的可移植性。
有了指标检测和收集,就可以对接应用监控系统,将数据对接入监控系统进行展示。
Spring Boot Actuator 为Micrometer 提供依赖管理和自动配置,支持众多监控系统包括:
-
AppOptics -
Atlas -
Datadog -
Dynatrace -
Elastic -
Ganglia -
Graphite -
Humio -
Influx -
JMX -
KairosDB -
New Relic -
Prometheus -
SignalFx -
Simple (in-memory) -
Stackdriver -
StatsD -
Wavefront
Prometheus+Grafana监控Spring Boot
支持的指标
Spring Boot 默认提供了很多指标。
应用程序启动指标
自动配置公开应用程序启动时间指标:
访问/actuator/metrics/application.started.time :
{
"name": "application.started.time",
"description": "Time taken (ms) to start the application",
"baseUnit": "seconds",
"measurements": [
{
"statistic": "VALUE",
"value": 2.826
}
],
"availableTags": [
{
"tag": "main.application.class",
"values": [
"org.pearl.app.App1"
]
}
]
}
系统指标
自动配置通过使用核心 Micrometer 类启用系统指标。系统指标以system.、process. 和disk. 计量名称发布。
提供了以下系统指标:
-
CPU 指标 -
文件描述符指标 -
正常运行时间指标 -
可用磁盘空间
可用指标如下:
{
"names": [
"disk.free",
"disk.total",
"process.cpu.usage",
"process.start.time",
"process.uptime",
"system.cpu.count",
"system.cpu.usage",
]
}
访问/actuator/metrics/disk.total :
{
"name": "disk.total",
"description": "Total space for path",
"baseUnit": "bytes",
"measurements": [
{
"statistic": "VALUE",
"value": 3.32862058496E11
}
],
"availableTags": [
{
"tag": "path",
"values": [
"E:\\TD\\project\\my\\study-demo\\."
]
}
]
}
JVM 指标
JVM 指标以jvm. 计量名称发布。提供了以下 JVM 指标:
-
各种内存和缓冲池细节 -
垃圾回收相关统计 -
线程利用率 -
加载和卸载的类数
可用指标如下:
{
"names": [
"jvm.buffer.count",
"jvm.buffer.memory.used",
"jvm.buffer.total.capacity",
"jvm.classes.loaded",
"jvm.classes.unloaded",
"jvm.gc.live.data.size",
"jvm.gc.max.data.size",
"jvm.gc.memory.allocated",
"jvm.gc.memory.promoted",
"jvm.gc.overhead",
"jvm.gc.pause",
"jvm.memory.committed",
"jvm.memory.max",
"jvm.memory.usage.after.gc",
"jvm.memory.used",
"jvm.threads.daemon",
"jvm.threads.live",
"jvm.threads.peak",
"jvm.threads.states",
]
}
访问/actuator/metrics/jvm.threads.live :
{
"name": "jvm.threads.live",
"description": "The current number of live threads including both daemon and non-daemon threads",
"baseUnit": "threads",
"measurements": [
{
"statistic": "VALUE",
"value": 25.0
}
],
"availableTags": []
}
日志记录器指标
自动配置为 Logback 和 Log4J2 启用事件指标。
访问/actuator/metrics/logback.events :
{
"name": "logback.events",
"description": "Number of trace level events that made it to the logs",
"baseUnit": "events",
"measurements": [
{
"statistic": "COUNT",
"value": 11.0
}
],
"availableTags": [
{
"tag": "level",
"values": [
"warn",
"trace",
"debug",
"error",
"info"
]
}
]
}
定时任务指标
检测所有的ThreadPoolTaskExecutor 、ThreadPoolTaskScheduler Bean对象,度量标签来自于线程池的 Bean 名称。
Spring MVC 指标
自动配置启用对Spring MVC 控制器和功能处理程序处理的所有请求的进行检测。默认情况下,生成的指标名称为 http.server.requests. 可以通过设置management.metrics.web.server.request.metric-name 属性来自定义名称。
比如访问/actuator/metrics/http.server.requests :
{
"name": "http.server.requests",
"description": null,
"baseUnit": "seconds",
"measurements": [
{
"statistic": "COUNT",
"value": 34.0
},
{
"statistic": "TOTAL_TIME",
"value": 0.7422510000000001
},
{
"statistic": "MAX",
"value": 0.0
}
],
"availableTags": [
{
"tag": "exception",
"values": [
"None"
]
},
{
"tag": "method",
"values": [
"GET"
]
},
{
"tag": "uri",
"values": [
"/actuator/metrics/{requiredMetricName}",
"/actuator/metrics",
"/app1/test"
]
},
{
"tag": "outcome",
"values": [
"CLIENT_ERROR",
"SUCCESS"
]
},
{
"tag": "status",
"values": [
"404",
"200"
]
}
]
}
当然也支持Spring WebFlux 。
Tomcat 指标
Tomcat 指标以tomcat. 计量名称发布。
"tomcat.sessions.active.current",
"tomcat.sessions.active.max",
"tomcat.sessions.alive.max",
"tomcat.sessions.created",
"tomcat.sessions.expired",
"tomcat.sessions.rejected"
数据源指标
DataSource数据源指标使用前缀为jdbc.connections. ,检测会生成表示池中当前活动、空闲、允许的最大连接数和允许的最小连接数。
"hikaricp.connections",
"hikaricp.connections.acquire",
"hikaricp.connections.active",
"hikaricp.connections.creation",
"hikaricp.connections.idle",
"hikaricp.connections.max",
"hikaricp.connections.min",
"hikaricp.connections.pending",
"hikaricp.connections.timeout",
"hikaricp.connections.usage",
"jdbc.connections.max",
"jdbc.connections.min",
其他指标
其他还有很多指标,这里就以一一赘述了,如下:
- Jersey Server
- HTTP Client
- Cache
- Spring GraphQL
- Hibernate
- Spring Data Repository
- RabbitMQ
- Spring Integration
- Kafka
- MongoDB
- Jetty
- Redis
总结
Spring Boot 使用Micrometer 框架进行指标检测,可以采集CPU、JVM、磁盘、数据库、缓存等指标,然后可以对接第三方监控系统,进行数据存储和可视化UI。
|