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 아래에 나타나는지.
  • 매칭되는 알림이 올바르게 억제되는지.
  • 억제 규칙이 의도하지 않은 알림에 영향을 주지 않는지.

관련 문서

더 알아보기 (Learn more)