Terraform을 사용하여 경고 리소스 생성 및 관리 - Amazon Managed Grafana

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Terraform을 사용하여 경고 리소스 생성 및 관리

이 설명서 항목은 Grafana 버전 9.x를 지원하는 Grafana 작업 영역을 위해 설계되었습니다.

Grafana 버전 10.x를 지원하는 Grafana 작업 영역에 대한 내용은 을 참조하십시오. Grafana 버전 10에서 작업하기

Grafana 버전 8.x를 지원하는 Grafana 작업 영역에 대해서는 을 참조하십시오. Grafana 버전 8에서 작업하기

Terraform의 Grafana 공급자를 사용하여 경고 리소스를 관리하고 Grafana 시스템에 프로비저닝하세요. Grafana Alerting에 대한 Terraform 공급자 지원을 통해 전체 Grafana Alerting 스택을 코드로 쉽게 생성, 관리 및 유지할 수 있습니다.

Terraform을 사용하여 경고 리소스를 관리하는 방법에 대한 자세한 내용은 Terraform 설명서의 Grafana 공급자 설명서를 참조하십시오.

Terraform을 사용하여 알림 리소스를 만들고 관리하려면 다음 작업을 완료하세요.

  1. 프로비저닝을 위한 API 키를 생성하세요.

  2. Terraform 공급자를 구성합니다.

  3. Terraform에서 알림 리소스를 정의하세요.

  4. terraform apply 실행하여 알림 리소스를 프로비저닝하세요.

필수 조건

프로비저닝을 위한 API 키를 생성하세요.

일반 Grafana API 키를 생성하여 Grafana로 테라폼을 인증할 수 있습니다. API 키를 사용하는 대부분의 기존 도구는 새로운 Grafana Alerting 지원과 함께 자동으로 작동해야 합니다. Terraform과 함께 사용할 키를 생성하는 방법에 대한 자세한 내용은 Amazon Managed Grafana 자동화를 위한 Terraform 사용을 참조하십시오.

프로비저닝을 위한 API 키를 만들려면
  1. CI 파이프라인에 사용할 새 서비스 계정을 만드세요.

  2. '알림 규칙 프로비저닝 API에 액세스' 역할을 할당하세요.

  3. 새 서비스 계정 토큰을 생성합니다.

  4. Terraform에서 사용할 토큰의 이름을 지정하고 저장합니다.

또는 기본 인증을 사용할 수도 있습니다. 지원되는 모든 인증 형식을 보려면 Terraform 설명서에서 Grafana 인증을 참조하십시오.

Terraform 공급자를 구성하십시오.

Grafana Alerting 지원은 Grafana Terraform 공급자의 일부로 포함됩니다.

다음은 Terraform 공급자를 구성하는 데 사용할 수 있는 예제입니다.

terraform { required_providers { grafana = { source = "grafana/grafana" version = ">= 1.28.2" } } } provider "grafana" { url = <YOUR_GRAFANA_URL> auth = <YOUR_GRAFANA_API_KEY> }

연락처 및 템플릿 제공

접점은 경고 스택을 외부 세계와 연결합니다. 외부 시스템에 연결하는 방법과 알림을 전달할 위치를 Grafana에 알려줍니다. 15개 이상의 통합 기능 중에서 선택할 수 있습니다. 이 예시에서는 Slack 연락처를 사용합니다.

연락처 및 템플릿을 제공하려면
  1. 이 코드 블록을 로컬 시스템의.tf 파일에 복사합니다. < slack-webhook-url >를 Slack 웹후크 URL (또는 다른 연락처) 으로 바꾸십시오.

    이 예시에서는 Slack에 경고 알림을 보내는 연락처를 생성합니다.

    resource "grafana_contact_point" "my_slack_contact_point" { name = "Send to My Slack Channel" slack { url = <slack-webhook-url> text = <<EOT {{ len .Alerts.Firing }} alerts are firing! Alert summaries: {{ range .Alerts.Firing }} {{ template "Alert Instance Template" . }} {{ end }} EOT } }
  2. 텍스트 필드에 알림 텍스트를 입력합니다.

    text 필드는 GO 스타일 템플릿을 지원합니다. 이를 통해 Terraform에서 직접 Grafana 경고 알림 템플릿을 관리할 수 있습니다.

  3. terraform apply 명령을 실행합니다.

  4. Grafana UI로 이동하여 연락처 세부 정보를 확인하십시오.

    Terraform을 통해 프로비저닝된 리소스는 UI에서 편집할 수 없습니다. 이렇게 하면 알림 스택이 항상 코드와 동기화된 상태로 유지됩니다.

  5. 테스트를 클릭하여 접점이 제대로 작동하는지 확인합니다.

