Настройка стека Knowledge Graph с помощью Terraform

Ресурс стека Knowledge Graph управляет всем процессом подключения для вашего стека Grafana Cloud. Он создаёт токены API, настраивает наборы данных на основе доступных метрик и включает стек.

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

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

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

  • Учётная запись Grafana Cloud, как описано в разделе Get started
  • Установленный Terraform
  • Настроенный провайдер Grafana Terraform, как описано в разделе Начало работы с Terraform для Knowledge Graph
  • Политика доступа к облаку (Cloud Access Policy) со следующими областями действия: stacks:read, metrics:read, metrics:write

Типы наборов данных

Доступны следующие типы наборов данных:

  • kubernetes: метрики Kubernetes. Требует, чтобы в вашем стеке был включён Kubernetes Monitoring.
  • otel: метрики Application Observability. Требует, чтобы в вашем стеке была включена Application Observability.
  • prometheus: стандартные метрики Prometheus.
  • aws: метрики Amazon Web Services.

Создание необходимых токенов

Прежде чем настраивать стек Knowledge Graph, создайте политику доступа к облаку и токены сервисной учётной записи Grafana, которые требуются ресурсу.

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

terraform
# Create a Cloud Access Policy with required scopes
resource "grafana_cloud_access_policy" "knowledge_graph" {
  name         = "knowledge-graph-stack-policy"
  display_name = "Knowledge Graph Stack Policy"

  scopes = [
    "stacks:read",
    "metrics:read",
    "metrics:write",
  ]

  realm {
    type       = "stack"
    identifier = var.stack_id
  }
}

# Create a token from the Cloud Access Policy
resource "grafana_cloud_access_policy_token" "knowledge_graph" {
  name             = "knowledge-graph-stack-token"
  access_policy_id = grafana_cloud_access_policy.knowledge_graph.policy_id
}

# Create a Grafana Service Account for dashboards and Grafana Managed Alerts
resource "grafana_cloud_stack_service_account" "knowledge_graph" {
  stack_slug  = var.stack_slug
  name        = "knowledge-graph-managed-alerts-sa"
  role        = "Admin"
  is_disabled = false
}

resource "grafana_cloud_stack_service_account_token" "knowledge_graph" {
  stack_slug         = var.stack_slug
  service_account_id = grafana_cloud_stack_service_account.knowledge_graph.id
  name               = "knowledge-graph-managed-alerts-token"
}

variable "stack_id" {
  description = "The Grafana Cloud stack ID"
  type        = string
}

variable "stack_slug" {
  description = "The Grafana Cloud stack slug"
  type        = string
}

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

  • <STACK_ID> на идентификатор вашего стека Grafana Cloud
  • <STACK_SLUG> на slug вашего стека Grafana Cloud

Базовая настройка стека с автоматически обнаруженными наборами данных

Самая простая конфигурация создаёт токены и автоматически обнаруживает наборы данных на основе доступных метрик. Это рекомендуемый подход, когда в ваших метриках используются стандартные имена меток.

Добавьте следующее в knowledge-graph-stack.tf:

terraform
resource "grafana_asserts_stack" "main" {
  cloud_access_policy_token = grafana_cloud_access_policy_token.knowledge_graph.token
  grafana_token             = grafana_cloud_stack_service_account_token.knowledge_graph.key
}

Когда вы примените эту конфигурацию, ресурс:

  1. Создаст токены API для Grafana Cloud, Mimir и детектора утверждений (assertion detector)
  2. Автоматически обнаружит доступные наборы данных на основе метрик вашего стека
  3. Включит стек с обнаруженными наборами данных

Настройка набора данных вручную

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

terraform
resource "grafana_asserts_stack" "manual" {
  cloud_access_policy_token = grafana_cloud_access_policy_token.knowledge_graph.token
  grafana_token             = grafana_cloud_stack_service_account_token.knowledge_graph.key

  dataset {
    type = "kubernetes"

    filter_group {
      env_label  = "deployment_environment"
      site_label = "cluster"

      env_label_values  = ["production", "staging"]
      site_label_values = ["us-east-1", "eu-west-1"]
    }
  }
}

Note

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

Настройка нескольких наборов данных с фильтрами

Настройте несколько типов наборов данных с собственными сопоставлениями меток и фильтрами метрик:

terraform
resource "grafana_asserts_stack" "multi_dataset" {
  cloud_access_policy_token = grafana_cloud_access_policy_token.knowledge_graph.token
  grafana_token             = grafana_cloud_stack_service_account_token.knowledge_graph.key

  dataset {
    type = "kubernetes"

    filter_group {
      env_label  = "deployment_environment"
      site_label = "cluster"

      env_label_values  = ["production", "staging"]
      site_label_values = ["us-east-1", "eu-west-1"]
    }
  }

  dataset {
    type = "prometheus"

    filter_group {
      env_label = "environment"
      env_name  = "prod"

      filter {
        name     = "region"
        operator = "=~"
        values   = ["us-.*", "eu-.*"]
      }
    }
  }
}

