能否通过API添加Grafana自定义面板?Python自动部署需求咨询
使用Python自动为新入职组织添加Grafana自定义仪表板面板
Grafana Dashboard API核心说明(官方文档中文整理)
Grafana的Dashboard API支持通过HTTP请求完成仪表板的创建、更新与管理,核心规则如下:
- 核心端点:
POST /api/dashboards/db—— 若指定的仪表板UID不存在则创建新面板,存在则执行更新- 认证方式:请求头需携带
Authorization: Bearer <API密钥>,也可使用用户名+密码的基础认证方式- 请求体要求:必须包含
dashboard(仪表板的完整JSON配置)、folderId(存放目录ID,默认0为根目录)字段
实现步骤
1. 前置准备
- 从Grafana后台「配置」→「API密钥」生成具备
Editor或Admin权限的密钥,确保该密钥拥有创建仪表板、访问目标组织资源的权限 - 提前制作通用仪表板模板,将组织相关动态内容(如数据源过滤条件、面板标题中的组织名)替换为占位符(例:
{{ORG_ID}}、{{ORG_NAME}})
2. Python脚本实现
使用requests库调用API,完成模板占位符替换与面板创建:
import requests import json # 基础配置 GRAFANA_ADDR = "http://your-grafana-server.com" API_KEY = "your-generated-api-key" TARGET_FOLDER_ID = 0 # 根目录ID,可根据需求修改 def create_org_dashboard(org_id, org_name, template_file): # 加载预定义模板 with open(template_file, 'r', encoding='utf-8') as f: dash_template = json.load(f) # 替换组织相关占位符 dash_template["title"] = dash_template["title"].replace("{{ORG_NAME}}", org_name) # 遍历面板,替换查询语句中的组织ID占位符 for panel in dash_template["panels"]: if "targets" in panel: for target in panel["targets"]: if "{{ORG_ID}}" in target.get("expr", ""): target["expr"] = target["expr"].replace("{{ORG_ID}}", str(org_id)) # 构造请求体 req_payload = { "dashboard": dash_template, "folderId": TARGET_FOLDER_ID, "overwrite": False # 禁止覆盖已有同UID面板,需覆盖则设为True } # 发送API请求 req_headers = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json" } resp = requests.post( f"{GRAFANA_ADDR}/api/dashboards/db", headers=req_headers, data=json.dumps(req_payload) ) # 响应处理 if resp.status_code == 200: print(f"组织 {org_name}(ID:{org_id})的仪表板创建成功") return resp.json() else: print(f"创建失败:{resp.status_code} - {resp.text}") return None # 示例调用:新入职组织ID=12,名称=TechNew,模板文件路径=./org_dash_template.json create_org_dashboard(12, "TechNew", "./org_dash_template.json")
3. 集成到入职流程
- 将上述函数嵌入组织入职系统的触发逻辑中,确保能获取新组织的ID、名称等关键参数
- 可选添加重试机制,避免网络波动导致的创建失败
- 可结合日志记录,追踪每个组织的面板创建状态
注意事项
- 确保API密钥权限足够,避免因权限不足导致请求被拒
- 模板占位符需覆盖所有组织相关动态内容,包括查询条件、变量、标题等
- 若需为每个组织创建独立唯一的面板,可结合组织ID生成专属的
uid字段写入模板
内容的提问来源于stack exchange,提问作者Junaid umer
相关产品推荐
相关产品推荐

