Управление сохранёнными запросами с помощью Terraform

В этом руководстве показано, как управлять сохранёнными запросами, также известными как библиотека запросов, с помощью провайдера Grafana для Terraform. Управление сохранёнными запросами как код позволяет версионировать библиотеку запросов и поддерживать её согласованность между экземплярами Grafana.

Note

Сохранённые запросы доступны только в Grafana Enterprise и Grafana Cloud.

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

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

  • Экземпляр Grafana Enterprise или Grafana Cloud. Дополнительные сведения о настройке учётной записи Grafana Cloud см. в разделе Get started.
  • Terraform, установленный на вашей машине. Дополнительные сведения об установке Terraform см. в документации по установке Terraform.
  • Токен сервисной учётной записи с ролью Writer для сохранённых запросов. Дополнительные сведения см. в разделах Roles, permissions, and RBAC и Service account tokens.

Настройка провайдера Grafana

Создайте файл с именем main.tf и добавьте следующее, чтобы настроить провайдер Grafana с аутентификацией, необходимой для управления сохранёнными запросами:

terraform
terraform {
  required_providers {
    grafana = {
      source  = "grafana/grafana"
      version = ">= 4.44.0"
    }
  }
}

provider "grafana" {
  url  = "<Grafana-URL>"
  auth = "<Service-account-token>"
}

Замените следующие значения полей:

  • Grafana-URL на URL вашего экземпляра Grafana, например https://my-stack.grafana.net/
  • Service-account-token на созданный вами токен сервисной учётной записи

Создание ресурса сохранённого запроса

Создайте файл с именем saved-queries.tf и добавьте следующее:

terraform
resource "grafana_apps_queries_query_v1" "example" {
  metadata {
    uid = "example-saved-query"
  }

  spec {
    title       = "Requests per second"
    description = "Prometheus rate of HTTP requests"
    is_visible  = true
    tags        = ["http", "prometheus"]

    targets {
      properties_json = jsonencode({
        refId = "A"
        expr  = "rate(http_requests_total[$__rate_interval])"
        datasource = {
          type = "prometheus"
          uid  = "my-prometheus-uid"
        }
      })
    }
  }
}

Поскольку структура запроса к источнику данных зависит от источника данных, запрос, хранимый в каждой цели (properties_json), подстановки переменных цели (variables_json) и список значений переменной (value_list_definition_json) передаются как необработанные строки JSON. Используйте jsonencode() для их построения.

Блок spec поддерживает следующие поля:

Поле Описание
title Отображаемое имя сохранённого запроса. Обязательное.
description Более подробное описание сохранённого запроса.
is_visible Виден ли сохранённый запрос в библиотеке запросов.
is_locked Заблокирован ли сохранённый запрос и можно ли его редактировать в интерфейсе. Только для отображения в UI, не для безопасности.
tags Теги, используемые для фильтрации сохранённого запроса.
targets Цели запроса, из которых состоит сохранённый запрос. Требуется как минимум одна цель.
vars Переменные шаблона, которые можно подставлять в цели запроса.

Полную схему см. в документации ресурса grafana_apps_queries_query_v1.

Импорт существующего сохранённого запроса

Чтобы перевести существующий сохранённый запрос под управление Terraform, импортируйте его по UID:

shell
terraform import grafana_apps_queries_query_v1.example example-saved-query

Итог

В этом руководстве вы узнали, как создавать и импортировать сохранённые запросы с помощью Terraform.

Чтобы узнать больше о сохранённых запросах, обратитесь к разделу Saved queries.