如何批量为所有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 - 遍历更新每个仪表盘:
- 针对每个仪表盘UID,请求获取完整的仪表盘JSON配置
curl -H "Authorization: Bearer YOUR_API_KEY" http://YOUR_GRAFANA_URL/api/dashboards/uid/{DASH_UID} - 在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": "" } - 发送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}
- 针对每个仪表盘UID,请求获取完整的仪表盘JSON配置
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
相关产品推荐
相关产品推荐

