Настройка корреляции профилей с помощью Terraform
Конфигурации профилей в Knowledge Graph позволяют определить, как данные непрерывного профилирования запрашиваются и сопоставляются с сущностями. Вы можете указать источники данных, правила сопоставления сущностей и сопоставления меток для профилирования производительности.
Информацию о настройке корреляции профилей в интерфейсе Knowledge Graph см. в разделе Configure profiles correlation.
Базовая конфигурация профилей
Создайте файл с именем profile-configs.tf и добавьте следующее:
# 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"
}
}
Конфигурация профилей с несколькими правилами сопоставления
Настройте корреляцию профилей с несколькими критериями сопоставления сущностей:
# 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"
}
}
Минимальная конфигурация профилей
Создайте минимальную конфигурацию для всех сущностей:
# 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"
}
}
Расширенная конфигурация профилей со сложными правилами сопоставления
Настройте профили с несколькими операциями и расширенными правилами сопоставления:
# 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.
Аргументы
Блок match
Каждый блок match поддерживает следующее:
Пример
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