

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# アラートの設定
<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**
+ [外部アラートマネージャーの追加](v9-alerting-setup-alertmanager.md)
+ [Grafana アラートリソースのプロビジョニング](v9-alerting-setup-provision.md)

# 外部アラートマネージャーの追加
<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)」を参照してください。

Grafana を設定して、外部のアラートマネージャーを単一のアラートマネージャーとして使用してすべてのアラートを受信するようにできます。この外部アラートマネージャーは、Grafana 内から設定および管理できます。

アラートマネージャーを追加したら、Grafana アラート UI を使用して、サイレンス、コンタクトポイント、通知ポリシーを管理できます。これらのページのドロップダウンオプションを使用すると、アラートマネージャーを切り替えることができます。

**注記**  
Grafana 9.2 以降、アラートページの [管理] タブからの外部アラートマネージャーの URL 設定は廃止されました。これは、今後のリリースで削除されます。

外部アラートマネージャーは、メインの Grafana ナビゲーションメニューから Grafana 設定を使用してデータソースとして設定する必要があります。これにより、Grafana 内から外部アラートマネージャーの連絡先と通知ポリシーを管理できるようになり、以前は URL で外部アラートマネージャーを構成するときに表示されていた HTTP 基本認証資格情報も暗号化されます。

外部アラートマネージャーを追加するには、次のステップに従います。

1. [設定]、[データソース] を続けてクリックします。

1. アラートマネージャーを検索します。

1. 実装を選択し、必要に応じてページのフィールドに入力します。

   データソースをプロビジョニングする場合は、`jsonData` フィールドの `handleGrafanaManagedAlerts` フラグを `true` に設定して、Grafana が管理するアラートをこのアラートマネージャーに送信します。
**注記**  
アラートマネージャーの 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 アラートプロビジョニングを使用すると、組織に最適な方法でアラートデータを作成、管理、維持できるため、このプロセスが容易になります。

選択できるオプションは 2 つあります。

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 システムにプロビジョニングします。Terraform プロバイダーによる Grafana アラートのサポートにより、Grafana アラートスタック全体をコードとして簡単に作成、管理、維持できます。

Terraform を使用してアラートリソースを管理する方法の詳細については、Terraform ドキュメントの [[Grafana プロバイダー]](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 プロバイダー]](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 で使用するキーの作成の詳細については、[[Amazon Managed Grafana オートメーションでの Terraform の使用]](https://aws-observability.github.io/observability-best-practices/recipes/recipes/amg-automation-tf/)を参照してください。

**プロビジョニング用の API キーを作成するには**

1. CI パイプラインの新しいサービスアカウントを作成します。

1. ロール「アラートルールプロビジョニング API にアクセス」を割り当てます。

1. 新しいサービスアカウントトークンを作成します。

1. Terraform で使用するトークンに名前を付けて保存します。

または、基本認証を使用することもできます。サポートされているすべての認証形式を表示するには、Terraform ドキュメントの [[Grafana 認証]](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 に伝えます。選択できる[統合](https://registry.terraform.io/providers/grafana/grafana/latest/docs/resources/contact_point#optional)は 15 種類以上あります。この例では、Slack コンタクトポイントを使用します。

**コンタクトポイントとテンプレートをプロビジョニングするには**

1. このコードブロックをローカルマシンの .tf ファイルにコピーします。*<slack-webhook-url>* を Slack Webhook 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)をサポートします。これにより、Terraform で Grafana アラート通知テンプレートを直接管理できます。

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 に移動し、通知ポリシーの詳細を確認します。
**注記**  
Terraform からプロビジョニングされたリソースを UI から編集することはできません。これにより、アラートスタックは常にコードと同期したままになります。

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` フィールドを使用して、通知ポリシーで新しく作成したミュートタイミングを参照します。これにより、通知の一部またはすべてにミュートタイミングが適用されます。
**注記**  
Terraform からプロビジョニングされたリソースを UI から編集することはできません。これにより、アラートスタックは常にコードと同期したままになります。

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. アラートルールを定義します。

   アラートルールの詳細については、[[Grafana マネージドアラートの作成方法]](https://grafana.com/blog/2022/08/01/grafana-alerting-video-how-to-create-alerts-in-grafana-9/) を参照してください。

1. 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 の埋め込み[アラートマネージャー](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 を再起動するか、ホットリロードを実行します。これにより、ファイルが再度プロビジョニングされた場合やホットリロードが実行された場合に上書きされるリソースへの変更を防止します。