Terraform으로 suppressed assertions(비활성화된 단언) 구성
Terraform으로 suppressed assertions(비활성화된 단언) 구성
Suppressed assertions 구성은 Knowledge Graph에서 라벨 매칭을 기반으로 특정 알림이나 단언(assertion)을 비활성화할 수 있게 해줘요. 유지보수 창구, 테스트 환경에서 유용하며, 특정 유형의 알림을 일시적으로 억제하고 싶을 때에도 유용해요.
Knowledge Graph UI에서 인사이트를 억제하는 방법에 대한 자세한 내용은 인사이트 억제 문서를 참고하세요.
출처: 문서
본문
기본 suppressed assertions 구성
suspended-assertions.tf라는 파일을 만들고 다음 내용을 추가하세요:
# Basic suppressed alert configuration for maintenance
resource "grafana_asserts_suppressed_assertions_config" "maintenance_window" {
provider = grafana.asserts
name = "MaintenanceWindow"
match_labels = {
service = "api-service"
maintenance = "true"
}
}
# Suppress specific alertname during deployment
resource "grafana_asserts_suppressed_assertions_config" "deployment_suppression" {
provider = grafana.asserts
name = "DeploymentSuppression"
match_labels = {
alertname = "HighLatency"
job = "web-service"
env = "staging"
}
}
# Suppress alerts for specific test environment
resource "grafana_asserts_suppressed_assertions_config" "test_environment_suppression" {
provider = grafana.asserts
name = "TestEnvironmentSuppression"
match_labels = {
alertgroup = "test.alerts"
environment = "test"
}
}
서비스별 억제 구성
유지보수 또는 운영 활동 중 특정 서비스에 대한 알림을 억제하려면:
# Suppress alerts for specific services during maintenance
resource "grafana_asserts_suppressed_assertions_config" "api_service_maintenance" {
provider = grafana.asserts
name = "APIServiceMaintenance"
match_labels = {
service = "api-gateway"
job = "api-gateway"
maintenance = "scheduled"
}
}
# Suppress database alerts during backup operations
resource "grafana_asserts_suppressed_assertions_config" "database_backup" {
provider = grafana.asserts
name = "DatabaseBackupSuppression"
match_labels = {
service = "postgresql"
job = "postgres-exporter"
backup_mode = "active"
}
}
# Suppress monitoring system alerts during updates
resource "grafana_asserts_suppressed_assertions_config" "monitoring_update" {
provider = grafana.asserts
name = "MonitoringSystemUpdate"
match_labels = {
service = "prometheus"
job = "prometheus"
update = "in_progress"
}
}
환경 및 팀 기반 억제
환경이나 팀을 기반으로 억제 규칙을 만들 수 있어요:
# Suppress all alerts for development environment
resource "grafana_asserts_suppressed_assertions_config" "dev_environment" {
provider = grafana.asserts
name = "DevelopmentEnvironmentSuppression"
match_labels = {
environment = "development"
team = "platform"
}
}
# Suppress alerts for specific team during their maintenance window
resource "grafana_asserts_suppressed_assertions_config" "team_maintenance" {
provider = grafana.asserts
name = "TeamMaintenanceWindow"
match_labels = {
team = "backend"
maintenance = "team_scheduled"
timezone = "UTC"
}
}
# Suppress alerts for staging environment during testing
resource "grafana_asserts_suppressed_assertions_config" "staging_testing" {
provider = grafana.asserts
name = "StagingTestingSuppression"
match_labels = {
environment = "staging"
testing = "automated"
job = "integration-tests"
}
}
알림 유형 및 심각도 기반 억제
알림의 유형이나 심각도를 기반으로 억제할 수 있어요:
# Suppress low severity alerts during business hours
resource "grafana_asserts_suppressed_assertions_config" "low_severity_business_hours" {
provider = grafana.asserts
name = "LowSeverityBusinessHours"
match_labels = {
severity = "warning"
timezone = "business_hours"
}
}
# Suppress specific alert types during known issues
resource "grafana_asserts_suppressed_assertions_config" "known_issue_suppression" {
provider = grafana.asserts
name = "KnownIssueSuppression"
match_labels = {
alertname = "HighMemoryUsage"
service = "legacy-service"
issue_id = "LEG-123"
}
}
# Suppress infrastructure alerts during planned maintenance
resource "grafana_asserts_suppressed_assertions_config" "infrastructure_maintenance" {
provider = grafana.asserts
name = "InfrastructureMaintenance"
match_labels = {
alertgroup = "infrastructure.alerts"
maintenance_type = "planned"
affected_services = "all"
}
}
복잡한 다중 라벨 억제
여러 라벨을 가진 복잡한 억제 규칙을 정의할 수 있어요:
# Complex suppression for multi-service deployments
resource "grafana_asserts_suppressed_assertions_config" "multi_service_deployment" {
provider = grafana.asserts
name = "MultiServiceDeploymentSuppression"
match_labels = {
deployment_id = "deploy-2024-01-15"
services = "api,worker,frontend"
environment = "production"
deployment_type = "blue_green"
}
}
# Suppress alerts for specific cluster during maintenance
resource "grafana_asserts_suppressed_assertions_config" "cluster_maintenance" {
provider = grafana.asserts
name = "ClusterMaintenanceSuppression"
match_labels = {
cluster = "production-cluster-1"
maintenance = "cluster_upgrade"
affected_nodes = "all"
estimated_duration = "2h"
}
}
# Suppress alerts for specific region during network issues
resource "grafana_asserts_suppressed_assertions_config" "regional_network_issue" {
provider = grafana.asserts
name = "RegionalNetworkIssueSuppression"
match_labels = {
region = "us-west-2"
issue_type = "network"
affected_services = "external_dependencies"
incident_id = "NET-456"
}
}
리소스 참조
grafana_asserts_suppressed_assertions_config
Grafana API를 통해 Knowledge Graph suppressed assertions 구성을 관리해요.
인자(Arguments)
| 이름 | 유형 | 필수 | 설명 |
|---|---|---|---|
| name | string | Yes | suppressed assertions 구성의 이름. 이 필드는 불변(immutable)이며 변경 시 재생성(recreation)을 강제해요. |
| match_labels | map(string) | No | 이 suppressed assertions 구성에 매칭할 라벨. 어떤 알림이 억제될지 결정하는 데 사용돼요. |
예시
resource "grafana_asserts_suppressed_assertions_config" "example" {
provider = grafana.asserts
name = "ExampleSuppression"
match_labels = {
alertname = "TestAlert"
env = "development"
}
}
모범 사례
Terraform으로 suppressed assertions를 관리할 때 다음 모범 사례를 고려하세요.
억제 전략
- 영구적인 해결책보다는 일시적인 상황에 억제 규칙을 사용하세요.
- Terraform 구성 주석에 억제 이유를 문서화하세요.
- 억제 규칙을 검토하도록 만료일이나 알림을 설정하세요.
- 반복되는 오탐(false positive)을 억제하기보다는 알림 임계값을 수정하는 것을 선호하세요.
라벨 매칭 규칙
- 의도하지 않은 알림을 억제하지 않도록 매치 라벨을 구체적으로 지정하세요.
- 프로덕션 외 환경에서 먼저 억제 규칙을 테스트하세요.
- 억제의 목적과 범위를 나타내는 설명적인 이름을 사용하세요.
- 라벨에 관련 컨텍스트를 포함하세요(예: 인시던트 ID, 유지보수 창구).
라이프사이클 관리
- 활성 억제 규칙이 여전히 필요한지 정기적으로 검토하세요.
- 유지보수 창구나 배포 후 억제 규칙을 제거하거나 업데이트하세요.
- 억제 규칙이 언제, 왜 추가되었는지 추적하려면 버전 관리를 사용하세요.
- 억제 규칙을 활성화하거나 비활성화하는 시간 기반 자동화를 고려하세요.
검증
Terraform 구성을 적용한 후 다음을 확인하세요:
- suppressed assertions 구성이 Knowledge Graph 인스턴스에서 활성 상태인지.
- 구성이 Knowledge Graph UI의 Observability > Rules > Suppress 아래에 나타나는지.
- 매칭되는 알림이 올바르게 억제되는지.
- 억제 규칙이 의도하지 않은 알림에 영향을 주지 않는지.