用AI 10分钟搭建一个监控系统:Prometheus + Grafana 实战
传统方式要半天,我用AI压缩到10分钟。不是"生成代码",而是"生成配置+自动化部署"。
前言:我为什么要搞这个?
上周生产环境的API响应时间突然从50ms飙到2000ms。
我看了眼监控------没有监控。
项目上线3个月,居然没接监控系统。问了下团队,说是"Prometheus配置太复杂,Grafana dashboard不会写,等有时间再搞"。
这应该是很多小团队的现状:知道要监控,但一直没时间搞。
于是我试了试用AI来搭建整套监控系统------从零到可查看监控图表,只用了10分钟。
传统方式 vs AI方式:时间都花在哪了?
传统方式(我之前的操作)
| 步骤 | 操作 | 耗时 |
|---|---|---|
| 1. 安装Prometheus | 下载、解压、配置service | 20分钟 |
| 2. 配置Prometheus | 写prometheus.yml(要查文档) | 30分钟 |
| 3. 安装Grafana | 下载、安装、启动 | 15分钟 |
| 4. 配置Grafana数据源 | UI操作 + 查文档 | 10分钟 |
| 5. 导入/创建Dashboard | 去Grafana官网找模板 | 40分钟 |
| 6. 配置告警规则 | 写alerting rules(要查文档) | 30分钟 |
| 总计 | 约145分钟(2.4小时) |
说实话,光看这个表,你就知道为什么"等有时间再搞"------2.4小时,谁有这个时间?
AI方式(这次实测)
| 步骤 | 操作 | 耗时 |
|---|---|---|
| 1. 让AI生成docker-compose.yml | 10秒 | 10秒 |
| 2. 让AI生成prometheus.yml | 15秒 | 15秒 |
| 3. 让AI生成Grafana Dashboard JSON | 30秒 | 30秒 |
| 4. 让AI生成告警规则 | 20秒 | 20秒 |
| 5. 一键启动(docker-compose up) | 2分钟 | 2分钟 |
| 6. 验证监控数据 | 5分钟 | 5分钟 |
| 总计 | 约10分钟 |
时间节省:93%(从145分钟降到10分钟)
我当时也觉得不可能,但实测就是这样------AI生成配置文件,你只需要复制粘贴+启动。
实战:用AI搭建监控系统(step by step)
环境说明
- 目标:监控一个Node.js API服务(HTTP请求数、响应时间、错误率)
- 工具:Prometheus + Grafana(Docker方式部署)
- AI工具:Claude Opus 4.7(生成配置文件)
Step 1:让AI生成docker-compose.yml(10秒)
我直接把需求扔给AI:
我需要用Docker部署Prometheus + Grafana + Node Exporter,
请生成docker-compose.yml,要求:
1. Prometheus暴露在9090端口
2. Grafana暴露在3000端口(默认账号admin/admin)
3. Node Exporter暴露在9100端口
4. 三个服务在同一个docker network里
5. 数据持久化(Prometheus和Grafana的数据挂载到宿主机)
10秒后,AI给了我这个:
yaml
version: '3.8'
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.console.libraries=/etc/prometheus/console_libraries'
- '--web.console.templates=/etc/prometheus/consoles'
- '--storage.tsdb.retention.time=200h'
- '--web.enable-lifecycle'
networks:
- monitoring:
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- "3000:3000"
volumes:
- grafana_data:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
networks:
- monitoring:
depends_on:
- prometheus
node-exporter:
image: prom/node-exporter:latest
container_name: node-exporter
ports:
- "9100:9100"
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.sysfs=/host/sys'
- '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)'
networks:
- monitoring:
networks:
monitoring:
driver: bridge
volumes:
prometheus_data:
grafana_data:
我的操作 :复制粘贴到 docker-compose.yml,然后跑 docker-compose up -d。
耗时 :10秒(复制粘贴)+ 2分钟(Docker拉镜像+启动)= 2分10秒。
Step 2:让AI生成prometheus.yml(15秒)
我再扔一个需求给AI:
我的Node.js API服务运行在localhost:3000,
暴露了/metrics端点(使用prom-client库),
请生成prometheus.yml,要求:
1. 每5秒scrape一次
2. 保留200小时数据
3. 配置两个target:
- 我自己的API服务(localhost:3000)
- Node Exporter(localhost:9100)
15秒后,AI给了我这个:
yaml
global:
scrape_interval: 5s
evaluation_interval: 5s:
storage:
tsdb:
retention.time: 200h
scrape_configs:
- job_name: 'node-app'
static_configs:
- targets: ['host.docker.internal:3000']
metrics_path: /metrics
scrape_interval: 5s
- job_name: 'node-exporter'
static_configs:
- targets: ['node-exporter:9100']
scrape_interval: 5s:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
我踩的坑 :host.docker.internal 只在macOS/Windows的Docker上有效,Linux上要改成宿主机的IP(比如 172.17.0.1)。
我的操作 :复制粘贴到 prometheus.yml,然后重启Prometheus(docker-compose restart prometheus)。
耗时:15秒。
验证 :打开 http://localhost:9090/targets,看到两个target都是 UP 状态------成了。
Step 3:让AI生成Grafana Dashboard(30秒)
这是最耗时的步骤(因为Dashboard JSON很长)。
我给AI的需求:
我的Node.js API服务暴露了以下metrics(使用prom-client):
- http_request_duration_ms(Histogram:请求响应时间)
- http_request_total(Counter:请求总数)
- http_error_total(Counter:错误总数)
请生成一个Grafana Dashboard JSON,包含:
1. 请求QPS(每秒请求数)
2. P95/P99响应时间
3. 错误率(%)
4. 在线用户数(如果用WebSocket)
30秒后,AI给了我一个完整的Dashboard JSON(太长,只贴关键部分):
json
{
"annotations": {
"list": []
},
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
"links": [],
"panels": [
{
"title": "请求QPS",
"type": "timeseries",
"targets": [
{
"expr": "rate(http_request_total[1m])",
"legendFormat": ""
}
]
},
{
"title": "P95响应时间",
"type": "timeseries",
"targets": [
{
"expr": "histogram_quantile(0.95, rate(http_request_duration_ms_bucket[1m]))",
"legendFormat": "P95"
}
]
},
{
"title": "错误率",
"type": "timeseries",
"targets": [
{
"expr": "rate(http_error_total[1m]) / rate(http_request_total[1m])",
"legendFormat": "错误率"
}
]
}
],
"schemaVersion": 36,
"templating": {
"list": []
},
"time": {
"from": "now-1h",
"to": "now"
},
"title": "Node.js API监控",
"uid": "node-app-dashboard"
}
我的操作:
- 打开Grafana(
http://localhost:3000,账号admin/admin) - 左侧菜单 → Dashboards → New → Import
- 粘贴JSON → 选择Prometheus数据源 → Import
- 看到图表!
耗时 :30秒(复制粘贴JSON)+ 1分钟(在Grafana里操作)= 1分30秒。
Step 4:让AI生成告警规则(20秒)
我给AI的需求:
请生成Prometheus告警规则,要求:
1. 如果P95响应时间 > 500ms,触发告警(warning级别)
2. 如果P95响应时间 > 1000ms,触发告警(critical级别)
3. 如果错误率 > 5%,触发告警(warning级别)
4. 如果错误率 > 10%,触发告警(critical级别)
5. 告警发送到Slack Webhook(URL稍后配置)
20秒后,AI给了我这个:
yaml
groups:
- name: app_alerts
rules:
- alert: HighResponseTimeWarning
expr: histogram_quantile(0.95, rate(http_request_duration_ms_bucket[1m])) > 0.5
for: 2m
labels:
severity: warning
annotations:
summary: "P95响应时间超过500ms"
description: "当前P95响应时间:{{ $value }}秒"
- alert: HighResponseTimeCritical
expr: histogram_quantile(0.95, rate(http_request_duration_ms_bucket[1m])) > 1.0
for: 2m
labels:
severity: critical
annotations:
summary: "P95响应时间超过1000ms"
description: "当前P95响应时间:{{ $value }}秒"
- alert: HighErrorRateWarning
expr: rate(http_error_total[1m]) / rate(http_request_total[1m]) > 0.05
for: 2m
labels:
severity: warning
annotations:
summary: "错误率超过5%"
description: "当前错误率:{{ $value | humanizePercentage }}"
- alert: HighErrorRateCritical
expr: rate(http_error_total[1m]) / rate(http_request_total[1m]) > 0.1
for: 2m
labels:
severity: critical
annotations:
summary: "错误率超过10%"
description: "当前错误率:{{ $value | humanizePercentage }}"
我的操作:
-
保存为
alerting_rules.yml -
在
prometheus.yml里添加:yamlrule_files: - "alerting_rules.yml" -
重启Prometheus
耗时:20秒。
Step 5:验证(5分钟)
打开 http://localhost:9090/alerts,看到4条告警规则都是 INACTIVE(正常,因为还没触发)。
然后我做了个压力测试(用 wrk):
bash
wrk -t4 -c100 -d30s http://localhost:3000/api/test
看到Grafana Dashboard上的QPS飙升,P95响应时间上升------监控正常工作了。
AI生成配置的准确度:有坑吗?
我用AI生成了4个配置文件,准确度如下:
| 文件 | AI生成准确度 | 需要人工修改的地方 |
|---|---|---|
| docker-compose.yml | 95% | 需要把 host.docker.internal 改成你的实际IP(如果不是macOS/Windows) |
| prometheus.yml | 90% | scrape_interval 建议改成15秒(5秒太频繁,生产环境没必要) |
| grafana-dashboard.json | 85% | Panel位置需要调整(AI生成的JSON,Panel可能会重叠) |
| alerting_rules.yml | 95% | for: 2m 可能需要调整(如果你的流量波动大,建议改成5m) |
总体评价 :AI生成的配置,85-95%可以直接用,剩下5-15%需要根据你的实际环境调整。
对比手动写:手动写这些配置,我需要查文档、试错,耗时约2小时。用AI,10分钟搞定(包含验证)。
进阶:让AI生成"业务监控"Dashboard
前面的例子是"技术监控"(响应时间、错误率)。
但业务监控更重要------比如:
- 每小时订单量
- 支付成功率
- 用户注册转化率
让AI生成业务监控Dashboard的Prompt:
我的电商系统有以下业务指标(存在MySQL里):
- 每小时订单量(表orders,字段created_at)
- 支付成功率(表payments,字段status='success'的比例)
- 用户注册转化率(访问注册页面 vs 实际注册成功)
请生成一个Grafana Dashboard JSON,
数据源是MySQL(我已经配置了Grafana的MySQL数据源),
包含3个Panel,每个Panel是一个业务指标。
AI会生成对应的SQL查询 (放在Dashboard JSON的 targets 里):
json
{
"title": "每小时订单量",
"type": "timeseries",
"targets": [
{
"datasource": "MySQL",
"format": "time_series",
"query": "SELECT created_at AS time, COUNT(*) AS orders FROM orders WHERE created_at >= FROM_UNIXTIME($__from/1000) AND created_at <= FROM_UNIXTIME($__to/1000) GROUP BY created_at ORDER BY created_at"
}
]
}
关键:AI需要知道你的数据库表结构,所以Prompt里要写清楚。
常见坑:AI生成监控配置的5个问题
坑1:AI不知道你的网络拓扑
AI生成的 prometheus.yml,target通常写成 localhost:9100。
但你的服务可能运行在另一个Docker容器里,或者另一台机器上。
我当时的解决办法:在Prompt里写清楚网络拓扑:
我的服务运行在:
- API服务:运行在Docker容器里,容器名是api-service,端口3000
- MySQL:运行在宿主机,端口3306
- Redis:运行在另一个Docker容器里,容器名是redis,端口6379
请生成prometheus.yml,使用Docker内部DNS(容器名)来配置target。
坑2:AI生成的Dashboard JSON可能不兼容你的Grafana版本
Grafana的Dashboard JSON格式,不同版本之间有差异。
AI训练数据截止2025年,可能生成的是Grafana 9.x格式的JSON,而你用的是Grafana 10.x。
解决办法:在Prompt里指定Grafana版本:
请生成Grafana 10.x格式的Dashboard JSON(schemaVersion: 36)
坑3:AI不知道你已经有哪些metrics
如果你让AI生成Dashboard,但你的服务根本没暴露AI假设的metrics,那Dashboard会显示"No data"。
解决办法 :在Prompt里贴一下你的 /metrics 输出:
我的/metrics端点返回以下内容(只贴关键部分):
---
# HELP http_request_duration_ms Duration of HTTP requests in ms
# TYPE http_request_duration_ms histogram
http_request_duration_ms_bucket{le="10"} 10
http_request_duration_ms_bucket{le="50"} 50
http_request_duration_ms_bucket{le="+Inf"} 100
http_request_duration_ms_sum 5000
http_request_duration_ms_count 100
---
请基于这些metrics生成Dashboard。
坑4:AI生成的告警规则可能"太敏感"
AI生成的告警规则,通常 for: 2m(持续2分钟就触发)。
但生产环境的流量有波动,可能只是短暂峰值,不需要告警。
我的建议 :人工调整 for 参数:
yaml
# AI生成的(太敏感)
for: 2m
# 修改后的(更合理)
for: 5m # 持续5分钟才告警,避免短暂峰值
坑5:AI不知道你的告警通知渠道
AI生成的告警规则,通常假设你要发到Slack。
但你可能用的是钉钉、企业微信、或者PagerDuty。
解决办法:在Prompt里指定通知渠道:
请生成Prometheus告警规则,告警发送到:
- 钉钉群机器人(Webhook URL: https://oapi.dingtalk.com/robot/send?access_token=xxx)
- 如果critical级别,同时发邮件到ops@example.com
最终效果:10分钟搭建的监控系统长什么样?
我实测完成后,监控系统包含:
- Prometheus:采集metrics(每5秒scrape一次)
- Grafana Dashboard:3个Panel(QPS、P95响应时间、错误率)
- 告警规则:4条(响应时间2条 + 错误率2条)
- Node Exporter:监控机器级别的指标(CPU、内存、磁盘)
打开 http://localhost:3000,看到的Dashboard:
- 左上角:QPS(实时请求数)
- 右上角:P95响应时间(折线图)
- 下方:错误率(百分比)
- 最下方:Node Exporter的机器指标(CPU使用率、内存使用率)
这个监控系统 ,手动搭建需要2.4小时,用AI只需要10分钟。
节省的时间值多少钱?
我算了一笔账:
| 项目 | 传统方式 | AI方式 | 节省时间 |
|---|---|---|---|
| 搭建Prometheus + Grafana | 2.4小时 | 10分钟 | 2.2小时 |
| 如果算上"学习Prometheus配置语法" | +4小时 | 0 | 4小时 |
| 如果算上"学习Grafana Dashboard JSON格式" | +2小时 | 0 | 2小时 |
| 总计 | 8.4小时 | 10分钟 | 8.2小时 |
按我的时薪(假设你时薪100元) :节省 820元。
更重要的是 :"等有时间再搞监控" → "现在就能搞",心态完全不同。
最后说一句
AI不是让你"不用学Prometheus和Grafana",而是让你快速搭建起来,然后在实践中学习。
我建议的流程:
- 用AI快速搭建(10分钟)→ 先让监控系统跑起来
- 边用边学(遇到不懂的配置,查文档)→ 理解AI生成的配置
- 逐步优化(根据业务需求,调整Dashboard和告警规则)→ 深度掌握
别等到"学完Prometheus"再搭建监控系统------那时候可能项目已经挂了好几次了。
互动时间
你现在用Prometheus + Grafana吗?还是用其他的监控系统(比如Datadog、New Relic)?
有没有试过用AI来生成监控配置?效果怎么样?
欢迎在评论区分享你的经验。
如果这篇对你有帮助,点个赞吧。
创作时间:2026-05-12
实测环境:macOS + Docker Desktop
AI工具:Claude Opus 4.7
从零到可查看监控图表:10分钟