使用Spring Boot Actuator + Prometheus + Grafana实现生产级监控
·
下面是一个 完整、可落地的 Spring Boot 项目监控方案,使用 Spring Boot Actuator + Prometheus + Grafana 实现生产级监控。包含代码、配置、部署和验证步骤。
🎯 目标
- Spring Boot 应用暴露指标(Metrics)
- Prometheus 定时拉取指标
- Grafana 可视化 JVM、HTTP 请求、GC 等关键指标
✅ 第一步:Spring Boot 项目集成 Actuator + Prometheus
1. 添加 Maven 依赖(pom.xml)
<dependencies>
<!-- 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>
<!-- Micrometer for Prometheus -->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
</dependencies>
✅ Spring Boot 2.3+ 默认包含 Micrometer,无需额外版本。
2. 配置 application.yml
server:
port: 8080
spring:
application:
name: demo-app
management:
endpoints:
web:
exposure:
include: health,info,metrics,prometheus # 开放 prometheus 端点
endpoint:
health:
show-details: always
metrics:
tags:
application: ${spring.application.name} # 为指标打标签,便于区分多服务
3. 验证指标端点
启动应用后,访问:
curl http://localhost:8080/actuator/prometheus
你会看到类似输出:
# HELP jvm_memory_used_bytes The amount of used memory
# TYPE jvm_memory_used_bytes gauge
jvm_memory_used_bytes{application="demo-app",area="heap",id="G1 Eden Space",} 1.23456E7
# HELP http_server_requests_seconds Timer of HTTP server requests
# TYPE http_server_requests_seconds summary
http_server_requests_seconds_count{application="demo-app",exception="None",method="GET",outcome="SUCCESS",status="200",uri="/api/hello",} 5.0
...
✅ 说明:指标已成功暴露!
✅ 第二步:部署 Prometheus
1. 创建 prometheus.yml
global:
scrape_interval: 15s # 每15秒抓取一次
scrape_configs:
- job_name: 'springboot-app'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['host.docker.internal:8080'] # Docker 中访问宿主机
labels:
group: 'backend'
💡 注意:
- 如果 Spring Boot 运行在 本地,Prometheus 在 Docker 中 → 用
host.docker.internal- 如果都在 K8s → 用 Service 名称,如
myapp:8080- 如果都在 同一台服务器 → 用
localhost:8080
2. 启动 Prometheus(Docker)
# 创建目录
mkdir -p ~/prometheus
cp prometheus.yml ~/prometheus/
# 启动容器
docker run -d \
--name=prometheus \
-p 9090:9090 \
-v ~/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus
3. 验证 Prometheus 抓取
访问 http://localhost:9090
- 点击 Status → Targets,确认状态为 UP
- 在搜索框输入
jvm_memory_used_bytes,应有数据
✅ 说明:Prometheus 已成功采集指标!
✅ 第三步:部署 Grafana 并导入 Dashboard
1. 启动 Grafana(Docker)
docker run -d \
--name=grafana \
-p 3000:3000 \
grafana/grafana-enterprise
2. 配置 Prometheus 数据源
- 浏览器打开
http://localhost:3000(默认账号/密码:admin/admin) - Add data source → Prometheus
- URL 填:
http://host.docker.internal:9090(或 Prometheus 服务地址) - 点击 Save & Test,显示 “Data source is working”
3. 导入官方 JVM Dashboard
- 点击 + → Import
- 输入 Dashboard ID:
4701(JVM (Micrometer) Dashboard) - 选择刚创建的 Prometheus 数据源
- 点击 Import
🎉 你将看到完整的 JVM 监控面板:
- Heap / Non-Heap 内存
- GC 次数与耗时
- 线程数
- HTTP 请求 QPS、延迟、错误率
✅ 第四步:(可选)添加自定义业务指标
示例:统计订单创建次数
@RestController
public class OrderController {
private final Counter orderCounter;
public OrderController(MeterRegistry meterRegistry) {
this.orderCounter = Counter.builder("order.created.total")
.description("Total number of orders created")
.register(meterRegistry);
}
@PostMapping("/orders")
public String createOrder() {
orderCounter.increment(); // 计数+1
return "Order created";
}
}
在 Grafana 中搜索 order_created_total 即可看到图表。
✅ 第五步:生产环境安全加固
1. 限制 Actuator 端点访问(Spring Security)
@Configuration
public class ActuatorSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.requestMatcher(EndpointRequest.toAnyEndpoint())
.authorizeRequests()
.anyRequest().hasRole("ACTUATOR")
.and()
.httpBasic(); // 或 OAuth2、IP 白名单
}
}
2. Prometheus 配置 Basic Auth(如需要)
scrape_configs:
- job_name: 'secure-app'
metrics_path: '/actuator/prometheus'
basic_auth:
username: 'actuator'
password: 'secret'
static_configs:
- targets: ['your-app:8080']
📊 最终效果
表格
| 组件 | 地址 | 作用 |
|---|---|---|
| Spring Boot App | http://localhost:8080/actuator/prometheus |
暴露指标 |
| Prometheus | http://localhost:9090 |
存储 & 查询指标 |
| Grafana | http://localhost:3000 |
可视化监控大盘 |
🔧 故障排查
表格
| 问题 | 解决方案 |
|---|---|
| Prometheus target DOWN | 检查网络、防火墙、Spring Boot 是否运行 |
| Grafana 无数据 | 检查数据源配置、指标名称是否匹配 |
| 指标缺失 | 确认 micrometer-registry-prometheus 依赖已引入 |
| Docker 网络不通 | 使用 host.docker.internal(Mac/Windows)或 --network host |
✅ 总结:完整流程图
Spring Boot App
└─ Actuator + Micrometer → /actuator/prometheus
↓ (HTTP pull every 15s)
Prometheus Server ← prometheus.yml
↓ (Query via API)
Grafana Dashboard ← Import ID 4701
更多推荐




所有评论(0)