昨天组里来了个需求:
"给新上线的业务搭一套监控大盘,要有主机指标、容器指标、业务接口指标,后天评审。"
以前接到这种活,我心里是这样的:
去Grafana官网抄模板 → 发现不匹配 → 手动改JSON → 面板错位 →
调半天变量 → 领导说颜色不好看 → 再改 → 一天没了
这次我换了个玩法:全程用AI生成,从指标梳理到Dashboard JSON到导入Grafana,2小时搞定。
今天把完整过程分享出来,你直接抄作业。
一、先想清楚:这个大盘要监控什么
很多人上来就让AI"帮我生成一个Grafana大盘",然后得到一堆没用的面板。
关键第一步:先把需求喂清楚。
我给AI的第一条Prompt:
我需要为一个Java微服务搭建Grafana监控大盘。
环境信息:
- 基础设施:3台Linux主机,CentOS 7
- 容器平台:Kubernetes 1.28
- 监控采集:Prometheus + node_exporter + kube-state-metrics + JMX exporter
- 业务类型:HTTP API服务,Spring Boot框架
请帮我梳理这个大盘应该包含哪些监控模块和核心指标,
按"基础设施层→容器层→应用层→业务层"分层列出。
每个指标给出对应的Prometheus指标名。
AI返回的结果(我整理成表格):
基础设施层
node_cpu_seconds_total | ||
node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes | ||
node_filesystem_avail_bytes | ||
node_disk_io_time_seconds_total | ||
node_network_receive_bytes_total |
容器层
container_cpu_usage_seconds_total | ||
container_memory_working_set_bytes | ||
kube_pod_container_status_restarts_total | ||
kube_pod_status_phase |
应用层
jvm_memory_used_bytes | ||
jvm_gc_pause_seconds_count | ||
jvm_threads_current | ||
jvm_classes_loaded |
业务层
http_server_requests_seconds_count | ||
http_server_requests_seconds_sum | ||
http_server_requests_seconds_count{status=~"5.."} | ||
这一步的价值:以前我自己梳理这些指标至少要半小时翻文档,现在2分钟搞定,而且分层很清晰。
二、让AI直接生成Dashboard JSON
Grafana Dashboard本质上就是一个JSON文件。手写很痛苦,但对AI来说就是生成结构化数据,非常擅长。
第二条Prompt(核心):
根据上面梳理的指标,帮我生成一个完整的Grafana Dashboard JSON文件。
要求:
1. Grafana版本:10.x
2. 数据源名称:Prometheus
3. 分4个Row:基础设施层、容器层、应用层、业务层
4. 每个Row默认折叠,点击展开
5. 添加变量:
- instance(主机选择,基于node_exporter的targets)
- namespace(K8s命名空间)
- pod(Pod名称,联动namespace)
6. 面板布局:每行2-3个面板,宽度均分
7. 颜色方案:使用Grafana默认的绿-黄-红阈值
8. 业务层的QPS面板用柱状图,响应时间用折线图,其余用stat或gauge
请直接输出完整可导入的JSON,不要省略。
AI会生成一个很长的JSON。这里我截取关键结构说明:
{
"dashboard": {
"title": "微服务监控大盘",
"tags": ["ops", "microservice"],
"templating": {
"list": [
{
"name": "instance",
"type": "query",
"query": "label_values(node_cpu_seconds_total, instance)",
"datasource": "Prometheus"
},
{
"name": "namespace",
"type": "query",
"query": "label_values(kube_pod_info, namespace)"
},
{
"name": "pod",
"type": "query",
"query": "label_values(kube_pod_info{namespace=\"$namespace\"}, pod)"
}
]
},
"panels": [
{
"type": "row",
"title": "📦 基础设施层",
"collapsed": true,
"panels": [
{
"title": "CPU使用率",
"type": "timeseries",
"targets": [{
"expr": "100 - (avg by(instance)(irate(node_cpu_seconds_total{mode=\"idle\",instance=\"$instance\"}[5m])) * 100)"
}],
"fieldConfig": {
"defaults": {
"thresholds": {
"steps": [
{"color": "green", "value": null},
{"color": "yellow", "value": 70},
{"color": "red", "value": 90}
]
}
}
}
}
]
}
]
}
}
实际生成的JSON大概有400-600行,包含完整的十几个面板。
三、导入Grafana并验证
拿到JSON后,导入步骤:
Grafana左侧菜单 → Dashboards → New → Import
→ 粘贴JSON → Load → 选择数据源Prometheus → Import
导入后你通常会遇到几个问题。别慌,这是正常的。
四、常见问题修复(重点)
第一次导入基本不会完美,但修复过程也可以让AI帮你。
问题1:某个面板显示No Data
把问题丢给AI:
我导入了你生成的Grafana Dashboard,其中"Pod CPU使用"面板显示No Data。
我在Prometheus里手动查询以下指标有数据:
container_cpu_usage_seconds_total{namespace="default"}
但面板里的PromQL是:
sum(rate(container_cpu_usage_seconds_total{namespace="$namespace",pod="$pod"}[5m])) by (pod)
可能是什么原因?请帮我修复PromQL。
AI通常能快速定位:
变量没选( $namespace为空)label名称不匹配( pod和pod_name的版本差异)rate的范围向量窗口太小
问题2:面板布局错乱
帮我调整以下面板的gridPos,要求:
- 每行3个面板
- 每个面板宽度为8(总宽24)
- 高度统一为8
- 按从左到右、从上到下排列
当前面板标题列表:
1. CPU使用率
2. 内存使用率
3. 磁盘使用率
4. 磁盘IO
5. 网络流量
请输出每个面板的gridPos。
AI返回:
// 第1个面板:左上
"gridPos": {"h": 8, "w": 8, "x": 0, "y": 0}
// 第2个面板:中上
"gridPos": {"h": 8, "w": 8, "x": 8, "y": 0}
// 第3个面板:右上
"gridPos": {"h": 8, "w": 8, "x": 16, "y": 0}
// 第4个面板:左下
"gridPos": {"h": 8, "w": 8, "x": 0, "y": 8}
// 第5个面板:中下
"gridPos": {"h": 8, "w": 8, "x": 8, "y": 8}
问题3:想增加一个面板
比如领导评审时说"加一个接口成功率的饼图":
帮我生成一个Grafana 10.x的Pie Chart面板JSON,要求:
- 标题:接口成功率分布
- 数据源:Prometheus
- 展示2xx、4xx、5xx的请求占比
- 指标:http_server_requests_seconds_count
- 按status标签分组
- 颜色:2xx绿色、4xx黄色、5xx红色
拿到JSON片段,插入到Dashboard的panels数组里就行。
五、优化润色:让大盘更专业
基础功能有了,最后让AI帮你润色:
我的Grafana Dashboard已经能正常显示了,请帮我优化以下方面:
1. 给每个面板添加description(鼠标悬停时显示说明)
2. 业务层的响应时间面板,增加P95和P99两条线
3. 所有百分比类面板,Y轴限制0-100,单位设为percent(0-100)
4. 内存类面板,单位设为bytes(SI),自动转换KB/MB/GB
5. 在Dashboard顶部加一个"概览"Row,放4个Stat面板:
- 总QPS
- 平均响应时间
- 错误率
- Pod运行数
这一步的效果是从"能用"变成"能拿去评审"。
最终大盘结构:
┌─────────────────────────────────────────────┐
│ 📊 概览(4个Stat大字面板,一目了然) │
├─────────────────────────────────────────────┤
│ ▶ 📦 基础设施层(点击展开5个面板) │
├─────────────────────────────────────────────┤
│ ▶ 🐳 容器层(点击展开4个面板) │
├─────────────────────────────────────────────┤
│ ▶ ☕ 应用层(点击展开4个面板) │
├─────────────────────────────────────────────┤
│ ▶ 📈 业务层(点击展开4个面板) │
└─────────────────────────────────────────────┘
六、时间对比
| 总计 | 6小时 | 1.5小时 |
省了4.5小时,而且生成的PromQL比我手写的还规范。
七、你可以直接复用的Prompt模板
把下面这个模板存好,以后新业务接监控需求直接套用:
# Grafana Dashboard 生成模板
## 环境信息
- 操作系统:[填写]
- 容器平台:[填写,如K8s版本]
- 监控采集:[填写,如Prometheus + 哪些exporter]
- 业务类型:[填写,如Java/Go/Python,什么框架]
- Grafana版本:[填写]
## 需求描述
请生成一个完整的Grafana Dashboard JSON文件。
### 监控分层
按以下层次组织面板:
1. 概览层:核心指标Stat面板
2. 基础设施层:主机CPU/内存/磁盘/网络
3. 容器层:Pod资源/状态/重启
4. 应用层:[根据语言填,如JVM/GC/线程]
5. 业务层:QPS/延迟/错误率
### 技术要求
- 添加变量:instance, namespace, pod
- 每个Row默认折叠
- 面板每行2-3个,宽度均分
- 包含阈值颜色(绿-黄-红)
- 单位正确(百分比、字节、秒等)
### 输出要求
直接输出完整可导入的JSON,不要省略任何面板。
写在最后
以前觉得搭监控大盘是个体力活,现在用AI之后变成了一个"审稿"的过程——AI出初稿,你来Review和微调。
这种工作模式的转变,其实就是上篇文章说的:你从"执行者"变成了"指挥者"。
几个建议:
不要期望一次完美,第一次生成能用60-70%就很好了 修复过程也用AI,把错误信息直接丢给它 存好你的Prompt模板,下次搭新大盘10分钟就能出初版 JSON生成后一定要人工检查PromQL,指标名和label以你实际环境为准
下一篇聊一个大家都关心的话题:2026年运维岗薪资天花板在哪?AI技能到底值多少钱,我扒了几百条招聘数据,给你看真实数字。
关注不迷路,咱们下篇见。
夜雨聆风