Grafana 是一款采用 go 语言编写的开源应用,主要用于大规模指标数据的可视化展现,是运维工具中最流行的时序数据展示工具,目前已经支持绝大部分常用的时序数据库。同时它也提供了许多常用操作的API接口,可以通过调用相关API接口,实现grafana运维的自动化操作。

一、创建API token

调用grafana的api请求时,需要在请求头中添加token认证,首先是创建api token

image.png

image.png

image.png

点击add按钮以后会返回一个token,妥善保存这个token,后续的所有请求都需要用到它。

二、常用API接口

1. 仪表盘 API

  • 查询所有dashboard列表

image.png

  • 查询指定uid的dashboard信息(uid字段可以从刚才查询所有dashboard中获取)

image.png

  • 删除指定uid的dashboard

image.png

2. 数据源API

  • 获取所有数据源

image.png

  • 查询指定id的数据源

image.png

  • 查询指定名称数据源

image.png

  • 更新指定id的数据源(可以先查询指定id的数据源,获取响应内容,然后修改相关的字段组成请求体。body类型选择json)

image.png

  • 删除指定id的数据源

image.png

3. 告警API

  • 获取所有告警列表

image.png

  • 查询指定id的告警信息

image.png

  • 暂停指定id的告警

image.png

三、python调用grafana API示例

import json
import requests


class GrafanaApi:
    def __init__(self, base, key):
        self.base_url = 'grafana访问地址'
        self.headers = {'Authorization': 'API token', 'content-type': "application/json"}

    def get_all_datasource(self):
        """
        获取所有数据源
        """
        api_url = self.base_url + '/api/datasources'
        response = requests.get(api_url, headers=self.headers, verify=False, timeout=120)
        if response.status_code == 200:
            res = response.json()
            ……
            return result
        else:
            return False


    def get_dashboard_uid(self, name):
        """
        查询指定dashboard的uid
        """
        api_url = self.base_url + '/api/search?query=' + name
        response = requests.get(api_url, headers=self.headers, verify=False, timeout=120)
        if response.status_code == 200:
            res = response.json()
            ……
        else:
            return False

    def get_dashboard_data(self, uid):
        """
        查询指定dashboard的data
        """
        api_url = self.base_url + '/api/dashboards/uid/' + uid
        response = requests.get(api_url, headers=self.headers, verify=False, timeout=120)
        if response.status_code == 200:
            res = response.json()['dashboard']
            ……
        else:
            return False

    def get_all_alert(self):
        """
        获取所有告警列表
        """
        api_url = self.base_url + '/api/alerts'
        response = requests.get(api_url, headers=self.headers, verify=False, timeout=120)
        if response.status_code == 200:
            res = response.json()
            ……
        else:
            return False

以上只列举了常用的API接口使用,其他API接口详细使用方法请参阅官方文档https://grafana.com/docs/grafana/latest/http_api/

0 子项 · 1 次浏览 · 2026-09-24