文章目录
- 1. 整体架构
-
- 1.1 业务服务|Micrometer 采集层
- 1.2 Prometheus|时序存储 & 计算 & 告警层
- 1.3 Grafana|可视化观测层
- 2. 部署 Prometheus + Grafana
- 3. Spring Boot 项目集成
-
- 3.1 引入依赖
- 3.2 应用配置
- 3.3 自定义业务指标
-
- 3.3.1 业务类
- 3.3.2 实现 MeterBinder 接口
- 3.3.3 Spring 配置类
- 3.4 启动应用
- 4. Prometheus 中查看数据
-
- 4.1 查看任务状态
- 4.2 基础 PromQL 查询
- 4. 集成 Grafana 监控大盘
-
- 4.1 数据源配置
- 4.2 官方仪表盘
- 4.3 自定义监控盘
1. 整体架构
指标流转链路:
- Spring Boot 服务通过 Actuator 暴露 /actuator/prometheus 端点,以 OpenMetrics 格式实时输出全量指标(JVM、HTTP、业务自定义指标);
- Prometheus 通过 HTTP 定时拉取(Pull 模式)采集指标、持久化时序数据;
- Grafana 对接 Prometheus 数据源,实现指标可视化、趋势分析、分层观测与异常定位。

1.1 业务服务|Micrometer 采集层
埋点来源:
- 内置埋点:http.server.requests、JVM、线程、GC、数据库连接池等
- 业务自定义埋点:Counter / Timer / Gauge / DistributionSummary
数据输出:暴露 /actuator/prometheus 端点,Prometheus拉取指标
1.2 Prometheus|时序存储 & 计算 & 告警层
- 数据获取:Pull 模式定时拉取业务服务 /actuator/prometheus
- 时序存储:保存指标 + 标签 + 时间戳原始时序数据
- 聚合计算:PromQL 做聚合、过滤、速率计算(rate()/irate()/sum()/avg())
- 告警能力:Rules 配置告警规则,触发后推送 AlertManager,输出钉钉/邮件/短信
1.3 Grafana|可视化观测层
- 数据源对接 Prometheus ,执行 PromQL 查询
- 分层观测大盘:
- 业务层:QPS、错误率、业务耗时
- 应用层:JVM 内存、GC、线程、连接池
- 系统层:CPU、内存、磁盘、网络
- 请求链路:P95/P99 耗时、活跃请求数
- 告警视图、阈值告警、多实例对比、面板模板复用
2. 部署 Prometheus + Grafana
统一端口与路径规范:
- 服务指标接口:http://{服务IP}:{端口}/actuator/prometheus
- Prometheus 默认端口:9090
- Grafana 默认端口:3000
- 统一采集周期:15s(生产标准,兼顾精度与存储成本)
目录结构:
prom-stack/
├── docker-compose.yml
├── prometheus/
│ └── prometheus.yml
└── .env(可选)
prometheus/prometheus.yml 配置文件:
# Prometheus 全局配置 – 适配Micrometer 4.1.0 微服务体系
global:
scrape_interval: 15s # 全局采集周期 15s 生产标准
evaluation_interval: 15s # 告警规则计算周期
scrape_timeout: 10s # 采集超时时间
# 采集任务配置
scrape_configs:
# 微服务统一采集任务(适配所有SpringBoot+Micrometer服务)
– job_name: 'spring-micrometer-service'
metrics_path: '/actuator/prometheus'
static_configs:
– targets:
– 127.0.0.1:8080
docker-compose.yml 完整文件:
version: '3.8'
services:
prometheus:
image: prom/prometheus:v2.53.0
container_name: prometheus
restart: always
ports:
– "9090:9090"
volumes:
– ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
– prom_data:/prometheus
command:
– '–config.file=/etc/prometheus/prometheus.yml'
– '–storage.tsdb.path=/prometheus'
– '–storage.tsdb.retention.time=15d'
– '–web.enable-lifecycle'
networks:
– monitor–net
grafana:
image: grafana/grafana:11.1.0
container_name: grafana
restart: always
ports:
– "3000:3000"
volumes:
– grafana_data:/var/lib/grafana
environment:
– GF_SECURITY_ADMIN_PASSWORD=admin123456
networks:
– monitor–net
networks:
monitor-net:
driver: bridge
volumes:
prom_data:
grafana_data:
启动服务:
docker compose up -d
访问地址
- Prometheus: http://ip:9090
- Grafana: http://ip:3000 账号 admin /admin123456
在 Prometheus 控制台可以看到配置的采集任务:

