本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用地形建立和管理警示資源
本文件主題是針對支援 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 建立和管理您的警示資源。
-
建立用於佈建的 API 金鑰。
-
設定地形表單提供者。
-
在地形中定義您的警報資源。
-
執行
terraform apply
以佈建您的警示資源。
必要條件
-
確保您擁有地形
/平台提供商 1.27.0 或更高版本。 -
請確認您使用的是 9.1 或更高版本。如果您使用 Grafana 版本 9 建立了 Amazon 受管的 Grafana 執行個體,這將是真實的。
建立用於佈建的 API 金鑰
您可以建立一般的 Grafana API 金鑰,以便透過 Grafana 驗證地形。大多數使用 API 金鑰的現有工具應該會自動搭配新的 Grafana 警示支援使用。如需建立與 Terraform 搭配使用之金鑰的詳細資訊,請參閱使用 Terraform 進行 Amazon
若要建立用於佈建的 API 金鑰
-
為您的 CI 管道建立新的服務帳戶。
-
指派角色「存取警示規則佈建 API」。
-
創建一個新的服務帳戶令牌。
-
命名並保存令牌以在地形中使用。
或者,您也可以使用基本驗證。若要檢視所有支援的驗證格式,請參閱 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 如何連接到您的外部系統以及在何處傳送通知。有超過十五種不同的集成
提供聯絡點和範本
-
將此代碼塊複製到本地計算機上的 .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 } } -
在文字欄位中輸入通知的文字。
該
text
字段支持 GO 風格的模板。這可讓您直接在 Terraform 中管理 Grafana 警示通知範本。 -
執行
terraform apply
命令。 -
前往 Grafana 使用者介面並檢查聯絡點的詳細資料。
您無法從 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_時間欄位中,將靜音時間連結至您的通知原則。
-
執行
terraform apply
命令。 -
前往 Grafana 使用者介面並檢查通知政策的詳細資料。
注意
您無法從 UI 編輯從地形表單佈建的資源。這樣可以確保您的警報堆棧始終與代碼保持同步。
-
按一下「測試」以確認通知點是否正常運作。
佈建靜音計時
靜音計時可讓您在定義的時間段內將警示通知靜音。
若要佈建靜音計時
-
將此代碼塊複製到本地計算機上的 .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 使用者介面並檢查靜音時間的詳細資訊。
-
使用
mute_timings
欄位參考通知政策中新建立的靜音時間。這會將您的靜音時間套用至部分或全部通知。注意
您無法從 UI 編輯從地形表單佈建的資源。這樣可以確保您的警報堆棧始終與代碼保持同步。
-
按一下「測試」以確認靜音計時是否正常運作。
佈建警示規則
警示規則可讓您針對任何 Grafana 資料來源發出警示。這可以是您已經配置的數據源,也可以在 Terraform 中定義您的數據源
若要佈建警示規則
-
建立要查詢的資料來源,並建立要儲存規則的資料夾。
在此範例中,會使用設定要測試的 TestData 資料來源資料來源。
可以針對 Grafana 中的任何後端資料來源定義警示。
resource "grafana_data_source" "testdata_datasource" { name = "TestData" type = "testdata" } resource "grafana_folder" "rule_folder" { title = "My Rule Folder" }
-
定義警示規則。
如需警示規則的詳細資訊,請參閱如何建立 Grafana
管理的警示。 -
建立包含一或多個規則的規則群組。
在此範例中,會使用
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 使用者介面並檢查您的警示規則。
您可以查看警示規則是否正在觸發。您也可以查看每個警示規則查詢階段的視覺效果。
當警示觸發時,Grafana 會透過您定義的原則路由傳送通知。
例如,如果您選擇 Slack 作為聯絡點,Grafana 的嵌入式警示管理員會自動將訊息發
佈給 Slack。