JSON-модель дашборда
Дашборды Grafana представляются в виде JSON-объектов, в которых хранятся метаданные, панели, переменные и настройки.
Различные модели схемы дашборда
В настоящее время существует три модели JSON-схемы дашборда:
- V2 Resource: актуальная схема, поддерживающая новые возможности, такие как расширенные макеты и условный рендеринг. В ней все элементы дашборда моделируются как виды (kinds) Kubernetes — в соответствии с соглашениями Kubernetes об объявлении компонентов дашборда.
- V1 Resource: классическая схема дашборда, оформленная как ресурс в стиле Kubernetes. Её свойство
specсодержит классическую модель схемы. Эта модель была форматом по умолчанию для обмена данными по API между Grafana v12.2.0 и v13.0.0 и использовалась для экспорта, импорта и предоставления общего доступа к дашбордам. - Classic: ресурс, не относящийся к Kubernetes, который был форматом по умолчанию до Grafana v12.2.0. Широко применялся для экспорта, импорта и предоставления общего доступа к дашбордам в коллекции дашбордов Grafana на grafana.com/dashboards. Дашборды, созданные с использованием этой модели, можно экспортировать как в ней самой, так и в формате V2.
Note
Observability as Code работает с обеими версиями JSON-модели, но полностью совместим с версией 2.
Доступ и обновление JSON-модели
Чтобы получить доступ к JSON-представлению дашборда:
- Перейдите к нужному дашборду.
- Нажмите Edit в правом верхнем углу.
- На панели инструментов нажмите значок Dashboard options.
- В боковой панели нажмите Settings.
- Перейдите на вкладку JSON Model.
- Завершив правку JSON, нажмите Save changes в нижней части вкладки.
- Нажмите Back, затем Exit edit.
Модель ресурсов V2
Подробное описание схемы модели ресурсов V2 приведено в документации Swagger.
Модель ресурсов V1
Схема модели ресурсов V1 оформляет схему классической JSON-модели как ресурс в стиле Kubernetes.
Свойство spec схемы содержит модель этой схемы в классическом стиле.
Подробное описание схемы модели ресурсов V1 приведено в документации Swagger. В следующем фрагменте кода показаны поля, входящие в модель ресурсов V1:
{
"apiVersion": "dashboard.grafana.app/v1",
"kind": "Dashboard",
"metadata": {
"name": "isnt5ss",
"namespace": "stacks-521104",
"uid": "92674c0e-0360-4bb4-99ab-fb150581376d",
"resourceVersion": "1764705030717045",
"generation": 1,
"creationTimestamp": "2025-12-02T19:50:30Z",
"labels": {
"grafana.app/deprecatedInternalID": "1329"
},
"annotations": {
"grafana.app/createdBy": "user:u000000002",
"grafana.app/folder": "",
"grafana.app/saved-from-ui": "Grafana Cloud (instant)"
}
},
"spec": {
"annotations": {
"list": [
{
"builtIn": 1,
"datasource": {
"type": "grafana",
"uid": "-- Grafana --"
},
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations & Alerts",
"type": "dashboard"
}
]
},
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
"id": 1329,
"links": [],
"panels": [],
"preload": false,
"schemaVersion": 42,
"tags": [],
"templating": {
"list": []
},
"time": {
"from": "now-6h",
"to": "now"
},
"timepicker": {},
"timezone": "Africa/Abidjan",
"title": "Graphite suggestions",
"uid": "isnt5ss",
"version": 1,
"weekStart": ""
},
"status": {}
}
Классическая модель
При создании нового дашборда в самостоятельно развёрнутой Grafana новый JSON-объект дашборда инициализировался следующими полями:
Note
В приведённом ниже JSON для
idпоказано значение null — это значение по умолчанию, которое присваивается полю до сохранения дашборда. После сохранения дашборда полюidприсваивается целочисленное значение.
{
"id": null,
"uid": "cLV5GDCkz",
"title": "New dashboard",
"tags": [],
"timezone": "browser",
"editable": true,
"graphTooltip": 1,
"panels": [],
"time": {
"from": "now-6h",
"to": "now"
},
"timepicker": {
"refresh_intervals": []
},
"templating": {
"list": []
},
"annotations": {
"list": []
},
"refresh": "5s",
"schemaVersion": 17,
"version": 0,
"links": []
}
Ниже описано назначение каждого поля в JSON дашборда:
Панели
Панели — это строительные блоки дашборда. Они состоят из запросов к источникам данных, типов графиков, псевдонимов и т. д. JSON панели представляет собой массив JSON-объектов, каждый из которых описывает отдельную панель. Большинство полей общие для всех панелей, но некоторые поля зависят от типа панели. Ниже приведён пример JSON панели типа text.
"panels": [
{
"type": "text",
"title": "Panel Title",
"gridPos": {
"x": 0,
"y": 0,
"w": 12,
"h": 9
},
"id": 4,
"mode": "markdown",
"content": "# title"
}
Размер и положение панели
Свойство gridPos описывает размер и положение панели в координатах сетки.
wот 1 до 24 (ширина дашборда разделена на 24 колонки)hв единицах высоты сетки, каждая единица соответствует 30 пикселям.xпозиция по оси X в тех же единицах, что иw.yпозиция по оси Y в тех же единицах, что иh.
Сетка обладает отрицательной гравитацией: панели поднимаются вверх, если над панелью есть пустое пространство.
timepicker
"timepicker": {
"collapse": false,
"enable": true,
"notice": false,
"now": true,
"hidden": false,
"nowDelay": "",
"quick_ranges": [
{
"display": "Last 6 hours",
"from": "now-6h",
"to": "now"
},
{
"display": "Last 7 days",
"from": "now-7d",
"to": "now"
}
],
"refresh_intervals": [
"5s",
"10s",
"30s",
"1m",
"5m",
"15m",
"30m",
"1h",
"2h",
"1d"
],
"status": "Stable",
"type": "timepicker"
}
Назначение полей описано ниже:
templating
Поле templating содержит массив шаблонных переменных с сохранёнными значениями и некоторые другие метаданные, например:
"templating": {
"enable": true,
"list": [
{
"allFormat": "wildcard",
"current": {
"tags": [],
"text": "prod",
"value": "prod"
},
"datasource": null,
"includeAll": true,
"name": "env",
"options": [
{
"selected": false,
"text": "All",
"value": "*"
},
{
"selected": false,
"text": "stage",
"value": "stage"
},
{
"selected": false,
"text": "test",
"value": "test"
}
],
"query": "tag_values(cpu.utilization.average,env)",
"refresh": false,
"type": "query"
},
{
"allFormat": "wildcard",
"current": {
"text": "apache",
"value": "apache"
},
"datasource": null,
"includeAll": false,
"multi": false,
"multiFormat": "glob",
"name": "app",
"options": [
{
"selected": true,
"text": "tomcat",
"value": "tomcat"
},
{
"selected": false,
"text": "cassandra",
"value": "cassandra"
}
],
"query": "tag_values(cpu.utilization.average,app)",
"refresh": false,
"regex": "",
"type": "query"
}
]
}
Назначение перечисленных выше полей раздела templating описано ниже: