You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何批量为所有Grafana仪表盘添加注释查询?

批量为Grafana仪表盘添加GitHub Releases注释查询的方法

以下是三种可行的批量操作方案,不用逐个手动修改仪表盘:

1. 通过Grafana API批量更新

利用Grafana的REST API实现自动化修改,流程如下:

  • 获取所有仪表盘列表:发送GET请求拉取所有仪表盘的UID和基础信息
    curl -H "Authorization: Bearer YOUR_API_KEY" http://YOUR_GRAFANA_URL/api/search?type=dash-db
    
  • 遍历更新每个仪表盘:
    1. 针对每个仪表盘UID,请求获取完整的仪表盘JSON配置
      curl -H "Authorization: Bearer YOUR_API_KEY" http://YOUR_GRAFANA_URL/api/dashboards/uid/{DASH_UID}
      
    2. 在JSON的annotations.list数组中添加GitHub Releases注释配置,示例配置块:
      {
        "builtIn": 0,
        "datasource": "GitHub",
        "enable": true,
        "hide": false,
        "iconColor": "rgba(0, 211, 255, 1)",
        "name": "GitHub Releases",
        "type": "github",
        "query": "owner:你的组织名 repo:你的仓库名",
        "tag": ""
      }
      
    3. 发送PUT请求将修改后的JSON推回Grafana完成更新
      curl -X PUT -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d @updated_dash.json http://YOUR_GRAFANA_URL/api/dashboards/uid/{DASH_UID}
      

2. 基于Provisioning配置文件管理(长期推荐)

如果你的仪表盘是通过配置文件批量部署的,直接修改配置文件即可:

  • 找到Grafana的provisioning仪表盘目录(默认路径为/etc/grafana/provisioning/dashboards)
  • 在每个仪表盘的JSON配置文件中,添加上述的GitHub注释配置块到annotations.list数组
  • 保存文件后,Grafana会自动加载更新(无需重启,或手动触发配置重载)

这种方式适合长期维护,后续新增仪表盘时可以直接复用配置模板。

3. 编写自定义脚本自动化

用Python/Shell脚本封装API操作,实现更灵活的批量处理(比如只更新特定标签的仪表盘),示例Python脚本片段:

import requests
import json

GRAFANA_URL = "http://你的Grafana地址"
API_KEY = "你的API密钥"
GITHUB_DS_NAME = "GitHub"
RELEASE_QUERY = "owner:你的组织名 repo:你的仓库名"

headers = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}

# 获取所有仪表盘
dash_list = requests.get(f"{GRAFANA_URL}/api/search?type=dash-db", headers=headers).json()

for dash in dash_list:
    # 获取仪表盘详情
    dash_detail = requests.get(f"{GRAFANA_URL}/api/dashboards/uid/{dash['uid']}", headers=headers).json()
    annotations = dash_detail['dashboard'].setdefault('annotations', {}).setdefault('list', [])
    
    # 避免重复添加
    if not any(anno.get('name') == 'GitHub Releases' for anno in annotations):
        new_anno = {
            "builtIn": 0,
            "datasource": GITHUB_DS_NAME,
            "enable": True,
            "hide": False,
            "iconColor": "rgba(0, 211, 255, 1)",
            "name": "GitHub Releases",
            "type": "github",
            "query": RELEASE_QUERY,
            "tag": ""
        }
        annotations.append(new_anno)
        
        # 更新仪表盘
        res = requests.put(f"{GRAFANA_URL}/api/dashboards/uid/{dash['uid']}", headers=headers, json=dash_detail)
        print(f"仪表盘{dash['title']}: {'更新成功' if res.status_code ==200 else '更新失败'}")

注意事项

  • 操作前务必备份仪表盘数据,防止配置丢失
  • 确保API密钥拥有仪表盘编辑权限
  • 确认Grafana中已配置好GitHub数据源,且名称与脚本/配置中的一致

内容的提问来源于stack exchange,提问作者edhgoose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 10:06:44