GitHub Copilot 的确是一大利器,但若用它生成 Prometheus 告警规则与 Grafana 看板 JSON 时,千万别指望只扔一句“帮我写个 CPU 告警”就能搞定——大概率得到的是一堆无效 YAML 或语法错误的 dashboard 配置。问题根源在于:Copilot 缺乏对指标语义、标签继承关系以及 Grafana 面板嵌套结构的上下文理解。换句话说,它并不知道你使用的指标具体长什么样、标签该如何继承、面板嵌套不能随意组合。

要让 Copilot 产出可用的内容,必须给它喂对“原料”——先建立一个带结构化注释的模板文件,然后按照模板格式填写需求注释,最后通过 VS Code 右键指令触发生成。这套流程能确保指标语义、标签匹配和语法均正确可靠。具体操作步骤如下。
让 Copilot 写出可用的 Prometheus 告警规则
第一步: 在项目根目录下创建 alerts/ 文件夹,放置一个带注释的模板文件 alerts/template.yaml,内容如下:
# ALERT_NAME: 描述该告警业务含义,例如“API延迟突增”
# METRIC: 必须是Prometheus中真实存在的指标,如http_request_duration_seconds_bucket
# LABELS: 列出所有该指标实际携带的标签,如{le="0.1", job="api-gateway", instance="10.0.1.5:8080"}
# CONDITION: 用自然语言描述触发条件,如“过去5分钟P99延迟超过300ms”
# DURATION: 告警持续时间,如5m
# SUMMARY: 告警简短标题,限30字内
# DESCRIPTION: 告警详情,说明影响范围与建议动作
第二步: 将你想要生成的告警需求写成严格符合模板结构的注释块,粘贴到新文件 alerts/cpu-high.yaml:
# ALERT_NAME: 主机CPU使用率超阈值
# METRIC: 100 - (a vg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
# LABELS: {instance="192.168.1.10:9100", job="node"}
# CONDITION: 过去10分钟平均CPU使用率 > 90%
# DURATION: 10m
# SUMMARY: 节点CPU过载
# DESCRIPTION: 实例{{ $labels.instance }} CPU持续过高,可能影响服务响应。请检查进程占用或扩容节点。
第三步: 在 VS Code 中右键该文件 → “Ask Copilot to generate alert rule from comment”。基于你提供的 METRIC 表达式和 LABELS 上下文,Copilot 会输出一份完整、可直接部署的 alerting_rules.yml 片段。注意:它不会硬编码不存在的标签,也不会忽略 rate() 函数必需的时间窗口——这恰恰是直接写提示词时容易踩的坑。
用 Copilot 生成 Grafana 看板 JSON 配置
方法一:基于已有看板反向提取结构
进入 Grafana UI → 打开任意已生效的看板 → 点击右上角“⋮” → “View JSON” → 全选复制 JSON 内容 → 粘贴到 VS Code 新文件 dashboards/existing.json 中。
然后在文件顶部添加注释说明修改意图:
// 修改目标:将原看板中“Node CPU Usage”面板替换为“OpenCopilot Token消耗速率”
// 新指标:openclaw_session_tokens_output_total{job="opencopilot"}
// 新标签:instance=~"copilot-.*"
// 新图表类型:timeseries
选中整段 JSON → 右键 → “Ask Copilot to update dashboard JSON according to comment”。Copilot 会精准替换 target 数组中的 query 字段、调整 legend 格式、更新 title,同时保持 panels 数组结构不被破坏——这比手动修改 JSON 要可靠得多。
方法二:从零生成轻量看板(仅含 1 个核心面板)
新建文件 dashboards/token-rate.json,仅写入三行注释:
// 创建一个Grafana v10.2+兼容的单面板看板
// 监控指标:openclaw_session_tokens_output_total,按instance分组
// 显示为每秒输出Token数(rate 1m),Y轴单位:tokens/s
执行 Copilot 指令后,它会输出完整的 JSON,包含 __inputs、templating(空)、panels(一个 timeseries panel)、schemaVersion 等全部必需字段。它会跳过所有非 v10.2 必需的废弃字段(比如 "links" 或 "annotations")——这一点非常贴心,省去了手动清理的麻烦。
关键验证步骤:本地快速测试生成结果
配置完成后,务必定验证能否正常运行。借助 Docker 几步即可搞定。
第一步: 启动 Prometheus 容器并挂载生成的告警文件
docker run -d --name prom-test -p 9090:9090 -v $(pwd)/alerts:/etc/prometheus/alerts -v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus:v2.47.0
第二步: 访问 http://localhost:9090/alerts,确认 Copilot 生成的规则已加载且状态为“inactive”。未触发即表示语法正确,可以放心使用。
第三步: 启动 Grafana 容器并导入 JSON
docker run -d --name grafana-test -p 3000:3000 -v $(pwd)/dashboards:/var/lib/grafana/dashboards grafana/grafana:10.2.0
第四步: 登录 http://localhost:3000(默认 admin/admin)→ Configuration → Import → Upload JSON file → 选择刚生成的 token-rate.json → Import。
第五步: 进入导入的看板,确认面板左上角显示“Data source: Prometheus”且图表中有数据点。如果没有数据,说明指标名或标签过滤条件有误,需要回查 openclaw_exporter 暴露的原始指标。这一步不能跳过,Copilot 再聪明也可能踩到指标命名的坑。
