Полное руководство по управлению Grafana as code: инструменты, советы и хитрости

Vitalii Filiuchkov
5 min readDec 9, 2022

--

Оригинал: https://grafana.com/blog/2022/12/06/a-complete-guide-to-managing-grafana-as-code-tools-tips-and-tricks/

Мы все знаем о замечательных возможностях дашбордов Grafana, и их настройка as code позволяет получить от них еще больше.

В наши дни ресурсами Grafana в основном можно управлять как кодом декларативным способом, что позволяет проводить проверку кода, переиспользовать код и, в целом, улучшать рабочие процессы.

В этом руководстве представлены несколько инструментов as code, которые вы можете использовать для декларативного управления ресурсами Grafana, а также несколько советов и хитростей о том, как эффективно включить их в свои собственные варианты использования.

В этом руководстве рассматриваются такие инструменты, как Grafana Terraform provider, Grafana Ansible collection, Grafonnet, Grizzly, API-интерфейсы Grafana с GitHub actions и Crossplane.

Grafana Terraform provider

Администраторы Grafana могут управлять информационными панелями и оповещениями, добавлять синтетические пробы и проверки мониторинга, управлять идентификацией и доступом и многое другое, используя Terraform provider для Grafana.

Пример конфигурации Terraform для создания панели мониторинга выглядит следующим образом:

resource "grafana_dashboard" "metrics" {
config_json = jsonencode({
title = "as-code dashboard"
uid = "ascode"
})
}

Для начала, ознакомьтесь с руководствами по быстрому запуску для Grafana Terraform provider или с документацией провайдера.

Для кого?

Grafana Terraform provider лучше подходит для пользователей, которые уже используют Terraform для других целей, не связанных с Grafana.

Для пользователей, которые в настоящее время хотят управлять всей экосистемой ресурсов Grafana в Grafana Cloud или OSS-развертываниях Grafana, лучше всего использовать Grafana Terraform provider, поскольку он поддерживает большинство ресурсов Grafana по сравнению с другими решениями Grafana as code.

Известные ограничения

Управление информационными панелями — не самый простой процесс — пользователям приходится работать с длинными JSON, которые также может быть трудно просматривать и обновлять. Grafonnet может помочь с созданием dashboard JSON, который можно использовать в Terraform, но Grafonnet требует знания Jsonnet, так что это может быть непривлекательно для некоторых пользователей.

Grafana Ansible collection

Ресурсы для управления конфигурацией доступны для Grafana через Ansible collection for Grafana. Ее можно использовать для управления различными ресурсами, включая folders, cloud stacks и дашборды. Пользователи могут программно управлять ресурсами в Grafana, которые в настоящее время не являются частью коллекции Grafana Ansible, написав плейбуки, которые используют HTTP API для управления ресурсами Grafana.

Примечание: Ansible collection for Grafana находится в процессе объединения с community.grafana Ansible collection.

Пример конфигурации Ansible для создания панели мониторинга выглядит следующим образом:

- name: dashboard as code
grafana.grafana.dashboard:
dashboard: {
"title": "as-code dashboard",
"uid": "ascode"
}
stack_slug: "{{ stack_slug }}"
grafana_api_key: "{{ grafana_api_key }}"
state: present

Для кого?

Как и Terraform провайдер, коллекция Grafana Ansible лучше подходит для людей, уже использующих Ansible для случаев использования, отличных от Grafana. Кроме того, коллекция сейчас работает только для Grafana Cloud, поэтому она наиболее удобна для клиентов Grafana Cloud, которые хотят декларативно управлять ресурсами с помощью Ansible.

Известные ограничения

На момент написания статьи коллекция Grafana Ansible работает только для Grafana Cloud и поддерживает только восемь ресурсов: ключи API, cloud stacks, плагины, дашборды, папки, источники данных, контактные точки оповещения и политики уведомлений. Это может быть недостатком для пользователей, желающих управлять всей экосистемой Grafana в виде кода с помощью Ansible. Как и в случае с Terraform, создание информационной панели — не самый простой процесс.

Grizzly

Grizzly — это инструмент командной строки, который позволяет вам управлять вашими ресурсами наблюдаемости с помощью кода. Grizzly поддерживает представление YAML в стиле Kubernetes, для Grafana, что облегчает знакомство с ним. Grizzly поддерживает перемещение панелей мониторинга в экземплярах Grafana, а также извлекает информацию об уже подготовленных ресурсах Grafana. Grizzly в настоящее время поддерживает:

  • Grafana dashboards/folders
  • Источники данных Grafana (data sources)
  • Prometheus recording rules/alerts in Grafana Cloud
  • Проверки синтетического мониторинга Grafana Cloud

