

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

# 알림 설정
<a name="v9-alerting-setup"></a>

****  
이 설명서 주제는 **Grafana 버전 9.x**를 지원하는 Grafana 워크스페이스를 위해 설계되었습니다.  
Grafana 버전 10.x를 지원하는 Grafana 워크스페이스의 경우 [Grafana 버전 10에서 작업](using-grafana-v10.md) 섹션을 참조하세요.  
Grafana 버전 8.x를 지원하는 Grafana 워크스페이스의 경우 [Grafana 버전 8에서 작업](using-grafana-v8.md) 섹션을 참조하세요.

알림을 생성 및 관리하는 데 필요한 기능과 통합을 구성합니다.

**Topics**
+ [외부 Alertmanager 추가](v9-alerting-setup-alertmanager.md)
+ [Grafana 알림 리소스 프로비저닝](v9-alerting-setup-provision.md)

# 외부 Alertmanager 추가
<a name="v9-alerting-setup-alertmanager"></a>

****  
이 설명서 주제는 **Grafana 버전 9.x**를 지원하는 Grafana 워크스페이스를 위해 설계되었습니다.  
Grafana 버전 10.x를 지원하는 Grafana 워크스페이스의 경우 [Grafana 버전 10에서 작업](using-grafana-v10.md) 섹션을 참조하세요.  
Grafana 버전 8.x를 지원하는 Grafana 워크스페이스의 경우 [Grafana 버전 8에서 작업](using-grafana-v8.md) 섹션을 참조하세요.

외부 Alertmanager를 단일 Alertmanager로 사용하여 모든 알림을 수신하도록 Grafana를 설정합니다. 그러면 Grafana 자체 내에서 이 외부 Alertmanager를 구성하고 관리할 수 있습니다.

Alertmanager를 추가한 후에는 Grafana 알림 UI를 사용하여 무음, 연락 지점 및 알림 정책을 관리할 수 있습니다. 이러한 페이지의 드롭다운 옵션을 사용하면 Alertmanager 사이를 전환할 수 있습니다.

**참고**  
Grafana 9.2부터 알림 페이지의 관리 탭에서 외부 Alertmanager의 URL 구성이 더 이상 사용되지 않습니다. 향후 릴리스에서 제거됩니다.

이제 외부 Alertmanager는 기본 Grafana 탐색 메뉴에서 Grafana 구성을 사용하여 데이터 소스로 구성되어야 합니다. 이를 통해 Grafana 내에서 외부 Alertmanager의 연락 지점 및 알림 정책을 관리할 수 있으며 URL을 기준으로 외부 Alertmanager를 구성할 때 이전에 볼 수 있었던 HTTP 기본 인증 자격 증명도 암호화할 수 있습니다.

외부 Alertmanager를 추가하려면 다음 단계를 수행하세요.

1. 구성, 데이터 소스를 차례로 클릭하세요.

1. Alertmanager를 검색하세요.

1. 구현을 선택하고 필요에 따라 페이지의 필드를 작성하세요.

   데이터 소스를 프로비저닝하는 경우 `jsonData` 필드에서 `handleGrafanaManagedAlerts` 플래그를 `true`로 설정하여 Grafana 관리형 알림을 이 Alertmanager로 보내세요.
**참고**  
Alertmanager의 Prometheus, Grafana Mimir 및 Cortex 구현이 지원됩니다. Prometheus의 경우 Grafana 알림 UI에서 연락 지점 및 알림 정책은 읽기 전용입니다.

1. 저장 및 테스트를 클릭하세요.

# Grafana 알림 리소스 프로비저닝
<a name="v9-alerting-setup-provision"></a>

****  
이 설명서 주제는 **Grafana 버전 9.x**를 지원하는 Grafana 워크스페이스를 위해 설계되었습니다.  
Grafana 버전 10.x를 지원하는 Grafana 워크스페이스의 경우 [Grafana 버전 10에서 작업](using-grafana-v10.md) 섹션을 참조하세요.  
Grafana 버전 8.x를 지원하는 Grafana 워크스페이스의 경우 [Grafana 버전 8에서 작업](using-grafana-v8.md) 섹션을 참조하세요.

