使用 Terraform 建立和管理提醒資源 - Amazon Managed Grafana

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

使用 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 建立和管理提醒資源。

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

  2. 設定 Terraform 提供者。

  3. 在 Terraform 中定義您的提醒資源。

  4. 執行 terraform apply 來佈建您的提醒資源。

先決條件

  • 請確定您擁有 grafana/grafana Terraform 提供者 1.27.0 或更新版本。

  • 請確定您使用的是 Grafana 9.1 或更新版本。如果您使用 Grafana 第 9 版建立 Amazon Managed Grafana 執行個體,則這是 true。

建立用於佈建的 API 金鑰

您可以建立一般 Grafana API 金鑰,以向 Grafana 驗證 Terraform。使用 API 金鑰的大多數現有工具應會自動使用新的 Grafana 警示支援。如需建立金鑰以搭配 Terraform 使用的詳細資訊,請參閱使用 Terraform for Amazon Managed Grafana 自動化

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

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

  3. 建立新的服務帳戶字符。

  4. 命名並儲存權杖以用於 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 如何連線到您的外部系統,以及在何處傳送通知。有十五種不同的整合可供選擇。此範例使用 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 } }
  2. 在文字欄位中輸入通知的文字。

    text 欄位支援 Go 樣式範本。這可讓您直接在 Terraform 中管理 Grafana 警示通知範本。

  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. 定義提醒規則。

    如需警示規則的詳細資訊,請參閱如何建立 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 UI 並檢查您的提醒規則。

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

    當警示觸發時,Grafana 會透過您定義的政策來路由通知。

    例如,如果您選擇 Slack 作為聯絡窗口,Grafana 的內嵌 Alertmanager 會自動將訊息發佈到 Slack。