Создание стека Grafana Cloud и управление им с помощью Ansible

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

Прежде чем начать

Перед началом убедитесь, что у вас есть следующее:

  • Учётная запись Grafana Cloud
  • Ansible, установленный на вашем компьютере

Установка коллекции Grafana Ansible

Установите коллекцию Grafana Ansible:

sh
ansible-galaxy collection install grafana.grafana

Эта коллекция предоставляет все модули, необходимые для управления стеками и ресурсами Grafana Cloud.

Создание стека Cloud

Сначала создайте политику доступа Grafana Cloud и получите токен. Он понадобится плейбуку Ansible, чтобы создать стек Grafana Cloud. Обратитесь к разделу Create a Grafana Cloud Access Policy.

Затем создайте файл плейбука Ansible. Этот плейбук создаёт стек Grafana Cloud с помощью модуля Cloud stack.

Для этого создайте файл с именем cloud-stack.yml и добавьте следующее:

YAML
- name: Create Grafana Cloud stack
  connection: local
  hosts: localhost

  vars:
    grafana_cloud_api_key: '<CLOUD_ACCESS_POLICY_TOKEN>'
    stack_name: '<STACK_NAME>'
    org_name: '<ORG_NAME>'

  tasks:
    - name: Create a Grafana Cloud stack
      grafana.grafana.cloud_stack:
        name: '{{ stack_name }}'
        stack_slug: '{{ stack_name }}'
        cloud_api_key: '{{ grafana_cloud_api_key }}'
        org_slug: '{{ org_name }}'
        delete_protection: true
        state: present
      register: stack_result

    - name: Display stack URL
      debug:
        msg: 'Stack created at: {{ stack_result.url }}'

Замените заполнители своими значениями:

  • <CLOUD_ACCESS_POLICY_TOKEN>: токен из политики доступа Cloud, созданной вами на портале Grafana Cloud
  • <STACK_NAME>: имя вашего стека
  • <ORG_NAME>: имя организации в Grafana Cloud

Плейбук сохраняет результат создания стека и выводит URL стека, который понадобится для последующего управления ресурсами.

Создание ключа API в вашем стеке Grafana

Создайте ключ API в стеке Grafana. Этот ключ понадобится, чтобы настроить Ansible на создание источников данных, папок и панелей.

  1. Войдите в свой экземпляр Grafana Cloud.
  2. Нажмите Administration и выберите API keys.
  3. Нажмите Add API key.
  4. В поле Key name введите имя ключа API.
  5. В поле Role выберите Admin или Editor, чтобы связать роль с этим ключом API.
  6. Нажмите Copy, чтобы сохранить его для дальнейшего использования.

Добавление ресурсов с помощью плейбуков

Добавление источника данных

В следующих шагах используется источник данных InfluxDB. Требуемые аргументы зависят от типа выбранного вами источника данных.

Создайте файл с именем data-source.yml:

YAML
- name: Add/Update data source
  connection: local
  hosts: localhost

  vars:
    grafana_url: 'https://<STACK_NAME>.grafana.net'
    grafana_api_key: '<GRAFANA_API_KEY>'
    data_source_config:
      name: '<DATA_SOURCE_NAME>'
      type: 'influxdb'
      url: '<DATA_SOURCE_URL>'
      user: '<USERNAME>'
      secureJsonData:
        password: '<PASSWORD>'
      database: '<DATABASE_NAME>'
      uid: '<UID>'
      access: 'proxy'

  tasks:
    - name: Create/Update Data source
      grafana.grafana.datasource:
        dataSource: '{{ data_source_config }}'
        grafana_url: '{{ grafana_url }}'
        grafana_api_key: '{{ grafana_api_key }}'
        state: present

Замените заполнители своими значениями:

  • <DATA_SOURCE_NAME>: имя источника данных, который будет добавлен в Grafana
  • <DATA_SOURCE_URL>: URL вашего источника данных
  • <USERNAME>: имя пользователя для аутентификации в вашем источнике данных
  • <PASSWORD>: пароль для аутентификации в вашем источнике данных
  • <DATABASE_NAME>: имя вашей базы данных
  • <UID>: UID вашего источника данных в Grafana
  • <STACK_NAME>: имя вашего стека
  • <GRAFANA_API_KEY>: ключ API, созданный в экземпляре Grafana

