Настройка корреляции профилей с помощью Terraform

Конфигурации профилей в Knowledge Graph позволяют определить, как данные непрерывного профилирования запрашиваются и сопоставляются с сущностями. Вы можете указать источники данных, правила сопоставления сущностей и сопоставления меток для профилирования производительности.

Информацию о настройке корреляции профилей в интерфейсе Knowledge Graph см. в разделе Configure profiles correlation.

Базовая конфигурация профилей

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

terraform
# Basic profile configuration for services
resource "grafana_asserts_profile_config" "production" {
  provider = grafana.asserts

  name            = "production"
  priority        = 1000
  default_config  = false
  data_source_uid = "grafanacloud-profiles"

  match {
    property = "asserts_entity_type"
    op       = "="
    values   = ["Service"]
  }

  match {
    property = "deployment_environment"
    op       = "="
    values   = ["production", "staging"]
  }

  entity_property_to_profile_label_mapping = {
    "cluster"        = "k8s_cluster_name"
    "namespace"      = "k8s_namespace_name"
    "container"      = "k8s_container_name"
    "otel_service"   = "service_name"
    "otel_namespace" = "service_namespace"
  }
}

Конфигурация профилей с несколькими правилами сопоставления

Настройте корреляцию профилей с несколькими критериями сопоставления сущностей:

terraform
# Development environment profile configuration
resource "grafana_asserts_profile_config" "development" {
  provider = grafana.asserts

  name            = "development"
  priority        = 2000
  default_config  = false
  data_source_uid = "pyroscope-dev"

  match {
    property = "asserts_entity_type"
    op       = "="
    values   = ["Service"]
  }

  match {
    property = "deployment_environment"
    op       = "="
    values   = ["development", "testing"]
  }

  match {
    property = "asserts_site"
    op       = "="
    values   = ["us-east-1"]
  }

  match {
    property = "service"
    op       = "="
    values   = ["api"]
  }

  entity_property_to_profile_label_mapping = {
    "cluster"        = "k8s_cluster_name"
    "namespace"      = "k8s_namespace_name"
    "container"      = "k8s_container_name"
    "otel_service"   = "service_name"
    "otel_namespace" = "service_namespace"
    "pod"            = "k8s_pod_name"
  }
}

Минимальная конфигурация профилей

Создайте минимальную конфигурацию для всех сущностей:

terraform
# Minimal configuration for all entities
resource "grafana_asserts_profile_config" "minimal" {
  provider = grafana.asserts

  name            = "minimal"
  priority        = 3000
  default_config  = false
  data_source_uid = "pyroscope-minimal"

  match {
    property = "asserts_entity_type"
    op       = "IS NOT NULL"
    values   = []
  }

  entity_property_to_profile_label_mapping = {
    "cluster"        = "k8s_cluster_name"
    "otel_service"   = "service_name"
    "otel_namespace" = "service_namespace"
  }
}

Расширенная конфигурация профилей со сложными правилами сопоставления

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

terraform
# Advanced configuration with multiple operations
resource "grafana_asserts_profile_config" "advanced" {
  provider = grafana.asserts

  name            = "advanced"
  priority        = 1500
  default_config  = false
  data_source_uid = "pyroscope-advanced"

  match {
    property = "service_type"
    op       = "CONTAINS"
    values   = ["web", "api"]
  }

  match {
    property = "deployment_environment"
    op       = "<>"
    values   = ["test"]
  }

  match {
    property = "team"
    op       = "IS NOT NULL"
    values   = []
  }

  match {
    property = "cpu_threshold"
    op       = ">="
    values   = ["80"]
  }

  entity_property_to_profile_label_mapping = {
    "service_type"   = "service_type"
    "team"           = "team_owner"
    "environment"    = "deployment_env"
    "version"        = "app_version"
    "region"         = "cloud_region"
    "node"           = "k8s_node_name"
  }
}

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

grafana_asserts_profile_config

Управляйте конфигурациями профилей Knowledge Graph через Grafana API.

Аргументы

