本篇目录6 节

09进阶与生态Beyond

HTTP API 与自动化

界面能做的事,几乎都有对应的 /api 端点。本文讲服务账号与 API Key 的认证差异,给出创建用户、列仪表盘、改数据源的 curl 示例,并提醒速率限制与分页细节。

约 2 分钟/433 字/GRAFANA 12.X

能力边界与文档入口

Grafana 内置一套 REST API,仪表盘、数据源、用户、组织、告警等资源均可读写;完整的端点参考在实例的 /api-docs 页面与官方 HTTP API 文档。批量迁移、CI 里校验仪表盘 JSON、对接工单系统,基本都从这里入手。

认证:优先服务账号

方式 现状 适用
服务账号 + Token(Service account) 推荐 自动化与集成,可按账号授予 Viewer/Editor/Admin 角色
旧版 API Key 逐步淘汰 存量脚本,新代码不要再引入
Basic(用户名密码) 可用 仅限本机临时调试

Bearer Token 的用法统一是 Authorization: Bearer <token>。先创建一个服务账号并发 Token:

# 建服务账号,拿到数据库里的 id
curl -X POST "$GRAFANA/api/serviceaccounts" \
  -H "Authorization: Bearer $ADMIN_TOKEN" -H "Content-Type: application/json" \
  -d '{"name":"ci-bot","role":"admin","kind":"admin"}'

# 用返回的 id 换 Token(只显示一次,妥善保存)
curl -X POST "$GRAFANA/api/serviceaccounts/5/tokens" \
  -H "Authorization: Bearer $ADMIN_TOKEN" -H "Content-Type: application/json" \
  -d '{"name":"ci-token","role":"admin"}'

三个常用示例

# 1. 创建用户并设密码
curl -X POST "$GRAFANA/api/admin/users" \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"name":"zhang-san","login":"zhangsan","password":"...","email":"zs@example.com"}'

# 2. 列出全部仪表盘(搜索端点,starred/_tag 等参数可过滤)
curl -H "Authorization: Bearer $TOKEN" "$GRAFANA/api/search?type=dash-db&limit=1000"

# 3. 修改数据源:先 GET 拿到完整对象,改后整体 PUT 回去
curl -H "Authorization: Bearer $TOKEN" "$GRAFANA/api/datasources/uid/P297C7ABF4658D8C7" -o ds.json
# ...编辑 ds.json 的 url 字段...
curl -X PUT "$GRAFANA/api/datasources/1" \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d @ds.json

常用端点速查

端点 方法 用途
/api/health GET 存活检查,无需认证
/api/search GET 搜索仪表盘/文件夹/数据源
/api/dashboards/uid/<uid> GET / DELETE 取/删仪表盘(含 JSON)
/api/dashboards/db POST 创建或更新仪表盘
/api/datasources GET / POST 数据源列表与新建
/api/org/users GET / POST 组织成员管理
/api/alertmanager/grafana/api/v2/silences GET / POST 告警静默管理

速率、分页与幂等

  • 速率限制:新版实例可在配置中启用 API 限流,脚本批量调用前先确认策略(见配置文件 grafana.ini),收到 429 时退避重试而不是死循环。
  • 分页:列表类端点风格不一。/api/searchlimit,用户/团队类用 page + per_page,拿到结果先数一数是不是恰好一页,再判断要不要翻页。
  • 幂等POST /api/dashboards/dbuid 重复提交即更新,放心用于 CI;带 overwrite: true 可跳过版本冲突。

注意: 用 API 写仪表盘时 JSON 里的 version 字段管理并发,脚本请先 GET 再改再 POST,避免用缓存的旧 JSON 覆盖别人的修改。

下一步

本页为学习整理的中文改写,依据Grafana 官方文档最新版本编写(以 Grafana 12.x 为基准),操作路径请以实际产品界面为准。

Beyond