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 알림에 대한 Terraform 제공업체 지원을 사용하면 전체 Grafana 알림 스택을 코드로 쉽게 생성, 관리 및 유지할 수 있습니다.

Terraform을 사용하여 알림 리소스를 관리하는 방법에 대한 자세한 내용은 Terraform 설명서의 Grafana Provider 설명서를 참조하세요.

다음 태스크를 완료하여 Terraform을 사용해 알림 리소스를 생성하고 관리하세요.

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

  2. Terraform 제공업체를 구성하세요.

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

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

사전 조건

  • grafana/grafana Terraform provider 1.27.0 이상이 있는지 확인하세요.

  • Grafana 9.1 이상을 사용하고 있는지 확인하세요. Grafana 버전 9를 사용하여 Amazon Managed Grafana 인스턴스를 생성한 경우 이에 해당합니다.

프로비저닝을 위한 API 키 생성

일반 Grafana API 키를 생성하여 Grafana에서 Terraform을 인증할 수 있습니다. API 키를 사용하는 대부분의 기존 도구는 새로운 Grafana 알림 지원과 함께 자동으로 작동해야 합니다. 특별히 Terraform에서 사용할 키 생성에 대한 자세한 내용은 Using Terraform for Amazon Managed Grafana automation을 참조하세요.

프로비저닝을 위한 API 키를 생성하는 방법
  1. CI 파이프라인에 대한 새 서비스 계정을 생성하세요.

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

  3. 새 서비스 계정 토큰을 생성하세요.

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

또는 기본 인증을 사용할 수 있습니다. 지원되는 모든 인증 형식을 보려면 Terraform 설명서의 Grafana authentication을 참조하세요.

Terraform 제공업체 구성

Grafana 알림 지원은 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 스타일 템플릿 지정을 지원합니다. 이를 통해 Grafana 알림 전달 템플릿을 Terraform에서 직접 관리할 수 있습니다.

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

  4. Grafana UI로 이동하여 연락 지점의 세부 정보를 확인하세요.

    UI에서 Terraform을 통해 프로비저닝된 리소스를 편집할 수 없습니다. 그러면 알림 스택이 항상 코드와 동기화됩니다.

  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로 이동하여 알림 정책의 세부 정보를 확인하세요.

    참고

    UI를 통해 Terraform에서 프로비저닝된 리소스를 편집할 수 없습니다. 그러면 알림 스택이 항상 코드와 동기화됩니다.

  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 필드를 사용하여 알림 정책에서 새로 생성된 음소거 타이밍을 참조하세요. 그러면 일부 또는 모든 알림에 음소거 시간이 적용됩니다.

    참고

    UI를 통해 Terraform에서 프로비저닝된 리소스를 편집할 수 없습니다. 그러면 알림 스택이 항상 코드와 동기화됩니다.

  5. 테스트를 클릭하여 음소거 타이밍이 올바르게 작동하는지 확인하세요.

알림 규칙 프로비저닝

알림 규칙을 사용하면 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. 알림 규칙을 정의하세요.

    알림 규칙에 대한 자세한 내용은 how to create Grafana-managed alerts를 참조하세요.

  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에 메시지를 게시합니다.