3. Spring Boot 项目集成
3.1 引入依赖
Pom 引入核心依赖
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>4.1.0</version>
<type>pom</type>
<scope>import</scope>
</dependencies>
</dependencyManagement>
<dependencies>
<!– SpringMVC Web –>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!– Actuator 监控端点 –>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!– prometheus 指标导出 –>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
</dependencies>
3.2 应用配置
重点是配置应用名称、开发 metrics,prometheus 端点
spring:
application:
name: spring–micrometer–service
management:
endpoints:
web:
exposure:
include: metrics,prometheus
可以这样配置关闭一些指标:
management:
metrics:
enable:
jvm: false
http.server.requests: true
all: true
3.3 自定义业务指标
Spring Boot自定义业务指标的多种方式:
- MeterRegistry 注入到组件中手动进行注册
- 通过 MeterBinder Bean 自动注入 MeterRegistry 完成绑定
- 通过注解 AOP
MeterBinder 是 Spring Boot Actuator 官方推荐模式,所有容器内 MeterBinder Bean,Spring 会自动注入 MeterRegistry 完成绑定,无需手动操作。
3.3.1 业务类
模拟业务组件,本地内存消息队列,提供消息入队、出队能力,对外暴露队列长度查询方法,供监控指标读取实时数据。
MessageQueueManager:
@Component
public class MessageQueueManager {
private final BlockingQueue<String> messageQueue = new LinkedBlockingQueue<>(1000);
public boolean addMessage(String msg) {
return messageQueue.offer(msg);
}
public String takeMessage() {
return messageQueue.poll();
}
/**
* 供给Gauge读取实时队列长度
*/
public int getQueueSize() {
return messageQueue.size();
}
}
3.3.2 实现 MeterBinder 接口
独立实现 MeterBinder,专门负责注册队列相关监控指标:
public class MessageQueueMeterBinder implements MeterBinder {
private final MessageQueueManager queueManager;
// 构造注入业务对象
public MessageQueueMeterBinder(MessageQueueManager queueManager) {
this.queueManager = queueManager;
}
@Override
public void bindTo(io.micrometer.core.instrument.MeterRegistry registry) {
// 指标1:队列长度
Gauge.builder("business.message.queue.size", queueManager, MessageQueueManager::getQueueSize)
.description("消息队列堆积数量")
.register(registry);
// 可以继续添加同模块多个指标
// Gauge.builder(…).register(registry);
}
}
带 Tags 多维度指标示例:
@Bean
public MeterBinder messageQueueSizeBinder(MessageQueueManager queueManager) {
return registry -> Gauge.builder("business.message.queue.size", queueManager, MessageQueueManager::getQueueSize)
.tag("queue_name", "order_queue")
.tag("env", "${spring.profiles.active}") // 配合占位符
.description("订单消息队列堆积长度")
.register(registry);
}
3.3.3 Spring 配置类
把 MessageQueueMeterBinder 注册为 Bean:
@Configuration
public class MetricBinderConfig {
@Bean
public MeterBinder messageQueueMeterBinder(MessageQueueManager queueManager) {
return new MessageQueueMeterBinder(queueManager);
}
}
3.4 启动应用
启动应用,先查看 /actuator/prometheus :

4. Prometheus 中查看数据
4.1 查看任务状态
在 Prometheus 控制台查看采集任务健康状态:

4.2 基础 PromQL 查询
PromQL(Prometheus Query Language)是 Prometheus 查询语言,专门用来从 Prometheus 时序数据库里查询、过滤、运算监控指标。
我们先在 /actuator/prometheus 端点查看下指标应用启动完成耗时(单位:秒)指标 application_ready_time_seconds ,的数据:
# HELP application_ready_time_seconds Time taken for the application to be ready to service requests
# TYPE application_ready_time_seconds gauge
application_ready_time_seconds{main_application_class="com.yovis.example.micrometer.boot.demo.MicrometerBootDemoApplication"} 2.224
结构解析:
- 类型是 gauge
- 只有一个 application_ready_time_seconds 标签
- 指标值 2.224 秒
在 Prometheus 中查询全部时序:
{__name__=~".+"}

application_ready_time_seconds 时序数据:
application_ready_time_seconds{instance="192.168.7.84:8080", job="spring-micrometer-service", main_application_class="com.yovis.example.micrometer.boot.demo.MicrometerBootDemoApplication"}
Prometheus 采集后,会加上任务标签 Label :
- instance:Prometheus 配置里定义的目标地址,代表这台实例的 ip + 端口。
- job:Prometheus 配置里定义任务名称,,用来归类同一组服务。
通过 instance 和 job 标签就可以定位到某个具体的服务实例:
{instance="192.168.7.84:8080", job="spring-micrometer-service"}
再加上指标名、业务标签、聚合函数等,就可以实现复杂的查询了,具体请参考官方说明,比如 JVM 堆内存使用:
jvm_memory_used_bytes{instance="192.168.7.84:8080", job="spring-micrometer-service"}

4. 集成 Grafana 监控大盘
4.1 数据源配置

选择添加 Prometheus 数据源
URL 填写:http://Prometheus服务IP:9090
Scrape interval 填写:15s
关闭 Proxy 异常缓存,点击 Save & test,显示成功即可
关键适配点:数据源必须与 Prometheus 采集周期一致,否则大盘数据断层、延迟失真。
4.2 官方仪表盘
在官方搜索 Spring Boot 、Micrometer :

Grafana 中新建仪表盘 (Home – Dashboards – new – Import dashboard):

通过 ID 或 Json 数据导入:

导入成功后:

4.3 自定义监控盘
对于没有官方仪表盘的场景下,比如自定义的业务指标,可以把 /actuator/prometheus 中的指标发给 AI 写一个 Json 文件,直接导入到 Grafana 中就可以了 !!!
网硕互联帮助中心







评论前必须登录!
注册