Provisioning дашбордов¶
Источник данных готов. Теперь надо бы что-то показывать. Дашборды.
В отличие от источников данных, Provisioning дашбордов работает через два файла: конфиг dashboard provider'а и собственно JSON-файлы дашбордов. Идея: у вас есть папка с JSON-файлами дашбордов, а Grafana указываете на неё.
Конфиг провайдера дашбордов¶
Помните, в первой главе мы говорили, что дашборд в Grafana — это JSON-объект? именно этот JSON вы и будете хранить в Git. Провайдер (dashboards.yml) — настройка, которая говорит Grafana, где искать JSON-файлы и как с ними обращаться:
apiVersion: 1
providers:
- name: 'default'
orgId: 1
folder: 'Телеметрия'
type: file
allowUiUpdates: false
disableDeletion: true
updateIntervalSeconds: 60
options:
path: /etc/grafana/provisioning/dashboards/default
По полям:
type: file— единственный режим; Grafana читает JSONы из папки.allowUiUpdates: false— а это ключевой параметр. Когдаtrue, пользователь может редактировать дашборд через UI и сохранить изменения в базу Grafana. JSON-оригинал в файле не изменится. При следующем рестарте, или истеченииupdateIntervalSeconds(см. ниже), Grafana перезапишет БД из файла и ваши правки через UI пропадут. Вывод: ставимfalse. Пусть все правки идут только через Git.disableDeletion: true: если удалили JSON-файл, Grafana не удалит дашборд из базы. Останется "сирота". Удобно, чтобы случайно не потерять данные при сборке. Противоположность —false, тогда Grafana сама подчищает.updateIntervalSeconds: как часто Grafana перечитывает файлы и обновляет БД. 60 секунд — нормально. Или перезагружайте Grafana.
Структура папок¶
Рекомендованная структура:
provisioning/
dashboards/
dashboards.yaml
default/
infrastructure.json
applications.json
business/
weekly.json
reports.json
То есть каждая "группа дашбордов" — отдельная папка и отдельный provider config. Так удобнее: при добавлении пары дашбордов не перечислять их вручную, а просто положить JSON.
folder vs folderUid¶
Вы можете разместить дашборд в заранее созданной в Grafana папке. Для этого укажите либо её имя folder: 'Телеметрия', либо уникальный идентификатор folderUid: 'abc-123'. Второе надёжнее, потому что UID не меняется при переименовании папки. Если папка не существует — Grafana создаст её.
Как узнать UID папки? Через API: GET /api/folders. Или посмотреть в URL, когда вы зашли в папку через UI: /dashboards/f/abc-123/....
Создание самого JSON дашборда¶
Когда дашборды provisioning'ируются первый раз, возникает вопрос: а откуда берутся JSON-файлы?
Три варианта:
-
Экспорт из UI: создаёте дашборд в песочнице, доводите до совершенства, нажимаете Share → Export → Save as JSON. Получаете JSON-файл. Кладёте его в папку. Так всё и делается в реальном мире: сначала прототип вручную, потом Provisioning.
-
Генерация кодом: Grafonnet (Jsonnet) или grafanalib (Python). Но это уже тема для главы про Grafana-as-Code.
-
Генерация через Terraform: да, Terraform умеет создавать дашборды ресурсом
grafana_dashboard.
Change Version Check¶
Grafana 13.1.3 поддерживает опциональный version в провайдере:
providers:
- name: 'default'
...
changeVersion: false
При false Grafana не проверяет изменения в JSON-файлах, ускоряя старт. Полезно, когда у вас тысяча дашбордов и старт становится заметно медленным. Но тогда updateIntervalSeconds не работает — изменения в дашбордах не будут применяться до рестарта Grafana.
Далее: Provisioning алертов