알림 인프라는 종종 복잡하며 해당 파이프라인의 많은 부분이 종종 다른 위치에 상주합니다. 여러 팀과 조직에 걸쳐 규모를 조정하기란 특히 어렵습니다. Grafana 알림 프로비저닝을 사용하면 조직에 가장 적합한 방식으로 알림 데이터를 생성, 관리 및 유지 관리할 수 있으므로 이 프로세스가 더 쉬워집니다.

두 가지 옵션 중에서 선택할 수 있습니다.

1. 알림 프로비저닝 HTTP API를 사용하여 알림 리소스를 프로비저닝합니다.
**참고**  
일반적으로 Grafana UI에서는 API 프로비저닝 알림 규칙을 편집할 수 없습니다.  
편집을 활성화하려면 API에서 알림 규칙을 생성하거나 편집할 때 다음 요청에 x-disable-provenance 헤더를 추가합니다.  

   ```
   POST /api/v1/provisioning/alert-rules
   PUT /api/v1/provisioning/alert-rules/{UID}
   ```

1. Terraform을 사용하여 알림 리소스를 프로비저닝합니다.

**참고**  
현재 Grafana 알림에 대한 프로비저닝은 알림 규칙, 연락 지점, 음소거 타이밍 및 템플릿을 지원합니다. 파일 프로비저닝 또는 Terraform을 사용하여 프로비저닝된 알림 리소스는 Grafana 또는 기타 소스 내에서가 아니라 해당 리소스를 생성한 소스에서만 편집할 수 있습니다. 예를 들어 디스크의 파일을 사용하여 알림 리소스를 프로비저닝하는 경우 Terraform 또는 Grafana 내에서 데이터를 편집할 수 없습니다.

**Topics**
+ [Terraform을 사용하여 알림 리소스 생성 및 관리](v9-alerting-setup-provision-terraform.md)
+ [Grafana에서 프로비저닝된 알림 리소스 보기](v9-alerting-setup-provision-view.md)

# Terraform을 사용하여 알림 리소스 생성 및 관리
<a name="v9-alerting-setup-provision-terraform"></a>

****  
이 설명서 주제는 **Grafana 버전 9.x**를 지원하는 Grafana 워크스페이스를 위해 설계되었습니다.  
Grafana 버전 10.x를 지원하는 Grafana 워크스페이스의 경우 [Grafana 버전 10에서 작업](using-grafana-v10.md) 섹션을 참조하세요.  
Grafana 버전 8.x를 지원하는 Grafana 워크스페이스의 경우 [Grafana 버전 8에서 작업](using-grafana-v8.md) 섹션을 참조하세요.

Terraform의 Grafana 제공업체를 사용하여 알림 리소스를 관리하고 Grafana 시스템에 프로비저닝합니다. Grafana 알림에 대한 Terraform 제공업체 지원을 사용하면 전체 Grafana 알림 스택을 코드로 쉽게 생성, 관리 및 유지할 수 있습니다.