Grizzly также может развертывать панели мониторинга, созданные в Jsonnet, с помощью Grafonnet. (Подробнее читайте в документации Grafonnet).

Пример конфигурации Grizzly в стиле Kubernetes для создания панели мониторинга выглядит следующим образом:

apiVersion: grizzly.grafana.com/v1alpha1
kind: Dashboard
metadata:
name: as-code-dashboard
spec:
title: as-code dashboard
uid: ascode

Для кого?

Grizzly лучше всего подходит для пользователей, которые либо используют Jsonnet для управления ресурсами Grafana, либо предпочитают определение YAML в стиле Kubernetes для своих ресурсов Grafana.

Известные ограничения

В настоящее время Grizzly не поддерживает ресурсы Grafana OnCall и Grafana Alerting.

Grafana Crossplane provider

Grafana Crossplane provider создан с использованием Terrajet и обеспечивает поддержку всех ресурсов, поддерживаемых Grafana Terraform provider. Он позволяет пользователям определять ресурсы Grafana как манифесты Kubernetes, а также помогает пользователям, которые строят свои конвейеры GitOps на основе манифестов Kubernetes с помощью таких инструментов, как ArgoCD.

Чтобы начать работу с Grafana Crossplane provider, установите Crossplane в кластере Kubernetes и используйте эту команду для установки провайдера:

kubectl crossplane install provider grafana/crossplane-provider-grafana:v0.1.0

Во время установки провайдера CRD (Custom Resource Definition — специальный ресурс в Kubernetes, который позволяет вносить любые данные) для всех ресурсов, поддерживаемых провайдером Terraform, они добавляются в кластер, чтобы пользователи могли начать определять свои ресурсы Grafana как настраиваемые ресурсы Kubernetes. Crossplane provider гарантирует, что все, что определено в определениях пользовательских ресурсов, отображается в пользовательском интерфейсе Grafana. Если какие-либо изменения вносятся непосредственно в пользовательский интерфейс, они будут отменены, когда произойдет повторная синхронизация провайдера. Это помогает гарантировать, что все, что определено декларативно в кластере, будет источником истины для ресурсов Grafana.

Для начала, посмотрите примеры в репозитории Grafana Crossplane provider.

Пример определения пользовательского ресурса Kubernetes для создания панели мониторинга выглядит следующим образом:

apiVersion: grafana.jet.crossplane.io/v1alpha1
kind: Dashboard
metadata:
name: as-code-dashboard
spec:
forProvider:
configJson: |
{
"title": "as-code dashboard",
"uid": "ascode"
}
providerConfigRef:
name: grafana-crossplane-provider

Для кого?

Grafana Crossplane provider удобен для тех пользователей, кто уже использует Crossplane, и которые хотят управлять ресурсами Grafana из Kubernetes и в виде манифестов Kubernetes для конвейеров GitOps.

Известные ограничения

Grafana Crossplane provider зависит от наличия Crossplane CLI и Crossplane, установленных в кластере Kubernetes. Эта зависимость может быть непривлекательной для пользователей, не использующих Crossplane. Находится в альфе, поэтому еще не стабилен.

Kubernetes Grafana Operator

Grafana Operator — это оператор Kubernetes, предоставляющий и управляющий Grafana и ее ресурсами с помощью пользовательских ресурсов Kubernetes. Это нативное решение Kubernetes, созданное сообществом Grafana. Он также может использовать панели мониторинга, созданные в Grafonnet, в качестве источника конфигурации панели мониторинга.

Для начала обратитесь к разделу документации в репозитории grafana-operator.

Пример конфигурации Kubernetes для создания дашборда с помощью оператора Grafana выглядит так:

apiVersion: integreatly.org/v1alpha1
kind: GrafanaDashboard
metadata:
name: simple-dashboard
labels:
app: grafana
spec:
json: >
{
"title": "as-code dashboard",
“uid” : “ascode”
}

Для кого?

Grafana operator хорошо подходит для пользователей, которые хотят управлять ресурсами Grafana из Kubernetes, а также в качестве манифеста Kubernetes для конвейеров GitOps.

Известные ограничения

Работает только с Grafana OSS, поэтому пользователи Grafana Cloud не смогут его использовать. Кроме того, Grafana operator не имеет Helm-чарта, что может быть проблемой для организаций, имеющих конвейеры, построенные вокруг Helm.

Сравнение инструментов Grafana as code

Cравнительная таблица всех свойств и инструментов, упомянутых выше:

Большинство инструментов, определенных здесь, можно использовать в сочетании друг с другом

--

--

Vitalii Filiuchkov

SRE Lead in Cloud Division of the largest telecom operator in Russia