Настройка порогов с помощью Terraform

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

Информацию об управлении порогами в интерфейсе Knowledge Graph см. в разделе Manage thresholds.

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

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

terraform
# Basic threshold configuration with all three types
resource "grafana_asserts_thresholds" "basic" {
  provider = grafana.asserts

  request_thresholds = [{
    entity_name     = "payment-service"
    assertion_name  = "ErrorRatioBreach"
    request_type    = "inbound"
    request_context = "/charge"
    value           = 0.01
  }]

  resource_thresholds = [{
    assertion_name = "Saturation"
    resource_type  = "container"
    container_name = "worker"
    source         = "metrics"
    severity       = "warning"
    value          = 75
  }]

  health_thresholds = [{
    assertion_name = "ServiceDown"
    expression     = "up < 1"
    entity_type    = "Service"
  }]
}

Конфигурации порогов запросов

Настройте пороги для разных типов и контекстов запросов сервисов:

terraform
# Multiple request thresholds for different services
resource "grafana_asserts_thresholds" "request_thresholds" {
  provider = grafana.asserts

  request_thresholds = [
    {
      entity_name     = "api-service"
      assertion_name  = "ErrorRatioBreach"
      request_type    = "inbound"
      request_context = "/api/v1/users"
      value           = 0.02
    },
    {
      entity_name     = "api-service"
      assertion_name  = "LatencyP99ErrorBuildup"
      request_type    = "inbound"
      request_context = "/api/v1/orders"
      value           = 500
    },
    {
      entity_name     = "payment-gateway"
      assertion_name  = "RequestRateAnomaly"
      request_type    = "outbound"
      request_context = "/payment/process"
      value           = 1000
    }
  ]
}

Конфигурации порогов ресурсов

Определите пороги ресурсов для разных уровней важности:

terraform
# Resource thresholds for different severity levels
resource "grafana_asserts_thresholds" "resource_thresholds" {
  provider = grafana.asserts

  resource_thresholds = [
    {
      assertion_name = "Saturation"
      resource_type  = "container"
      container_name = "web-server"
      source         = "metrics"
      severity       = "warning"
      value          = 75
    },
    {
      assertion_name = "Saturation"
      resource_type  = "container"
      container_name = "web-server"
      source         = "metrics"
      severity       = "critical"
      value          = 90
    },
    {
      assertion_name = "ResourceRateBreach"
      resource_type  = "Pod"
      container_name = "database"
      source         = "logs"
      severity       = "warning"
      value          = 80
    }
  ]
}

Конфигурации порогов состояния

Настройте проверки состояния с помощью выражений Prometheus:

terraform
# Health thresholds with Prometheus expressions
resource "grafana_asserts_thresholds" "health_thresholds" {
  provider = grafana.asserts

  health_thresholds = [
    {
      assertion_name = "ServiceDown"
      expression     = "up{job=\"api-service\"} < 1"
      entity_type    = "Service"
    },
    {
      assertion_name = "HighMemoryUsage"
      expression     = "memory_usage_percent > 85"
      entity_type    = "Service"
    },
    {
      assertion_name = "DatabaseConnectivity"
      expression     = "db_connection_pool_active / db_connection_pool_max > 0.9"
      entity_type    = "Service"
    }
  ]
}

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

Определите комплексные пороги для производственных сред:

terraform
# Production environment with comprehensive thresholds
resource "grafana_asserts_thresholds" "production" {
  provider = grafana.asserts

  request_thresholds = [
    {
      entity_name     = "frontend"
      assertion_name  = "ErrorRatioBreach"
      request_type    = "inbound"
      request_context = "/"
      value           = 0.005
    },
    {
      entity_name     = "backend-api"
      assertion_name  = "LatencyP99ErrorBuildup"
      request_type    = "inbound"
      request_context = "/api"
      value           = 200
    }
  ]

  resource_thresholds = [
    {
      assertion_name = "Saturation"
      resource_type  = "container"
      container_name = "frontend"
      source         = "metrics"
      severity       = "warning"
      value          = 70
    },
    {
      assertion_name = "Saturation"
      resource_type  = "container"
      container_name = "backend-api"
      source         = "metrics"
      severity       = "critical"
      value          = 85
    }
  ]

  health_thresholds = [
    {
      assertion_name = "ServiceDown"
      expression     = "up < 1"
      entity_type    = "Service"
    },
    {
      assertion_name = "NodeDown"
      expression     = "up{job=\"node-exporter\"} < 1"
      entity_type    = "Service"
    }
  ]
}

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