Добавление папки

Этот плейбук создаёт папку в вашем экземпляре Grafana с помощью модуля Folder.

Создайте файл с именем folder.yml:

YAML
- name: Add/Update Folders
  connection: local
  hosts: localhost

vars:
    grafana_url: 'https://<STACK_NAME>.grafana.net'
    grafana_api_key: '<GRAFANA_API_KEY>'
    folders:
      - title: '<FOLDER_NAME>'
        uid: '<UID>'

  tasks:
    - name: Create/Update a Folder in Grafana
      grafana.grafana.folder:
        title: '{{ item.title }}'
        uid: '{{ item.uid }}'
        grafana_url: '{{ grafana_url }}'
        grafana_api_key: '{{ grafana_api_key }}'
        state: present
      loop: '{{ folders }}'

Замените заполнители своими значениями:

  • <FOLDER_NAME>: имя папки, которая будет добавлена в Grafana
  • <UID>: UID вашей папки в Grafana
  • <STACK_NAME>: имя вашего стека
  • <GRAFANA_API_KEY>: ключ API, созданный в экземпляре Grafana

Добавление панели в папку

Этот плейбук перебирает файлы исходного кода JSON панелей в папке, указанной в dashboards_path, и добавляет их в экземпляр Grafana с помощью модуля Dashboard.

Создайте файл с именем dashboard.yml:

YAML
- name: Add/Update Dashboards
  connection: local
  hosts: localhost

  vars:
    grafana_url: 'https://<STACK_NAME>.grafana.net'
    grafana_api_key: '<GRAFANA_API_KEY>'
    dashboards_path: '<PATH_TO_DASHBOARD_FILES>' # Example "./dashboards"

  tasks:
    - name: Find dashboard files
      find:
        paths: '{{ dashboards_path }}'
        file_type: file
        recurse: true
        patterns: '*.json'
      register: files_matched
      no_log: true

    - name: Create list of dashboard file names
      set_fact:
        dashboard_file_names: '{{ dashboard_file_names | default([]) + [item.path] }}'
      loop: '{{ files_matched.files }}'
      no_log: true

    - name: Create/Update a dashboard
      grafana.grafana.dashboard:
        dashboard: "{{ lookup('ansible.builtin.file', item) }}"
        grafana_url: '{{ grafana_url }}'
        grafana_api_key: '{{ grafana_api_key }}'
        state: present
      loop: '{{ dashboard_file_names }}'

Замените заполнители своими значениями:

  • <PATH_TO_DASHBOARD_FILES>: путь к папке, содержащей файлы исходного кода JSON панелей
  • <STACK_NAME>: имя вашего стека
  • <GRAFANA_API_KEY>: ключ API, созданный в экземпляре Grafana

Запуск плейбуков Ansible

В терминале выполните следующие команды из каталога, где находятся все плейбуки Ansible.

Создайте стек Grafana Cloud:

sh
ansible-playbook cloud-stack.yml

Добавьте источник данных в стек Grafana:

sh
ansible-playbook data-source.yml

Добавьте папку в стек Grafana:

sh
ansible-playbook folder.yml

Добавьте панель в папку вашего стека Grafana:

sh
ansible-playbook dashboard.yml

Проверка конфигурации

После запуска плейбуков Ansible вы можете проверить следующее:

  • Новый стек Grafana Cloud создан и отображается на портале Cloud.

    Портал Cloud

  • Новый источник данных (в этом примере InfluxDB) отображается в стеке Grafana.

    Источник данных InfluxDB

  • В вашем стеке Grafana доступна новая папка. На следующем изображении была добавлена папка с именем Demos.

    Папка

  • В стеке Grafana отображается новая панель. На следующем изображении внутри папки “Demos” была создана панель с именем InfluxDB Cloud Demos.

    Панель InfluxDB

Дальнейшие шаги

Вы успешно создали стек Grafana Cloud вместе с источником данных, папкой и панелью с помощью Ansible. Теперь ваша инфраструктура Grafana управляется через код.

Чтобы узнать больше об управлении Grafana с помощью Infrastructure as code: