Java系统监控核心是采集JVM内存、线程、GC等指标并轻量暴露上报;通过Micrometer统一抽象、自动采集基础指标、HTTP端点暴露(如Prometheus)、轻量上报调试四步实现,兼顾标准化与落地简易性。

Java系统监控的核心是采集运行时关键指标,如JVM内存、线程、GC、类加载、CPU使用率等,再通过轻量方式暴露或上报,便于观测与告警。不依赖复杂中间件也能快速落地基础监控能力。
一、用Micrometer统一指标抽象
Micrometer是Java生态事实标准的指标门面,兼容Prometheus、Graphite、InfluxDB等多种后端。它将计数器(Counter)、计量器(Gauge)、定时器(Timer)、分布摘要(DistributionSummary)等概念标准化,让业务代码与监控后端解耦。
- 引入micrometer-core和对应注册器,例如micrometer-registry-prometheus
- 通过MeterRegistry注册指标,避免手动管理生命周期
- 对HTTP请求耗时、方法调用次数、缓存命中率等业务逻辑,用Timer.record()或Counter.increment()埋点,不侵入核心流程
二、自动采集JVM与运行时基础指标
Micrometer内置JvmMetrics、ProcessorMetrics、UptimeMetrics等自动配置,只需几行代码即可启用:
- 调用new JvmMemoryMetrics().bindTo(registry)采集堆/非堆内存、缓冲区使用情况
- 启用JdkFlightRecorderMetrics(JDK9+)可获取更细粒度GC暂停、线程状态变化等事件
- 结合System.getProperty("os.arch")等动态标签,支持多环境/多实例维度区分
三、暴露HTTP端点供拉取(如Prometheus)
在Spring Boot项目中,添加spring-boot-starter-actuator并配置:
立即学习“Java免费学习笔记(深入)”;
- management.endpoints.web.exposure.include=health,metrics,prometheus
- management.endpoint.prometheus.scrape=true(默认已启用)
- 访问/actuator/prometheus即可获得符合Prometheus文本格式的指标数据
- 非Spring项目可用SimpleMeterRegistry + 自定义Servlet输出,控制更灵活
四、轻量上报与本地调试支持
开发阶段无需部署完整监控栈,也可验证指标是否正确生成:
- 用LoggingMeterRegistry将指标定期打印到日志,检查命名、标签、数值更新是否合理
- 搭配StepMeterRegistry设置30秒步长,模拟周期性上报行为
- 导出为JSON或OpenMetrics格式,用curl或浏览器直接查看原始数据,排除序列化问题
不复杂但容易忽略:指标命名要遵循规范(如小写字母+下划线),避免特殊字符;Gauge类指标需确保回调函数执行高效,不可含阻塞或远程调用;所有自定义指标建议统一加application前缀,方便后续聚合与过滤。










