翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Terraform を使用したアラートリソースの作成と管理
このドキュメントトピックは、Grafana バージョン 9.x をサポートする Grafana ワークスペース向けに設計されています。
Grafana バージョン 10.x をサポートする Grafana ワークスペースについては、「」を参照してくださいGrafana バージョン 10 での作業。
Grafana バージョン 8.x をサポートする Grafana ワークスペースについては、「」を参照してくださいGrafana バージョン 8 での作業。
Terraform の Grafana プロバイダーを使用してアラートリソースを管理し、Grafana システムにプロビジョニングします。Terraform プロバイダーによる Grafana アラートのサポートにより、Grafana アラートスタック全体をコードとして簡単に作成、管理、保守できます。
Terraform を使用したアラートリソースの管理の詳細については、Terraform ドキュメントの Grafana プロバイダー
Terraform を使用してアラートリソースを作成および管理するには、次のタスクを実行します。
-
プロビジョニング用の API キーを作成します。
-
Terraform プロバイダーを設定します。
-
Terraform でアラートリソースを定義します。
-
を実行して
terraform apply
、アラートリソースをプロビジョニングします。
前提条件
-
grafana/grafana Terraform プロバイダー
1.27.0 以降を使用していることを確認します。 -
Grafana 9.1 以降を使用していることを確認します。Grafana バージョン 9 で Amazon Managed Grafana インスタンスを作成した場合、これは当てはまります。
プロビジョニング用の API キーを作成する
通常の Grafana API キーを作成して、Grafana で Terraform を認証できます。API キーを使用する既存のツールのほとんどは、新しい Grafana アラートサポートで自動的に機能します。Terraform で使用するキーの作成の詳細については、「Amazon Managed Grafana オートメーションに Terraform
プロビジョニング用の API キーを作成するには
-
CI パイプラインの新しいサービスアカウントを作成します。
-
ロール「アラートルールのプロビジョニング API へのアクセス」を割り当てます。
-
新しいサービスアカウントトークンを作成します。
-
Terraform で使用するトークンに名前を付けて保存します。
または、基本認証を使用することもできます。サポートされているすべての認証形式を確認するには、Terraform ドキュメントの「Grafana 認証
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 種類以上の統合
連絡先とテンプレートをプロビジョニングするには
-
このコードブロックをローカルマシンの .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 } } -
テキストフィールドに通知のテキストを入力します。
text
フィールドは、Go スタイルのテンプレートをサポートします。これにより、Grafana アラート通知テンプレートを Terraform で直接管理できます。 -
terraform apply
コマンドを実行します。 -
Grafana UI に移動し、連絡先の詳細を確認します。
UI から Terraform を介してプロビジョニングされたリソースを編集することはできません。これにより、アラートスタックは常にコードと同期したままになります。
-
テスト をクリックして、コンタクトポイントが正しく動作することを確認します。
注記
同じテンプレートを多くのコンタクトポイントで再利用できます。上記の例では、 ステートメントを使用して埋め込まれた共有テンプレート {{ 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に指示します。ラベルとマッチャーのシステムを使用して、以前に定義したコンタクトポイントに発声アラートを接続します。
通知ポリシーとルーティングをプロビジョニングするには
-
このコードブロックをローカルマシンの .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 = ["..."] } } }
-
mute_timings フィールドで、ミュートタイミングを通知ポリシーにリンクします。
-
terraform apply
コマンドを実行します。 -
Grafana UI に移動し、通知ポリシーの詳細を確認します。
注記
UI から Terraform からプロビジョニングされたリソースを編集することはできません。これにより、アラートスタックは常にコードと同期したままになります。
-
テスト をクリックして、通知ポイントが正しく動作していることを確認します。
ミュートタイミングのプロビジョニング
ミュートタイミングは、定義された期間のアラート通知をミュートする機能を提供します。
ミュートタイミングをプロビジョニングするには
-
このコードブロックをローカルマシンの .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"] } }
-
terraform apply
コマンドを実行します。 -
Grafana UI に移動し、ミュートタイミングの詳細を確認します。
-
mute_timings
フィールドを使用して、通知ポリシーで新しく作成されたミュートタイミングを参照します。これにより、通知の一部またはすべてにミュートタイミングが適用されます。注記
UI から Terraform からプロビジョニングされたリソースを編集することはできません。これにより、アラートスタックは常にコードと同期したままになります。
-
テスト をクリックして、ミュートタイミングが正しく動作していることを確認します。
アラートルールのプロビジョニング
アラートルールを使用すると、Grafana データソースに対してアラートを送信できます。これは、既に設定したデータソースでも、アラートルールとともに Terraform でデータソースを定義
アラートルールをプロビジョニングするには
-
クエリを実行するデータソースと、ルールを保存するフォルダを作成します。
この例では、テスト用の TestData データソースを設定するデータソースが使用されます。
アラートは、Grafana の任意のバックエンドデータソースに対して定義できます。
resource "grafana_data_source" "testdata_datasource" { name = "TestData" type = "testdata" } resource "grafana_folder" "rule_folder" { title = "My Rule Folder" }
-
アラートルールを定義します。
アラートルールの詳細については、「Grafana マネージドアラートの作成方法
」を参照してください。 -
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" }) } } }
-
Grafana UI に移動し、アラートルールを確認します。
アラートルールが発動しているかどうかを確認できます。アラートルールの各クエリステージを視覚化することもできます。
アラートが発生すると、Grafana は定義したポリシーを通じて通知をルーティングします。
例えば、Slack をコンタクトポイントとして選択した場合、Grafana の埋め込み Alertmanager
は自動的にメッセージを Slack に投稿します。