Справочник по ресурсам

grafana_asserts_stack

Управляйте конфигурацией стека Knowledge Graph через API Grafana. Этот ресурс охватывает весь процесс подключения, включая создание токенов, настройку наборов данных и включение стека.

Аргументы

Name Type Required Description
cloud_access_policy_token string Yes Токен политики доступа к Grafana Cloud со следующими областями действия: stacks:read, metrics:read, metrics:write. Используется для доступа к API Grafana Cloud, аутентификации в Mimir и аутентификации вебхука детектора утверждений. Чувствительное значение.
grafana_token string No Токен сервисной учётной записи Grafana для установки дашбордов и Grafana Managed Alerts. Создаётся с помощью grafana_cloud_stack_service_account_token. Чувствительное значение.
dataset list(object) No Ручная настройка наборов данных. Если указана, автоматическое обнаружение пропускается. Подробности см. в разделе блок dataset.

Атрибуты

Name Type Description
enabled bool Включён ли стек в данный момент.
status string Текущий статус подключения стека.
version int Номер версии конфигурации.

Блок dataset

Каждый блок dataset поддерживает следующее:

Name Type Required Description
type string Yes Тип набора данных: kubernetes, otel, prometheus или aws.
disabled_vendors list(string) No Список поставщиков, которых нужно отключить для этого набора данных.
filter_group list(object) No Группы фильтров для собственных сопоставлений меток. Подробности см. в разделе блок filter group.

Блок filter group

Каждый блок filter_group поддерживает следующее:

Name Type Required Description
env_label string No Имя метки метрики, используемой для окружения (например, env, environment, deployment_environment).
env_name string No Понятное имя для окружения.
site_label string No Имя метки метрики, используемой для площадки или кластера.
env_label_values list(string) No Конкретные значения метки окружения для сопоставления.
site_label_values list(string) No Конкретные значения метки площадки для сопоставления.
filter list(object) No Дополнительные фильтры метрик. Подробности см. в разделе блок filter.

Блок filter

Каждый блок filter поддерживает следующее:

Name Type Required Description
name string Yes Имя метки, по которой выполняется фильтрация.
operator string Yes Оператор фильтра: =, !=, =~ или !~.
values list(string) Yes Значения для сопоставления.

Пример

terraform
resource "grafana_asserts_stack" "example" {
  cloud_access_policy_token = grafana_cloud_access_policy_token.knowledge_graph.token
  grafana_token             = grafana_cloud_stack_service_account_token.knowledge_graph.key

  dataset {
    type = "kubernetes"

    filter_group {
      env_label         = "deployment_environment"
      site_label        = "cluster"
      env_label_values  = ["production"]
      site_label_values = ["us-east-1"]
    }
  }
}

Рекомендации

При настройке стека Knowledge Graph с помощью Terraform учитывайте следующие рекомендации.

Управление токенами

  • Создайте отдельную политику доступа к облаку для стека Knowledge Graph только с необходимыми областями действия
  • Используйте отдельные сервисные учётные записи для разных задач вместо общего административного токена
  • Регулярно меняйте токены и применяйте в Terraform обработку чувствительных переменных, чтобы не раскрывать токены в логах
  • Храните токены в системе управления секретами и обращайтесь к ним через переменные Terraform

Настройка наборов данных

  • Начните с автоматически обнаруженных наборов данных и переходите к ручной настройке только при необходимости
  • При использовании ручной настройки определите все наборы данных, которые нужно отслеживать
  • Используйте конкретные env_label_values и site_label_values, чтобы ограничить охват мониторинга
  • Сначала протестируйте конфигурации наборов данных в нерабочем стеке

Группы фильтров

  • Используйте группы фильтров, когда в ваших метриках применяются нестандартные имена меток
  • Сопоставляйте значения env_label и site_label с фактическими именами меток в ваших метриках Prometheus
  • Используйте операторы регулярных выражений (=~, !~) в фильтрах для гибкого сопоставления значений по регионам или окружениям
  • Поддерживайте согласованность конфигураций фильтров между наборами данных для предсказуемого поведения

Проверка

После применения конфигурации Terraform убедитесь, что:

  • Статус стека отображается как включённый — проверьте выходной атрибут enabled
  • Атрибут status указывает на успешное подключение
  • Наборы данных настроены корректно в интерфейсе Knowledge Graph
  • Дашборды и правила оповещения установлены, если указан grafana_token

Вы можете проверить статус стека с помощью выходных данных Terraform:

terraform
output "stack_enabled" {
  value       = grafana_asserts_stack.main.enabled
  description = "Whether the Knowledge Graph stack is enabled"
}

output "stack_status" {
  value       = grafana_asserts_stack.main.status
  description = "Current onboarding status of the stack"
}

output "stack_version" {
  value       = grafana_asserts_stack.main.version
  description = "Configuration version number"
}

Связанная документация