Имя Тип Обязательный Описание
name string Да Имя конфигурации профилей. Это поле неизменяемо и вызывает пересоздание ресурса при изменении.
priority number Да Приоритет конфигурации профилей. Меньшее число означает более высокий приоритет.
default_config bool Да Является ли эта конфигурация конфигурацией по умолчанию. Конфигурации по умолчанию нельзя удалить.
data_source_uid string Да UID источника данных для запроса (например, экземпляр Pyroscope).
match list(object) Нет Список правил сопоставления для свойств сущностей. Подробнее см. блок match.
entity_property_to_profile_label_mapping map(string) Нет Сопоставление свойств сущностей с метками профилей для корреляции.

Блок match

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

Имя Тип Обязательный Описание
property string Да Свойство сущности, с которым выполняется сопоставление.
op string Да Операция, используемая для сопоставления. Одна из: =, <>, <, >, <=, >=, IS NULL, IS NOT NULL, STARTS WITH, CONTAINS.
values list(string) Да Значения для сопоставления. Может быть пустым для операций IS NULL и IS NOT NULL.

Пример

terraform
resource "grafana_asserts_profile_config" "example" {
  provider = grafana.asserts

  name            = "example-profiles"
  priority        = 1000
  default_config  = false
  data_source_uid = "pyroscope-prod"

  match {
    property = "asserts_entity_type"
    op       = "="
    values   = ["Service", "Pod"]
  }

  match {
    property = "deployment_environment"
    op       = "STARTS WITH"
    values   = ["prod"]
  }

  entity_property_to_profile_label_mapping = {
    "service"     = "service_name"
    "namespace"   = "k8s_namespace_name"
    "environment" = "deployment_env"
    "cluster"     = "k8s_cluster_name"
    "container"   = "k8s_container_name"
  }
}

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

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

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

  • Назначайте меньшие номера приоритета более конкретным конфигурациям
  • Меньшее число приоритета означает более высокий приоритет (конфигурации оцениваются в порядке возрастания приоритета)
  • Используйте согласованные диапазоны приоритетов для разных типов конфигураций
  • Документируйте обоснование назначенных приоритетов

Настройка источника данных

  • Убедитесь, что UID источника данных соответствует вашему фактическому экземпляру Pyroscope или системе профилирования
  • Проверьте подключение к источнику данных перед применением конфигураций
  • Используйте описательные имена конфигураций профилей, отражающие их назначение
  • Рассмотрите возможность использования отдельных источников данных для разных сред

Стратегия сопоставления меток

  • Сопоставляйте свойства сущностей единообразно во всех конфигурациях профилей
  • Используйте осмысленные имена меток профилей, соответствующие вашим стандартам профилирования
  • Документируйте связи сопоставления в комментариях к конфигурации
  • Убедитесь, что сопоставленные метки существуют в ваших данных профилей
  • Согласуйте имена меток с вашей конфигурацией непрерывного профилирования (Pyroscope, Grafana Agent и т. д.)

Проектирование правил сопоставления

  • Начните с широких правил сопоставления и уточняйте их по мере необходимости
  • Используйте конкретные имена свойств, которые существуют в вашей модели сущностей
  • Тестируйте правила сопоставления на образцах данных перед развёртыванием
  • Комбинируйте несколько правил сопоставления для точного нацеливания на сущности
  • Используйте операторы сравнения (<, >, <=, >=) для числовых порогов или фильтрации по производительности

Интеграция с непрерывным профилированием

  • Убедитесь, что ваши агенты профилирования настроены с подходящими метками
  • Используйте согласованные имена меток во всей инфраструктуре профилирования
  • Сопоставляйте как свойства уровня сервиса, так и свойства уровня инфраструктуры для комплексной корреляции
  • Рассмотрите возможность включения информации о pod, node и контейнере для развёртываний в Kubernetes
  • Проверьте корреляцию профилей, чтобы убедиться, что она работает как ожидается

Проверка

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

  • Конфигурации профилей созданы в вашем экземпляре Knowledge Graph
  • Конфигурации отображаются в интерфейсе Knowledge Graph в разделе Observability > Configuration > Profiles
  • Корреляция профилей работает при детализации от сущностей
  • Сопоставления меток корректно преобразуют свойства сущностей в метки профилей
  • Правила сопоставления правильно фильтруют сущности
  • Запросы профилей возвращают ожидаемые результаты в интерфейсе Knowledge Graph
  • Графы пламени и данные профилирования отображаются корректно при доступе через Knowledge Graph

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