참고

여러 연락처에서 동일한 템플릿을 재사용할 수 있습니다. 위 예시에서는 명령문을 사용하여 공유 템플릿을 내장했습니다. {{ template "Alert Instance Template" . }}

그러면 이 프래그먼트를 Terraform에서 별도로 관리할 수 있습니다.

resource "grafana_message_template" "my_alert_template" { name = "Alert Instance Template" template = <<EOT {{ define "Alert Instance Template" }} Firing: {{ .Labels.alertname }} Silence: {{ .SilenceURL }} {{ end }} EOT }

프로비전 알림 정책 및 라우팅

알림 정책은 Grafana에게 경고 인스턴스를 어디로 라우팅하는지가 아니라 라우팅하는 방법을 알려줍니다. 라벨과 매처 시스템을 사용하여 이전에 정의한 연락처에 발사 경고를 연결합니다.

알림 정책 및 라우팅을 제공합니다.
  1. 이 코드 블록을 로컬 시스템의.tf 파일에 복사합니다.

    이 예시에서는 알림을 다음과 같이 그룹화합니다. 즉alertname, 이름이 같은 경고에서 오는 모든 알림이 동일한 Slack 메시지로 그룹화됩니다.

    특정 알림을 다르게 라우팅하려는 경우 하위 정책을 추가할 수 있습니다. 하위 정책을 사용하면 레이블 매칭을 기반으로 여러 경고에 라우팅을 적용할 수 있습니다. 이 예시에서는 레이블이 a=b인 모든 알림에 뮤트 타이밍을 적용합니다.

    resource "grafana_notification_policy" "my_policy" { group_by = ["alertname"] contact_point = grafana_contact_point.my_slack_contact_point.name group_wait = "45s" group_interval = "6m" repeat_interval = "3h" policy { matcher { label = "a" match = "=" value = "b" } group_by = ["..."] contact_point = grafana_contact_point.a_different_contact_point.name mute_timings = [grafana_mute_timing.my_mute_timing.name] policy { matcher { label = "sublabel" match = "=" value = "subvalue" } contact_point = grafana_contact_point.a_third_contact_point.name group_by = ["..."] } } }
  2. mute_timings 필드에서 뮤트 타이밍을 알림 정책에 연결합니다.

  3. terraform apply 명령을 실행합니다.

  4. Grafana UI로 이동하여 알림 정책의 세부 정보를 확인하세요.

    참고

    Terraform에서 프로비저닝한 리소스는 UI에서 편집할 수 없습니다. 이렇게 하면 알림 스택이 항상 코드와 동기화된 상태로 유지됩니다.

  5. 테스트를 클릭하여 알림 지점이 제대로 작동하는지 확인합니다.

음소거 타이밍을 프로비저닝하세요.

음소거 타이밍은 정의된 기간 동안 경고 알림을 음소거할 수 있는 기능을 제공합니다.

