Настройка стека 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 и добавьте в него следующее:
# 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:
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
}
Когда вы примените эту конфигурацию, ресурс:
- Создаст токены API для Grafana Cloud, Mimir и детектора утверждений (assertion detector)
- Автоматически обнаружит доступные наборы данных на основе метрик вашего стека
- Включит стек с обнаруженными наборами данных
Настройка набора данных вручную
Используйте ручную настройку, когда в ваших метриках применяются нестандартные имена меток, например пользовательская метка окружения. Каждый блок dataset настраивает один тип набора данных.
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, автоматическое обнаружение пропускается. Вы должны определить все наборы данных, которые хотите настроить.
Настройка нескольких наборов данных с фильтрами
Настройте несколько типов наборов данных с собственными сопоставлениями меток и фильтрами метрик:
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. Этот ресурс охватывает весь процесс подключения, включая создание токенов, настройку наборов данных и включение стека.
Аргументы
Атрибуты
Блок dataset
Каждый блок dataset поддерживает следующее:
Блок filter group
Каждый блок filter_group поддерживает следующее:
Блок filter
Каждый блок filter поддерживает следующее:
Пример
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:
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"
}