Micrometer 是一个多平台的监控库,支持多种度量后端(如 Prometheus、Grafana、Datadog 等)。不同的度量后端和库提供的度量内容可能会有所不同,但一些常见的内置度量包括:
常见的 Micrometer 度量
-
JVM 度量
- JVM 内存:
jvm.memory.used
:JVM 使用的内存量。jvm.memory.max
:JVM 最大内存量。jvm.memory.committed
:JVM 已提交的内存量。
- JVM 垃圾回收:
jvm.gc.pause
:GC 暂停时间。jvm.gc.live.data.size
:GC 活跃数据大小。
- JVM 线程:
jvm.threads.count
:当前线程数。jvm.threads.states
:线程状态分布。
- JVM 内存:
-
系统级度量
- CPU 使用率:
system.cpu.usage
:系统 CPU 使用率。
- 文件描述符:
system.files.open
:系统中打开的文件描述符数量。
- 系统负载:
system.load.average
:系统负载平均值。
- CPU 使用率:
-
应用程序级度量
- HTTP 请求:
http.server.requests
:HTTP 请求的总量和响应时间。
- 数据库:
db.query.count
:数据库查询的数量。db.query.time
:数据库查询的耗时。
- 自定义度量:
- 可以自定义度量,记录应用程序中的各种业务指标,例如处理时间、成功率等。
- HTTP 请求:
度量后端支持
-
Prometheus
- 常见 Prometheus 度量:
http_server_requests_seconds_count
:HTTP 请求计数。http_server_requests_seconds_sum
:HTTP 请求总耗时。jvm_memory_bytes_used
:JVM 内存使用量。
- 常见 Prometheus 度量:
-
Datadog
- 常见 Datadog 度量:
system.cpu.idle
:系统 CPU 空闲率。system.memory.used
:系统内存使用量。app.custom_metric
:自定义应用程序指标。
- 常见 Datadog 度量:
-
StatsD
- 常见 StatsD 度量:
app.requests.count
:应用程序请求计数。app.response.time
:应用程序响应时间。
- 常见 StatsD 度量:
-
自定义度量示例
这是一个实际的示例,演示如何注册一个返回磁盘剩余空间的 Gauge
:
-
import io.micrometer.core.instrument.Gauge; import io.micrometer.core.instrument.Metrics; import java.io.File; import java.util.function.Supplier; public class DiskSpaceMetrics { public static void main(String[] args) { // Create a Supplier that returns the disk free space in bytes Supplier<Number> diskFreeSpaceSupplier = () -> { File file = new File("/"); // Root directory return file.getFreeSpace(); // Return free space in bytes }; // Register the Gauge with Metrics.globalRegistry registerDiskFreeSpaceGauge(diskFreeSpaceSupplier); // Check the value for demonstration Gauge gauge = Metrics.globalRegistry.find("disk.free.space").gauge(); if (gauge != null) { System.out.println("Disk free space: " + gauge.value() + " bytes"); } else { System.out.println("Gauge not found."); } } public static void registerDiskFreeSpaceGauge(Supplier<Number> supplier) { Gauge.builder("disk.free.space", supplier) .description("Disk free space") .baseUnit("bytes") .register(Metrics.globalRegistry); } }