Java微服务集群监控核心是Prometheus拉取+Grafana展示:Spring Boot通过Actuator和Micrometer暴露/actuator/prometheus端点;Prometheus配置scrape_configs抓取各服务指标;Grafana接入后导入模板(如ID 4701)构建看板,并用application/env标签实现多维筛选。

Java 微服务集群用 Prometheus + Grafana 监控,核心是让每个服务暴露指标、Prometheus 统一拉取、Grafana 集中展示。不需要改业务逻辑,Spring Boot 项目加几行配置就能跑起来。
让每个 Java 服务暴露 Prometheus 指标
Spring Boot 2.x/3.x 默认集成 Micrometer,它是连接应用和 Prometheus 的标准桥梁。关键动作有三步:
- 在 pom.xml 中添加两个依赖:
spring-boot-starter-actuator(提供监控端点)和micrometer-registry-prometheus(把指标转成 Prometheus 格式) - 在 application.yml 中打开端点:
management.endpoints.web.exposure.include: health,info,metrics,prometheus - 确保应用监听
0.0.0.0:8080(不是 localhost),否则 Docker 容器内网络无法被 Prometheus 访问到
启动后访问 http://<服务地址>:8080/actuator/prometheus,能看到类似 jvm_memory_used_bytes{area="heap",id="PS Eden Space"} 1.2e+08 的原始指标,说明已就绪。
Prometheus 主动抓取所有微服务实例
Prometheus 是 pull 模式,它会定期向每个服务的 /actuator/prometheus 端点发 HTTP 请求。配置要点:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 在 prometheus.yml 的
scrape_configs下新增 job,比如叫java-microservices - target 列表填服务发现方式:Docker Compose 环境可用服务名(如
user-service:8080);Kubernetes 环境推荐用kubernetes_sd_configs自动发现 Pod - 务必指定
metrics_path: /actuator/prometheus,否则默认找/metrics会失败
启动 Prometheus 后,进 http://localhost:9090/targets 页面,所有 target 显示 UP 才算真正连通。
Grafana 接入并构建集群级看板
Grafana 不存数据,只从 Prometheus 读取并渲染图表。操作很轻量:
- 用 Docker 启动 Grafana:
docker run -d -p 3000:3000 --name grafana grafana/grafana-enterprise - 浏览器打开
http://localhost:3000(默认账号 admin/admin),添加数据源,URL 填 Prometheus 地址(Docker 内网常用http://host.docker.internal:9090) - 导入现成模板:搜索 ID 4701(JVM 监控)或 12856(Spring Boot 全面指标),一键加载仪表盘
- 关键技巧:用
job或application标签做变量过滤,一个看板就能切换查看不同服务的内存、线程、HTTP QPS、错误率
补充建议:让监控更稳更准
集群环境下容易忽略但影响实际效果的细节:
- 所有服务统一打上
application和env标签(例如通过@Bean MeterRegistryCustomizer注册 commonTags),方便 Grafana 按环境筛选 - Prometheus 单节点适合中小集群;百个以上服务建议引入 Thanos 支持长期存储与高可用查询
- 别只盯 JVM,用
http_server_requests_seconds_count这类 Spring Boot 自带指标,能直接看到各 endpoint 的成功率和延迟分布 - 告警规则写在
rules/alert_rules.yml里,比如 “过去5分钟jvm_memory_used_bytes{area="heap"}超过堆上限 85%”,再对接 Alertmanager 发钉钉/企业微信

















