API дашбордов
Note
Доступно в Grafana 12 и более поздних версиях.
Этот API соответствует новой структуре API Grafana. Дополнительные сведения см. в документации о структуре API в Grafana.
Этот документ может не содержать последнюю версию API. Самый актуальный список доступных конечных точек см. в dashboard.grafana.app/v2 в Swagger.
Требования
Если вы используете Grafana Enterprise, для некоторых конечных точек потребуются определённые права. Дополнительные сведения см. в разделе Права управления доступом на основе ролей.
Конечные точки
Создание дашборда
POST /apis/dashboard.grafana.app/v1/namespaces/:namespace/dashboards
Создаёт новый дашборд.
- namespace: подробнее о том, какое пространство имён использовать, см. в обзоре API.
Требуемые права
Пояснения см. в примечании во введении.
Пример запроса на создание:
POST /apis/dashboard.grafana.app/v1/namespaces/default/dashboards HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer <SERVICE_ACCOUNT_TOKEN>
{
"metadata": {
"name": "gdxccn",
"annotations": {
"grafana.app/folder": "fef30w4jaxla8b"
},
},
"spec": {
"annotations": {
"list": [
{
"datasource": {
"type": "datasource",
"uid": "grafana"
},
"enable": true,
"hide": false,
"iconColor": "red",
"name": "Example annotation",
"target": {
"limit": 100,
"matchAny": false,
"tags": [],
"type": "dashboard"
}
}]
},
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
"links": [
{
"asDropdown": false,
"icon": "external link",
"includeVars": false,
"keepTime": false,
"tags": [],
"targetBlank": false,
"title": "Example Link",
"tooltip": "",
"type": "dashboards",
"url": ""
}
],
"panels": [
{
"datasource": {
"type": "datasource",
"uid": "grafana"
},
"description": "With a description",
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 0,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "auto",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green"
},
{
"color": "red",
"value": 80
}
]
}
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 0
},
"id": 1,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "single",
"sort": "none"
}
},
"pluginVersion": "12.0.0",
"targets": [
{
"datasource": {
"type": "datasource",
"uid": "grafana"
},
"refId": "A"
}
],
"title": "Example panel",
"type": "timeseries"
}
],
"preload": false,
"schemaVersion": 41,
"tags": ["example"],
"templating": {
"list": [
{
"current": {
"text": "",
"value": ""
},
"definition": "",
"description": "example description",
"label": "ExampleLabel",
"name": "ExampleVariable",
"options": [],
"query": "",
"refresh": 1,
"regex": "cluster",
"type": "query"
}
]
},
"time": {
"from": "now-6h",
"to": "now"
},
"timepicker": {},
"timezone": "browser",
"title": "Example Dashboard",
"version": 0
}
}
Схема тела JSON:
- metadata.name – уникальный идентификатор Grafana. Если вы не хотите его указывать, задайте вместо него metadata.generateName как префикс для случайно сгенерированного uid (не может быть пустой строкой).
- metadata.annotations.grafana.app/folder — необязательное поле, уникальный идентификатор папки, в которой должен быть создан дашборд.
- spec – json дашборда.
Note
Настраиваемые метки и аннотации в поле metadata поддерживаются на некоторых экземплярах, полная поддержка запланирована для всех экземпляров, когда эти API станут общедоступными. Если они пока не поддерживаются на вашем экземпляре, они будут игнорироваться.
Пример ответа:
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Content-Length: 485
{
"kind": "Dashboard",
"apiVersion": "dashboard.grafana.app/v1",
"metadata": {
"name": "gdxccn",
"namespace": "default",
"uid": "Cc7fA5ffHY94NnHZyMxXvFlpFtOmkK3qkBcVZPKSPXcX",
"resourceVersion": "1",
"generation": 1,
"creationTimestamp": "2025-04-24T20:35:29Z",
"labels": {
"grafana.app/deprecatedInternalID": "11"
},
"annotations": {
"grafana.app/createdBy": "service-account:dejwtrofg77y8d",
"grafana.app/folder": "fef30w4jaxla8b"
},
"managedFields": [
{
"manager": "curl",
"operation": "Update",
"apiVersion": "dashboard.grafana.app/v0alpha1",
"time": "2025-04-24T20:35:29Z",
"fieldsType": "FieldsV1",
"fieldsV1": {
"f:spec": {
"f:annotations": {
".": {},
"f:list": {}
},
"f:editable": {},
"f:fiscalYearStartMonth": {},
"f:graphTooltip": {},
"f:links": {},
"f:panels": {},
"f:preload": {},
"f:schemaVersion": {},
"f:tags": {},
"f:templating": {
".": {},
"f:list": {}
},
"f:time": {
".": {},
"f:from": {},
"f:to": {}
},
"f:timepicker": {},
"f:timezone": {},
"f:title": {},
"f:version": {}
}
}
}
]
},
"spec": {
"annotations": {
"list": [
{
"datasource": {
"type": "datasource",
"uid": "grafana"
},
"enable": true,
"hide": false,
"iconColor": "red",
"name": "Example annotation",
"target": {
"limit": 100,
"matchAny": false,
"tags": [],
"type": "dashboard"
}
}
]
},
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
"links": [
{
"asDropdown": false,
"icon": "external link",
"includeVars": false,
"keepTime": false,
"tags": [],
"targetBlank": false,
"title": "Example Link",
"tooltip": "",
"type": "dashboards",
"url": ""
}
],
"panels": [
{
"datasource": {
"type": "datasource",
"uid": "grafana"
},
"description": "With a description",
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 0,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "auto",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green"
},
{
"color": "red",
"value": 80
}
]
}
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 0
},
"id": 1,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "single",
"sort": "none"
}
},
"pluginVersion": "12.0.0",
"targets": [
{
"datasource": {
"type": "datasource",
"uid": "grafana"
},
"refId": "A"
}
],
"title": "Example panel",
"type": "timeseries"
}
],
"preload": false,
"schemaVersion": 41,
"tags": [
"example"
],
"templating": {
"list": [
{
"current": {
"text": "",
"value": ""
},
"definition": "",
"description": "example description",
"label": "ExampleLabel",
"name": "ExampleVariable",
"options": [],
"query": "",
"refresh": 1,
"regex": "cluster",
"type": "query"
}
]
},
"time": {
"from": "now-6h",
"to": "now"
},
"timepicker": {},
"timezone": "browser",
"title": "Example Dashboard"
},
"status": {}
Коды состояния:
- 201 – Создано
- 400 – Ошибки (некорректный json, отсутствующие или недопустимые поля и т. д.)
- 401 – Не авторизован
- 403 – Доступ запрещён
- 409 – Конфликт (дашборд с таким же uid уже существует)
Обновление дашборда
PUT /apis/dashboard.grafana.app/v1/namespaces/:namespace/dashboards/:uid
Обновляет существующий дашборд по uid дашборда.
- namespace: подробнее о том, какое пространство имён использовать, см. в обзоре API.
- uid: уникальный идентификатор обновляемого дашборда. Это будет name в ответе дашборда
Требуемые права
Пояснения см. в примечании во введении.
Пример запроса на обновление:
POST /apis/dashboard.grafana.app/v1/namespaces/default/dashboards/gdxccn HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer <SERVICE_ACCOUNT_TOKEN>
{
"metadata": {
"name": "gdxccn",
"annotations": {
"grafana.app/folder": "fef30w4jaxla8b",
"grafana.app/message": "commit message"
},
},
"spec": {
"title": "New dashboard - updated",
"schemaVersion": 41,
...
}
}
Схема тела JSON:
- metadata.name – уникальный идентификатор.
- metadata.annotations.grafana.app/folder — необязательное поле, уникальный идентификатор папки, в которой должен быть создан дашборд.
- metadata.annotations.grafana.app/message — необязательное поле для задания сообщения коммита для истории версий.
- spec – json дашборда.
Note
Настраиваемые метки и аннотации в поле metadata поддерживаются на некоторых экземплярах, полная поддержка запланирована для всех экземпляров, когда эти API станут общедоступными. Если они пока не поддерживаются на вашем экземпляре, они будут игнорироваться.
Пример ответа:
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Content-Length: 485
{
"kind": "Dashboard",
"apiVersion": "dashboard.grafana.app/v1",
"metadata": {
"name": "gdxccn",
"namespace": "default",
"uid": "Cc7fA5ffHY94NnHZyMxXvFlpFtOmkK3qkBcVZPKSPXcX",
"resourceVersion": "2",
"generation": 2,
"creationTimestamp": "2025-03-06T19:57:18Z",
"annotations": {
"grafana.app/folder": "fef30w4jaxla8b",
"grafana.app/createdBy": "service-account:cef2t2rfm73lsb",
"grafana.app/updatedBy": "service-account:cef2t2rfm73lsb",
"grafana.app/updatedTimestamp": "2025-03-07T02:58:36Z"
}
},
"spec": {
"schemaVersion": 41,
"title": "New dashboard - updated",
...
}
}
Коды состояния:
- 200 – OK
- 400 – Ошибки (некорректный json, отсутствующие или недопустимые поля и т. д.)
- 401 – Не авторизован
- 403 – Доступ запрещён
- 409 – Конфликт (дашборд с такой же версией уже существует)
Получение дашборда
GET /apis/dashboard.grafana.app/v1/namespaces/:namespace/dashboards/:uid
Возвращает дашборд по uid дашборда.
- namespace: подробнее о том, какое пространство имён использовать, см. в обзоре API.
- uid: уникальный идентификатор обновляемого дашборда. Это будет name в ответе дашборда
Требуемые права
Пояснения см. в примечании во введении.
Пример запроса на получение:
GET /apis/dashboard.grafana.app/v1/namespaces/default/dashboards/gdxccn HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer <SERVICE_ACCOUNT_TOKEN>
Пример ответа:
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Content-Length: 485
{
"kind": "Dashboard",
"apiVersion": "dashboard.grafana.app/v1",
"metadata": {
"name": "gdxccn",
"namespace": "default",
"uid": "Cc7fA5ffHY94NnHZyMxXvFlpFtOmkK3qkBcVZPKSPXcX",
"resourceVersion": "2",
"generation": 2,
"creationTimestamp": "2025-03-06T19:57:18Z",
"annotations": {
"grafana.app/createdBy": "service-account:cef2t2rfm73lsb",
"grafana.app/updatedBy": "service-account:cef2t2rfm73lsb",
"grafana.app/updatedTimestamp": "2025-03-07T02:58:36Z"
}
},
"spec": {
"schemaVersion": 41,
"title": "New dashboard - updated",
...
}
}
Коды состояния:
- 200 – OK
- 401 – Не авторизован
- 403 – Доступ запрещён
- 404 – Не найдено
Получение дополнительной информации о доступе
GET /apis/dashboard.grafana.app/v1/namespaces/:namespace/dashboards/:uid/dto
Возвращает дашборд с дополнительной информацией о доступе.
Ответ GET включает дополнительный раздел access с данными, например о том, является ли дашборд публичным, а также о правах на дашборд (admin, editor) пользователя, выполнившего запрос.
Получение списка дашбордов
GET /apis/dashboard.grafana.app/v1/namespaces/:namespace/dashboards
Возвращает список всех дашбордов в данной организации. Максимальным количеством возвращаемых дашбордов можно управлять с помощью параметра запроса limit. Затем можно использовать возвращённый токен continue для получения следующей страницы дашбордов.
- namespace: подробнее о том, какое пространство имён использовать, см. в обзоре API.
Параметры запроса:
limit(необязательно): максимальное количество возвращаемых дашбордовcontinue(необязательно): токен продолжения из предыдущего ответа для получения следующей страницы
Требуемые права
Пояснения см. в примечании во введении.
Пример запроса на получение:
GET /apis/dashboard.grafana.app/v1/namespaces/default/dashboards?limit=1 HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer <SERVICE_ACCOUNT_TOKEN>
Пример ответа:
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Content-Length: 644
{
"kind": "DashboardList",
"apiVersion": "dashboard.grafana.app/v1alpha1",
"metadata": {
"resourceVersion": "1741315830000",
"continue": "eyJvIjoxNTIsInYiOjE3NjE3MDQyMjQyMDcxODksInMiOmZhbHNlfQ=="
},
"items": [
{
"kind": "Dashboard",
"apiVersion": "dashboard.grafana.app/v1alpha1",
"metadata": {
"name": "gpqcmf",
"namespace": "default",
"uid": "VQyL7pNTpfGPNlPM6HRJSePrBg5dXmxr4iPQL7txLtwX",
"resourceVersion": "1",
"generation": 1,
"creationTimestamp": "2025-03-06T19:50:30Z",
"annotations": {
"grafana.app/createdBy": "service-account:cef2t2rfm73lsb",
"grafana.app/updatedBy": "service-account:cef2t2rfm73lsb",
"grafana.app/updatedTimestamp": "2025-03-06T19:50:30Z"
}
},
"spec": {
"schemaVersion": 41,
"title": "New dashboard",
"uid": "gpqcmf",
"version": 1,
...
}
}
]
}
Поле metadata.continue содержит токен для получения следующей страницы.
Пример последующего запроса с использованием токена продолжения:
GET /apis/dashboard.grafana.app/v1/namespaces/default/dashboards?limit=1&continue=eyJvIjoxNTIsInYiOjE3NjE3MDQyMjQyMDcxODksInMiOmZhbHNlfQ== HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer <SERVICE_ACCOUNT_TOKEN>
Пример последующего ответа:
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
{
"kind": "DashboardList",
"apiVersion": "dashboard.grafana.app/v1alpha1",
"items": [
{
"kind": "Dashboard",
"apiVersion": "dashboard.grafana.app/v1alpha1",
"metadata": {
"name": "hpqcmg",
"namespace": "default",
"uid": "WQyL7pNTpfGPNlPM6HRJSePrBg5dXmxr4iPQL7txLtwY",
"resourceVersion": "1",
"generation": 1,
"creationTimestamp": "2025-03-06T19:51:31Z",
"annotations": {
"grafana.app/createdBy": "service-account:cef2t2rfm73lsb",
"grafana.app/updatedBy": "service-account:cef2t2rfm73lsb",
"grafana.app/updatedTimestamp": "2025-03-06T19:51:31Z"
}
},
"spec": {
"schemaVersion": 41,
"title": "Another dashboard",
"uid": "hpqcmg",
"version": 1,
...
}
}
]
}
Продолжайте выполнять запросы с обновлённым токеном continue, пока не получите ответ без поля continue в метаданных, что означает, что вы достигли последней страницы.
Коды состояния:
- 200 – OK
- 401 – Не авторизован
- 403 – Доступ запрещён
Получение истории дашборда
Вы можете получить полную историю версий дашборда, используя конечную точку List с определёнными параметрами запроса. Подробности и примеры см. в разделе HTTP API истории ресурсов.
Удаление дашборда
DELETE /apis/dashboard.grafana.app/v1/namespaces/:namespace/dashboards/:uid
Удаляет дашборд по uid дашборда.
namespace: подробнее о том, какое пространство имён использовать, см. в обзоре API.uid: уникальный идентификатор обновляемого дашборда. Это полеmetadata.nameв ответе дашборда, а не полеmetadata.uid.
Требуемые права
Пояснения см. в примечании во введении.
Пример запроса на удаление:
DELETE /apis/dashboard.grafana.app/v1/namespaces/default/dashboards/gdxccn HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer <SERVICE_ACCOUNT_TOKEN>
Пример ответа:
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Content-Length: 78
{
"kind": "Status",
"apiVersion": "v1",
"metadata": {},
"status": "Success",
"details": {
"name": "gdxccn",
"group": "dashboard.grafana.app",
"kind": "dashboards",
"uid": "Cc7fA5ffHY94NnHZyMxXvFlpFtOmkK3qkBcVZPKSPXcX"
}
}
Коды состояния:
- 200 – OK
- 401 – Не авторизован
- 403 – Доступ запрещён
- 404 – Не найдено