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
- высота панели в юнитах, каждый юнит по 30pxx
- позиция по оси 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__"
}
],
...
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"
}
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"
}
]
},
...
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