Настройка порогов с помощью Terraform
Конфигурации порогов в Knowledge Graph позволяют задавать пользовательские пороги для проверок запросов, ресурсов и состояния. Эти конфигурации помогают устанавливать конкретные ограничения и условия для мониторинга сервисов и инфраструктуры.
Информацию об управлении порогами в интерфейсе Knowledge Graph см. в разделе Manage thresholds.
Базовая конфигурация порогов
Создайте файл с именем thresholds.tf и добавьте следующее:
# 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"
}]
}
Конфигурации порогов запросов
Настройте пороги для разных типов и контекстов запросов сервисов:
# 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
}
]
}
Конфигурации порогов ресурсов
Определите пороги ресурсов для разных уровней важности:
# 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:
# 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"
}
]
}
Комплексная конфигурация порогов
Определите комплексные пороги для производственных сред:
# 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
Каждый блок request_thresholds поддерживает следующее:
Блок resource thresholds
Каждый блок resource_thresholds поддерживает следующее:
Блок health thresholds
Каждый блок health_thresholds поддерживает следующее:
Пример
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