grafana_asserts_thresholds

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

Аргументы

Имя Тип Обязательный Описание
request_thresholds list(object) Нет Список конфигураций порогов запросов. Подробнее см. блок request thresholds.
resource_thresholds list(object) Нет Список конфигураций порогов ресурсов. Подробнее см. блок resource thresholds.
health_thresholds list(object) Нет Список конфигураций порогов состояния. Подробнее см. блок health thresholds.

Блок request thresholds

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

Имя Тип Обязательный Описание
entity_name string Да Имя сущности, к которой применяется порог.
assertion_name string Да Имя проверки, для которой настраивается порог.
request_type string Да Тип запроса (inbound, outbound).
request_context string Да Контекст или путь запроса, к которому применяется порог.
value number Да Значение порога.

Блок resource thresholds

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

Имя Тип Обязательный Описание
assertion_name string Да Имя проверки, для которой настраивается порог.
resource_type string Да Тип ресурса (container, Pod, node).
container_name string Да Имя контейнера, к которому применяется порог.
source string Да Источник метрик (metrics, logs).
severity string Да Уровень важности (warning, critical).
value number Да Значение порога.

Блок health thresholds

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

Имя Тип Обязательный Описание
assertion_name string Да Имя проверки, для которой настраивается порог.
expression string Да Выражение Prometheus для проверки состояния.
entity_type string Да Тип сущности для порога состояния (например, Service, Pod, Namespace, Volume).
alert_category string Нет Необязательная метка категории алерта для порога состояния.

Пример

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

  request_thresholds = [{
    entity_name     = "api-service"
    assertion_name  = "ErrorRatioBreach"
    request_type    = "inbound"
    request_context = "/api/v1/users"
    value           = 0.02
  }]

  resource_thresholds = [{
    assertion_name = "Saturation"
    resource_type  = "container"
    container_name = "web-server"
    source         = "metrics"
    severity       = "warning"
    value          = 75
  }]

  health_thresholds = [{
    assertion_name = "ServiceDown"
    expression     = "up{job=\"api-service\"} < 1"
    entity_type    = "Service"
  }]
}

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

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

Управление конфигурацией порогов

  • Устанавливайте подходящие значения порогов с учётом ваших целей уровня обслуживания (SLO)
  • Используйте разные уровни важности (warning, critical) для создания путей эскалации
  • Сначала тестируйте конфигурации порогов в средах, отличных от производственной
  • Отслеживайте эффективность порогов и корректируйте значения на основе фактических данных о производительности

Рекомендации по порогам запросов

  • Настраивайте пороги запросов для критичных конечных точек, с которыми работают пользователи
  • Задавайте разные пороги для разных типов запросов (inbound и outbound)
  • Учитывайте контекст запроса при установке порогов для конкретных путей API
  • Используйте пороги доли ошибок, чтобы рано выявлять деградацию сервиса
  • Анализируйте исторические данные о производительности, чтобы задавать реалистичные значения порогов

Рекомендации по порогам ресурсов

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

Рекомендации по порогам состояния

  • Используйте выражения Prometheus, которые точно отражают состояние сервиса
  • Тестируйте выражения проверок состояния отдельно перед их применением
  • Настраивайте пороги состояния для критичных зависимостей и внешних сервисов
  • Используйте составные выражения для сложных проверок состояния
  • Убедитесь, что выражения работают эффективно и не создают чрезмерную нагрузку

Рекомендации по выбору значений

  • Начните с консервативных значений и корректируйте их на основе реальной производительности
  • Используйте проценты (диапазон 0–1) для метрик, основанных на отношениях
  • Используйте миллисекунды для порогов задержки
  • Документируйте обоснование конкретных значений порогов
  • Регулярно пересматривайте и обновляйте пороги с учётом развития системы

Проверка

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

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

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