음소거 타이밍을 설정하려면
  1. 이 코드 블록을 로컬 시스템의.tf 파일에 복사합니다.

    이 예시에서는 주말에는 경고 알림이 음소거됩니다.

    resource "grafana_mute_timing" "my_mute_timing" { name = "My Mute Timing" intervals { times { start = "04:56" end = "14:17" } weekdays = ["saturday", "sunday", "tuesday:thursday"] months = ["january:march", "12"] years = ["2025:2027"] } }
  2. terraform apply 명령을 실행합니다.

  3. Grafana UI로 이동하여 음소거 타이밍의 세부 정보를 확인하세요.

  4. 필드를 사용하여 알림 정책에서 새로 만든 뮤트 타이밍을 참조하십시오. mute_timings 이렇게 하면 알림 일부 또는 전체에 뮤트 타이밍이 적용됩니다.

    참고

    Terraform에서 프로비저닝한 리소스는 UI에서 편집할 수 없습니다. 이렇게 하면 알림 스택이 항상 코드와 동기화된 상태로 유지됩니다.

  5. Test를 클릭하여 뮤트 타이밍이 제대로 작동하는지 확인합니다.

알림 규칙을 규정하세요.

경고 규칙을 사용하면 모든 Grafana 데이터 소스에 대해 경고할 수 있습니다. 이는 이미 구성한 데이터 소스일 수도 있고 알림 규칙과 함께 Terraform에서 데이터 소스를 정의할 수도 있습니다.

알림 규칙을 규정하려면
  1. 쿼리할 데이터 소스와 규칙을 저장할 폴더를 만드세요.

    이 예시에서는 테스트용 TestData 데이터 소스 구성 데이터 소스가 사용됩니다.

    Grafana의 모든 백엔드 데이터 소스에 대해 경고를 정의할 수 있습니다.

    resource "grafana_data_source" "testdata_datasource" { name = "TestData" type = "testdata" } resource "grafana_folder" "rule_folder" { title = "My Rule Folder" }
  2. 알림 규칙을 정의하세요.

    알림 규칙에 대한 자세한 내용은 Grafana에서 관리하는 알림을 만드는 방법을 참조하십시오.

  3. 하나 이상의 규칙을 포함하는 규칙 그룹을 생성합니다.

    이 예시에서는 grafana_rule_group 리소스 그룹이 사용됩니다.

    resource "grafana_rule_group" "my_rule_group" { name = "My Alert Rules" folder_uid = grafana_folder.rule_folder.uid interval_seconds = 60 org_id = 1 rule { name = "My Random Walk Alert" condition = "C" for = "0s" // Query the datasource. data { ref_id = "A" relative_time_range { from = 600 to = 0 } datasource_uid = grafana_data_source.testdata_datasource.uid // `model` is a JSON blob that sends datasource-specific data. // It's different for every datasource. The alert's query is defined here. model = jsonencode({ intervalMs = 1000 maxDataPoints = 43200 refId = "A" }) } // The query was configured to obtain data from the last 60 seconds. Let's alert on the average value of that series using a Reduce stage. data { datasource_uid = "__expr__" // You can also create a rule in the UI, then GET that rule to obtain the JSON. // This can be helpful when using more complex reduce expressions. model = <<EOT {"conditions":[{"evaluator":{"params":[0,0],"type":"gt"},"operator":{"type":"and"},"query":{"params":["A"]},"reducer":{"params":[],"type":"last"},"type":"avg"}],"datasource":{"name":"Expression","type":"__expr__","uid":"__expr__"},"expression":"A","hide":false,"intervalMs":1000,"maxDataPoints":43200,"reducer":"last","refId":"B","type":"reduce"} EOT ref_id = "B" relative_time_range { from = 0 to = 0 } } // Now, let's use a math expression as our threshold. // We want to alert when the value of stage "B" above exceeds 70. data { datasource_uid = "__expr__" ref_id = "C" relative_time_range { from = 0 to = 0 } model = jsonencode({ expression = "$B > 70" type = "math" refId = "C" }) } } }
  4. Grafana UI로 이동하여 알림 규칙을 확인하세요.

    알림 규칙이 실행되고 있는지 확인할 수 있습니다. 또한 각 경고 규칙의 쿼리 단계를 시각화하여 볼 수 있습니다.

    알림이 발생하면 Grafana는 정의한 정책을 통해 알림을 라우팅합니다.

    예를 들어 Slack을 연락처로 선택하면 Grafana에 내장된 Alertmanager가 Slack에 메시지를 자동으로 게시합니다.