乐于分享
好东西不私藏

我用AI自动生成了整个Grafana监控大盘(从0到完成)

我用AI自动生成了整个Grafana监控大盘(从0到完成)

昨天组里来了个需求:

"给新上线的业务搭一套监控大盘,要有主机指标、容器指标、业务接口指标,后天评审。"

以前接到这种活,我心里是这样的:

去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返回的结果(我整理成表格):

基础设施层

面板名称
Prometheus指标
说明
CPU使用率
node_cpu_seconds_total
按模式分breakdown
内存使用率
node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes
已用/总量
磁盘使用率
node_filesystem_avail_bytes
按挂载点
磁盘IO
node_disk_io_time_seconds_total
读写吞吐
网络流量
node_network_receive_bytes_total
进出流量

容器层

面板名称
Prometheus指标
说明
Pod CPU使用
container_cpu_usage_seconds_total
按namespace/pod
Pod 内存使用
container_memory_working_set_bytes
工作集内存
Pod 重启次数
kube_pod_container_status_restarts_total
异常重启监控
Pod 状态
kube_pod_status_phase
Running/Pending/Failed

应用层

面板名称
Prometheus指标
说明
JVM堆内存
jvm_memory_used_bytes
堆/非堆分区
GC次数和耗时
jvm_gc_pause_seconds_count
按GC类型
线程数
jvm_threads_current
活跃线程
类加载数
jvm_classes_loaded
异常增长可发现内存泄漏

业务层

面板名称
Prometheus指标
说明
QPS
http_server_requests_seconds_count
请求速率
响应时间
http_server_requests_seconds_sum
P50/P95/P99
错误率
http_server_requests_seconds_count{status=~"5.."}
5xx占比
接口Top10
同上按uri聚合
最耗时接口

这一步的价值:以前我自己梳理这些指标至少要半小时翻文档,现在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名称不匹配(podpod_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个面板)               │
└─────────────────────────────────────────────┘

六、时间对比

环节
手动搭建
AI辅助
指标梳理
30分钟
2分钟
写PromQL
1.5小时
10分钟
编写JSON/拖拽面板
2小时
15分钟(生成+粘贴)
调试修复
1小时
30分钟
优化润色
1小时
20分钟
总计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和微调。

这种工作模式的转变,其实就是上篇文章说的:你从"执行者"变成了"指挥者"。

几个建议:

  1. 不要期望一次完美,第一次生成能用60-70%就很好了
  2. 修复过程也用AI,把错误信息直接丢给它
  3. 存好你的Prompt模板,下次搭新大盘10分钟就能出初版
  4. JSON生成后一定要人工检查PromQL,指标名和label以你实际环境为准

下一篇聊一个大家都关心的话题:2026年运维岗薪资天花板在哪?AI技能到底值多少钱,我扒了几百条招聘数据,给你看真实数字。

关注不迷路,咱们下篇见。