Info
Content

Grafana JSON Model

Дашборды в графане представляются json-объектами которые хранят метаданные дашборда. Метаданные включают в себя свойства дашборда, метаданные из панелей, переменные для шаблонизирования, запросы панелей итд

Когда пользователь создает новый дашборд, инициализируется json со следующими полями:
id - не известен пока дашборд не сохранят (айди назначает сервер)

{
  "id": null,
  "uid": "cLV5GDCkz",
  "title": "New dashboard",
  "tags": [],
  "timezone": "browser",
  "editable": true,
  "graphTooltip": 1,
  "panels": [],
  "time": {
    "from": "now-6h",
    "to": "now"
  },
  "timepicker": {
    "time_options": [],
    "refresh_intervals": []
  },
  "templating": {
    "list": []
  },
  "annotations": {
    "list": []
  },
  "refresh": "5s",
  "schemaVersion": 17,
  "version": 0,
  "links": []
}
Name Usage
id уникальный числовой идентификатор дашборда (выдается базой)
uid уникальный идентификатор дашборда который может быть сгенерирован кем угодно (например создателем дашборда)
title заголовок дашборда
tags тэги дашборда, массив строк
style тема дашборда dark/light
timezone таймзона дашборда utc/browser
editable можно ли редактировать дашборд
graphTooltip 0 - без общего прицела и подсказки
1 - общий прицел
2 - общий прицел и общая подсказка
time временной диапазон отображаемый дашбордом
timepicker timepicker metadata
templating templating metadata
annotations annotations metadata
refresh интервал автообновления
schemaVersion версия json схемы
version версия дашборда (число), инкрементируется после каждого обновления дашборда
panels массив панелей

Панели это строительные блоки дашборда, они содержат запросы к датасорсам, типы графиков, алиасы итд. JSON секции panels содержит массив JSON объектов, каждый из которых отражает отдельную панель
Многие поля являются общими для всех панелей, но некоторые поля зависят от типа панели
Ниже пример текстовой панели:

"panels": [
  {
    "type": "text",
    "title": "Panel Title",
    "gridPos": {
      "x": 0,
      "y": 0,
      "w": 12,
      "h": 9
    },
    "id": 4,
    "mode": "markdown",
    "content": "# title"
  }
]

Размер панели и позиционирование

  • w - 1-24 - ширина панели (ширина дашборда - 24)
  • h - высота панели в юнитах, каждый юнит по 30px
  • x - позиция по оси X, те же единицы измерения что и у w
  • y - позиция по оси Y, те же единицы измерения что и у h

Сетка имеет негативную гравитацию (панели двигаются вверх если их ничего не ограничивает в этом)

Пример: (click to expand)
...
"panels": [
  {
    "type": "text",
    "title": "Panel Custom Title",
    "gridPos": {
      "x": 0,
      "y": 0,
      "w": 12,
      "h": 9
    },
    "id": 1,
    "mode": "markdown",
    "content": "# title  \n__bold text__"
  },
  {
    "type": "text",
    "title": "Panel Custom Title #2",
    "gridPos": {
      "x": 6,
      "y": 1,
      "w": 12,
      "h": 9
    },
    "id": 1,
    "mode": "markdown",
    "content": "# title  \n__bold text__"
  }
],
...

Screenshot_2021_02_02-12_49_03-2023-11-20-at-16grafana-panels.png


timepicker
Это autorefresh выпадашка

"timepicker": {
    "collapse": false,
    "enable": true,
    "notice": false,
    "now": true,
    "refresh_intervals": [
      "5s",
      "10s",
      "30s",
      "1m",
      "5m",
      "15m",
      "30m",
      "1h",
      "2h",
      "1d"
    ],
    "status": "Stable",
    "type": "timepicker"
  }

Можно задать свои интервалы
Screenshot_2021_02_02-12_49_03-2023-11-20-at-16timepicker.png


templating
Секция templating содержит массив переменных для шаблонизации с их сохраненными значениями и с какими-то метаданными

Пример: (click to expand)
...
"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"
    }
  ]
},
...

Screenshot_2021_02_02-12_49_03-2023-11-20-at-16templating-result.png

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

Переменные

Переменная это плейсхолдер для значения
Можно использовать переменные в запросах метрик и в заголовках панелей
Когда ты выбираешь новое значение переменной с помощью выпадашки сверху дашборда - все панели перерисуются в соответствии с новым значением

Темплейт это запрос в котором используется переменная

Типы переменных

Variable Type Description
Query список значений полученный с помощью запроса в датасорс
Custom заранее описанный через запятую список возможных значений
Text box поле для ввода значения с опциональным дефолтным значением
Constant скрытая константа
Data source позволяет быстро менять датасорс для всего дашборда
Interval отображает временные отрезки
Ad hoc filters ключ=значение фильтр который применится ко всем запросам (работает не для всех датасорсов)
Global variables встроенные переменные которые могут быть использованы в запросах
Chained variables запрос переменной может содержать другую переменную

Чтобы применить переменную можно использовать два синтаксиса

  • $varname - этот синтаксис простой но не позволяет использовать переменную посреди слова
  • ${var_name} - этот синтаксис уже позволяет использовать переменную внутри какого-то слова
  • ${var_name:<format>} - этот синтаксис дает больше контроля над тем как графана будет раскрывать значение тут описаны возможные форматы
No Comments
Back to top