使用地形建立和管理警示資源 - Amazon Managed Grafana

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用地形建立和管理警示資源

本文件主題是針對支援 Grafana 9.x 版的 Grafana 工作區所設計。

如需支援 Grafana 10.x 版的 Grafana 工作區,請參閱。在 Grafana 第 10 版工作

如需支援 Grafana 8.x 版的 Grafana 工作區,請參閱。在 Grafana 第 8 版中工作

使用 Terraform 的 Grafana 提供者來管理您的警示資源,並將其佈建到您的 Grafana 系統中。Graform 提供者支援 Grafana 警示功能可讓您輕鬆建立、管理及維護整個 Grafana 警示堆疊作為程式碼。

如需使用 Terraform 管理警示資源的詳細資訊,請參閱 Terraform 文件中的 Grafana 提供者文件。

完成下列任務,即可使用 Terraform 建立和管理您的警示資源。

  1. 建立用於佈建的 API 金鑰。

  2. 設定地形表單提供者。

  3. 在地形中定義您的警報資源。

  4. 執行terraform apply以佈建您的警示資源。

必要條件

  • 確保您擁有地/平台提供商 1.27.0 或更高版本。

  • 請確認您使用的是 9.1 或更高版本。如果您使用 Grafana 版本 9 建立了 Amazon 受管的 Grafana 執行個體,這將是真實的。

建立用於佈建的 API 金鑰

您可以建立一般的 Grafana API 金鑰,以便透過 Grafana 驗證地形。大多數使用 API 金鑰的現有工具應該會自動搭配新的 Grafana 警示支援使用。如需建立與 Terraform 搭配使用之金鑰的詳細資訊,請參閱使用 Terraform 進行 Amazon 受管的 Grafana 自動化。

若要建立用於佈建的 API 金鑰
  1. 為您的 CI 管道建立新的服務帳戶。

  2. 指派角色「存取警示規則佈建 API」。

  3. 創建一個新的服務帳戶令牌。

  4. 命名並保存令牌以在地形中使用。

或者,您也可以使用基本驗證。若要檢視所有支援的驗證格式,請參閱 Terraform 說明文件中的 Grafana 驗證

設定地形表單提供者

Grafana 警報支持包括作為格拉法那形提供商的一部分。

以下是您可以用來設定 Terraform 提供者的範例。

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

提供聯絡點和範本

聯繫點將警報堆棧連接到外部世界。他們告訴 Grafana 如何連接到您的外部系統以及在何處傳送通知。有超過十五種不同的集成可供選擇。此範例使用 Slack 聯絡點。

提供聯絡點和範本
  1. 將此代碼塊複製到本地計算機上的 .tf 文件中。使用您的 Slack 網絡掛鉤網址(或其他聯繫人)替換 < 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 } }
  2. 在文字欄位中輸入通知的文字。

    text字段支持 GO 風格的模板。這可讓您直接在 Terraform 中管理 Grafana 警示通知範本。

  3. 執行 terraform apply 命令。

  4. 前往 Grafana 使用者介面並檢查聯絡點的詳細資料。

    您無法從 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_時間欄位中,將靜音時間連結至您的通知原則。

  3. 執行 terraform apply 命令。

  4. 前往 Grafana 使用者介面並檢查通知政策的詳細資料。

    注意

    您無法從 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 使用者介面並檢查靜音時間的詳細資訊。

  4. 使用mute_timings欄位參考通知政策中新建立的靜音時間。這會將您的靜音時間套用至部分或全部通知。

    注意

    您無法從 UI 編輯從地形表單佈建的資源。這樣可以確保您的警報堆棧始終與代碼保持同步。

  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. 定義警示規則。

    如需警示規則的詳細資訊,請參閱如何建立 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 使用者介面並檢查您的警示規則。

    您可以查看警示規則是否正在觸發。您也可以查看每個警示規則查詢階段的視覺效果。

    當警示觸發時,Grafana 會透過您定義的原則路由傳送通知。

    例如,如果您選擇 Slack 作為聯絡點,Grafana 的嵌入式警示管理員會自動將訊息發佈給 Slack。