Terraform을 사용하여 알림 리소스를 관리하는 방법에 대한 자세한 내용은 Terraform 설명서의 [Grafana Provider](https://registry.terraform.io/providers/grafana/grafana/latest/docs) 설명서를 참조하세요.

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

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

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

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

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

## 사전 조건
<a name="v9-alerting-setup-provision-tf-prerequisites"></a>
+ grafana/grafana [Terraform provider](https://registry.terraform.io/providers/grafana/grafana/1.28.0) 1.27.0 이상이 있는지 확인하세요.
+ Grafana 9.1 이상을 사용하고 있는지 확인하세요. Grafana 버전 9를 사용하여 Amazon Managed Grafana 인스턴스를 생성한 경우 이에 해당합니다.

## 프로비저닝을 위한 API 키 생성
<a name="v9-alerting-setup-provision-tf-apikey"></a>

[일반 Grafana API 키를 생성](Using-Grafana-APIs.md)하여 Grafana에서 Terraform을 인증할 수 있습니다. API 키를 사용하는 대부분의 기존 도구는 새로운 Grafana 알림 지원과 함께 자동으로 작동해야 합니다. 특별히 Terraform에서 사용할 키 생성에 대한 자세한 내용은 [Using Terraform for Amazon Managed Grafana automation](https://aws-observability.github.io/observability-best-practices/recipes/recipes/amg-automation-tf/)을 참조하세요.

**프로비저닝을 위한 API 키를 생성하는 방법**

1. CI 파이프라인에 대한 새 서비스 계정을 생성하세요.

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

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

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

또는 기본 인증을 사용할 수 있습니다. 지원되는 모든 인증 형식을 보려면 Terraform 설명서의 [Grafana authentication](https://registry.terraform.io/providers/grafana/grafana/latest/docs#authentication)을 참조하세요.

## Terraform 제공업체 구성
<a name="v9-alerting-setup-provision-tf-configure"></a>

Grafana 알림 지원은 [Grafana Terraform 제공업체](https://registry.terraform.io/providers/grafana/grafana/latest/docs)의 일부로 포함됩니다.

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

```
terraform {
    required_providers {
        grafana = {
            source = "grafana/grafana"
            version = ">= 1.28.2"
        }
    }
}

provider "grafana" {
    url = <YOUR_GRAFANA_URL>
    auth = <YOUR_GRAFANA_API_KEY>
}
```

## 연락 지점 및 템플릿 프로비저닝
<a name="v9-alerting-setup-provision-tf-contacts"></a>

연락 지점은 알림 스택을 외부 환경에 연결합니다. 외부 시스템에 연결하는 방법과 알림을 전송할 위치를 Grafana에 알려줍니다. 15개가 넘는 서로 다른 [통합](https://registry.terraform.io/providers/grafana/grafana/latest/docs/resources/contact_point#optional) 중에서 선택할 수 있습니다. 이 예제에서는 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
       }
   }
   ```

1. 텍스트 필드에 알림 텍스트를 입력하세요.

   `text` 필드는 [Go 스타일 템플릿 지정](https://pkg.go.dev/text/template)을 지원합니다. 이를 통해 Grafana 알림 전달 템플릿을 Terraform에서 직접 관리할 수 있습니다.

1. `terraform apply` 명령을 실행합니다.

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

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

1. **테스트**를 클릭하여 연락 지점이 올바르게 작동하는지 확인하세요.

**참고**  
여러 연락 지점에서 동일한 템플릿을 재사용할 수 있습니다. 위 예제에서는 `{{ 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
}
```

## 알림 정책 및 라우팅 프로비저닝
<a name="v9-alerting-setup-provision-tf-notifications"></a>

알림 정책은 위치가 아닌 알림 인스턴스를 라우팅하는 방법을 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 = ["..."]
           }
       }
   }
   ```

1. mute\$1timings 필드에서 음소거 타이밍을 알림 정책에 연결하세요.

1. `terraform apply` 명령을 실행합니다.

1. Grafana UI로 이동하여 알림 정책의 세부 정보를 확인하세요.
**참고**  
UI를 통해 Terraform에서 프로비저닝된 리소스를 편집할 수 없습니다. 그러면 알림 스택이 항상 코드와 동기화됩니다.

1. **테스트**를 클릭하여 알림 포인트가 올바르게 작동하는지 확인하세요.

## 프로비저닝 음소거 타이밍
<a name="v9-alerting-setup-provision-tf-mutetiming"></a>

음소거 타이밍은 정의된 기간에 알림 메시지를 음소거할 수 있는 기능을 제공합니다.

**음소거 타이밍을 프로비저닝하는 방법**

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"]
       }
   }
   ```

1. `terraform apply` 명령을 실행합니다.

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

1. `mute_timings` 필드를 사용하여 알림 정책에서 새로 생성된 음소거 타이밍을 참조하세요. 그러면 일부 또는 모든 알림에 음소거 시간이 적용됩니다.
**참고**  
UI를 통해 Terraform에서 프로비저닝된 리소스를 편집할 수 없습니다. 그러면 알림 스택이 항상 코드와 동기화됩니다.

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

## 알림 규칙 프로비저닝
<a name="v9-alerting-setup-provision-tf-rules"></a>

[알림 규칙](v9-alerting-managerules.md)을 사용하면 Grafana 데이터 소스에 대해 경고할 수 있습니다. 이미 구성한 데이터 소스일 수도 있습니다. 아니면 알림 규칙과 함께 [Terraform에서 데이터 소스를 정의](https://registry.terraform.io/providers/grafana/grafana/latest/docs/resources/data_source)할 수도 있습니다.

**알림 규칙을 프로비저닝하는 방법**

1. 쿼리할 데이터 소스와 규칙을 저장할 폴더를 생성하세요.

   이 예제에서 [테스트를 위한 TestData 데이터 소스 구성](testdata-data-source.md) 데이터 소스가 사용됩니다.

   Grafana의 모든 백엔드 데이터 소스에 대해 알림을 정의할 수 있습니다.

   ```
   resource "grafana_data_source" "testdata_datasource" {
       name = "TestData"
       type = "testdata"
   }
   
   resource "grafana_folder" "rule_folder" {
       title = "My Rule Folder"
   }
   ```

1. 알림 규칙을 정의하세요.

   알림 규칙에 대한 자세한 내용은 [how to create Grafana-managed alerts](https://grafana.com/blog/2022/08/01/grafana-alerting-video-how-to-create-alerts-in-grafana-9/)를 참조하세요.

1. 하나 이상의 규칙이 포함된 규칙 그룹을 생성하세요.

   이 예제에서 `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"
               })
           }
       }
   }
   ```

1. Grafana UI로 이동하여 알림 규칙을 확인하세요.

   알림 규칙이 실행 중인지 확인할 수 있습니다. 또한 각 알림 규칙의 쿼리 단계에 대한 시각화를 볼 수 있습니다.

   알림이 실행되면 Grafana에서는 사용자가 정의한 정책을 통해 알림을 라우팅합니다.

   예를 들어 Slack을 연락 지점으로 선택하면 Grafana의 임베드된 [Alertmanager](https://github.com/prometheus/alertmanager)에서 자동으로 Slack에 메시지를 게시합니다.

# Grafana에서 프로비저닝된 알림 리소스 보기
<a name="v9-alerting-setup-provision-view"></a>

****  
이 설명서 주제는 **Grafana 버전 9.x**를 지원하는 Grafana 워크스페이스를 위해 설계되었습니다.  
Grafana 버전 10.x를 지원하는 Grafana 워크스페이스의 경우 [Grafana 버전 10에서 작업](using-grafana-v10.md) 섹션을 참조하세요.  
Grafana 버전 8.x를 지원하는 Grafana 워크스페이스의 경우 [Grafana 버전 8에서 작업](using-grafana-v8.md) 섹션을 참조하세요.

 Grafana에서 알림 리소스가 생성되었는지 확인할 수 있습니다.

**Grafana에서 프로비저닝된 리소스를 보는 방법**

1. Grafana 인스턴스를 여세요.

1. 알림으로 이동하세요.

1. 알림 규칙과 같은 알림 리소스 폴더를 클릭하세요.

   프로비저닝된 리소스에는 **프로비저닝됨** 레이블이 지정되므로 수동으로 생성되지 않았음을 표시합니다.

**참고**  
Grafana에서는 프로비저닝된 리소스를 편집할 수 없습니다. 프로비저닝 파일을 변경하고 Grafana를 다시 시작하거나 핫 리로드를 수행하는 경우에만 리소스 속성을 변경할 수 있습니다. 이렇게 하면 파일이 다시 프로비저닝되거나 핫 리로드가 수행되는 경우 덮어쓸 리소스가 변경되는 것을 방지할 수 있습니다.