Grafonnet / Jsonnet
Тема дорожной карты · Grafana
Grafonnet — это библиотека на Jsonnet с открытым исходным кодом, поддерживаемая сообществом Grafana: она предоставляет типизированный, составной API для программной генерации JSON дашбордов Grafana, решая проблему управления большим числом похожих дашбордов без дублирования кода. Jsonnet — язык шаблонизации данных, расширяющий JSON переменными, функциями, импортами и условиями, что делает его идеальным для создания сложных, лаконичных определений дашбордов Grafana, которые было бы громоздко писать и поддерживать в виде чистого JSON. С Grafonnet вы создаёте дашборд, вызывая такие функции, как dashboard.new('My Dashboard'), panel.timeSeries.new('Request Rate') и datasource.prometheus.new('Prometheus'), а запуск jsonnet dashboard.jsonnet формирует полный JSON дашборда Grafana, готовый к провизионированию или импорту через API. Grafonnet версионируется и публикуется в реестре пакетов Jsonnet bundler (jb), поэтому вы фиксируете версию в jsonnetfile.json и выполняете jb install для загрузки библиотеки — обеспечивая согласованную генерацию дашбордов у всех участников команды и в CI-конвейерах. Подход Grafonnet к «Grafana как код» особенно проявляет свою силу, когда нужно сгенерировать десятки практически идентичных дашбордов — например, по одному для каждого пространства имён Kubernetes или каждого микросервиса — путём итерации по списку в Jsonnet и рендеринга каждого дашборда с соответствующей параметризацией.
Как это работает
Grafonnet / Jsonnet: YAML-файлы в /etc/grafana/provisioning/ декларируют data sources (datasources/*.yaml), дашборды (dashboards/*.yaml + пути к JSON), alerting-rules, notification policies, плагины. Читаются при старте Grafana; изменения требуют kill -HUP или рестарт. В паре с version control: dashboards-as-code. Инструменты: grafonnet (Jsonnet), grafana-foundation-sdk (Go/Python) или просто JSON. Helm chart kube-prometheus-stack provisions автоматически.
Когда применять
Provision data sources + критичные дашборды с первого дня — ручной setup невоспроизводим. Дашборды в git как JSON; auto-import через provisioning. Grafonnet или templating-слой — если много похожих дашбордов (per-service). Для очень динамических setup также работают Grafana HTTP API + Terraform-провайдер.
Типичные ошибки
Ловушки Grafonnet / Jsonnet: отредактировали дашборд в UI + provisioning откатывает на следующем рестарте (путает юзеров); JSON-дашборды с ручными правками вне исходника (дрейф); provisioning-пути внутри Grafana-контейнера без persistent volume (теряются при рестарте).