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-представлению дашборда:

  1. Перейдите к нужному дашборду.
  2. Нажмите Edit в правом верхнем углу.
  3. На панели инструментов нажмите значок Dashboard options.
  4. В боковой панели нажмите Settings.
  5. Перейдите на вкладку JSON Model.
  6. Завершив правку JSON, нажмите Save changes в нижней части вкладки.
  7. Нажмите Back, затем Exit edit.

Модель ресурсов V2

Подробное описание схемы модели ресурсов V2 приведено в документации Swagger.

Модель ресурсов V1

Схема модели ресурсов V1 оформляет схему классической JSON-модели как ресурс в стиле Kubernetes. Свойство spec схемы содержит модель этой схемы в классическом стиле.

Подробное описание схемы модели ресурсов V1 приведено в документации Swagger. В следующем фрагменте кода показаны поля, входящие в модель ресурсов V1:

JSON
{
  "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 присваивается целочисленное значение.

JSON
{
  "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 дашборда:

Name Usage
id уникальный числовой идентификатор дашборда (генерируется базой данных)
uid уникальный идентификатор дашборда, который может сгенерировать кто угодно. Строка (8–40)
title текущее название дашборда
tags теги, связанные с дашбордом; массив строк
style тема оформления дашборда, например dark или light
timezone часовой пояс дашборда, например utc или browser
editable можно ли редактировать дашборд
graphTooltip 0 — без общего перекрестия и подсказки (по умолчанию), 1 — общее перекрестие, 2 — общее перекрестие И общая подсказка
time временной диапазон дашборда, например последние 6 часов, последние 7 дней и т. д.
timepicker метаданные выбора времени, подробности см. в разделе timepicker
templating метаданные шаблонизации, подробности см. в разделе templating
annotations метаданные аннотаций; о том, как их добавлять, см. в разделе Аннотации
refresh интервал автоматического обновления
schemaVersion версия JSON-схемы (целое число), увеличивается каждый раз, когда обновление Grafana вносит изменения в эту схему
version версия дашборда (целое число), увеличивается при каждом обновлении дашборда
panels массив панелей, подробности ниже.

Панели

Панели — это строительные блоки дашборда. Они состоят из запросов к источникам данных, типов графиков, псевдонимов и т. д. JSON панели представляет собой массив JSON-объектов, каждый из которых описывает отдельную панель. Большинство полей общие для всех панелей, но некоторые поля зависят от типа панели. Ниже приведён пример JSON панели типа text.

JSON
"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

JSON
"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"
  }

Назначение полей описано ниже:

Name Usage
collapse свёрнут ли выбор времени
enable включён ли выбор времени
notice
now
hidden скрыт ли выбор времени
nowDelay переопределяет текущее время, вводя задержку. Используйте эту опцию, чтобы учесть известные задержки агрегации данных и избежать появления пустых значений.
quick_ranges пользовательские быстрые диапазоны
refresh_intervals варианты интервалов, доступные в раскрывающемся списке обновления
status
type

templating

Поле templating содержит массив шаблонных переменных с сохранёнными значениями и некоторые другие метаданные, например:

JSON
 "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 описано ниже:

Name Usage
enable включена ли шаблонизация
list массив объектов, каждый из которых описывает одну шаблонную переменную
allFormat формат, используемый при получении всех значений из источника данных, например wildcard, glob, regex, pipe и т. д.
current показывает текст/значение выбранной в данный момент переменной на дашборде
data source показывает источник данных для переменных
includeAll доступна ли опция «все значения»
multi можно ли выбирать несколько значений из списка значений переменной
multiFormat формат, используемый при получении временных рядов из источника данных
name имя переменной
options массив пар текст/значение переменной, доступных для выбора на дашборде
query запрос к источнику данных, используемый для получения значений переменной
refresh определяет, когда следует обновлять переменную
regex извлекает часть имени ряда или сегмента узла метрики
type тип переменной, например custom, query или interval