Provision Grafana Cloud с помощью Infrastructure as code

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

Note

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

Провайдер Grafana Terraform

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

В следующем примере показана конфигурация Terraform для создания панели:

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

Эта панель только создаёт саму панель и не добавляет никаких визуализаций или строк. Для начала обратитесь к руководствам по провайдеру Grafana Terraform или к документации Terraform Grafana Provider.

Для кого это рекомендуется?

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

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

Пользователям Grafana Fleet Management провайдер Grafana Terraform лучше всего подходит для предварительной регистрации новых коллекторов до начала их работы или для добавления удалённых атрибутов уже зарегистрированным в сервисе коллекторам.

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

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

Коллекция Grafana Ansible

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

В следующем примере показана конфигурация Ansible для создания панели:

YAML
- 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

Эта панель только создаёт саму панель и не добавляет никаких визуализаций или строк.

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

Для кого это рекомендуется?

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

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

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

Grafana Operator

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

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

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

YAML
apiVersion: integreatly.org/v1alpha1
kind: GrafanaDashboard
metadata:
  name: simple-dashboard
  labels:
    app: grafana
spec:
  instanceSelector:
    matchLabels:
      dashboards: <Grafana-custom-resource-name>
  json: >
    {
      "title": "as-code dashboard",
      “uid” : “ascode”
    }

Для кого это рекомендуется?

Grafana Operator особенно подходит для:

  • Команд, ищущих интегрированные решения для управления ресурсами Grafana внутри экосистемы кластера Kubernetes.
  • Команд, применяющих подход GitOps, который позволяет рассматривать конфигурации Grafana как код, хранить их рядом с манифестами приложений и выполнять версионируемые и автоматизированные развёртывания.

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

Хотя Grafana Operator упрощает многие аспекты эксплуатации Grafana и её ресурсов в Kubernetes, его текущая поддержка в основном сосредоточена на управлении панелями, папками и источниками данных. Такие расширенные возможности, как оповещения и плагины (работает только для OSS), пока не поддерживаются.

Провайдер Grafana Crossplane

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

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

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

Во время установки провайдера в кластер добавляются CRD для всех ресурсов, поддерживаемых провайдером Terraform, чтобы пользователи могли начать описывать свои ресурсы Grafana как пользовательские ресурсы Kubernetes. Провайдер Crossplane гарантирует, что в интерфейсе Grafana отображается именно то, что определено в определениях пользовательских ресурсов. Если изменения будут внесены напрямую в интерфейсе, при повторной синхронизации провайдера они будут отброшены. Это помогает гарантировать, что источником истины для ресурсов Grafana будет то, что определено в кластере кодом.

Для начала обратитесь к папке с примерами в репозитории Grafana Crossplane.

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

YAML
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 предназначен для существующих пользователей Crossplane, которые хотят управлять ресурсами Grafana изнутри Kubernetes и как манифестами Kubernetes для конвейеров GitOps.

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

Чтобы использовать провайдер Crossplane, у вас должны быть установлены Crossplane CLI и Crossplane в кластере Kubernetes. Учтите, что провайдер Crossplane находится на стадии alpha, поэтому он ещё не достиг стабильного состояния.

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

Следующая таблица сравнивает перечисленные выше свойства и инструменты.

Свойство/Инструмент Grafana Terraform Provider Grafana Ansible Collection Grafana Operator Grafana Crossplane Provider
Поддерживаемые ресурсы Grafana Все основные ресурсы Grafana Стек Grafana Cloud, плагины, ключи API, панели, источники данных и папки Панели, источники данных, папки Все основные ресурсы Grafana
Формат инструмента HCL/JSON YAML YAML YAML/JSON
Манифесты в стиле Kubernetes ✓ ✓
Простой процесс создания панелей ✓
Управление ресурсами через Kubernetes ✓ ✓
Получение сведений о ресурсах Grafana ✓
Встроенная синхронизация ресурсов ✓ ✓
Рекомендуется для Пользователей Terraform Пользователей Ansible Пользователей, управляющих ресурсами Grafana из Kubernetes Пользователей, управляющих ресурсами Grafana из Kubernetes