使用 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 Alerting 的支持使您可以轻松地以代码形式创建、管理和维护整个 Grafana 警报堆栈。

有关使用 Terraform 管理警报资源的更多信息,请参阅 Terraform 文档中的 Grafana 提供者文档

完成以下任务,使用 Terraform 创建和管理您的警报资源。

  1. 创建用于配置的 API 密钥。

  2. 配置 Terraform 提供程序。

  3. 在 Terraform 中定义你的警报资源。

  4. 运行terraform apply以配置您的警报资源。

先决条件

  • 确保你有 grafana/grafana Ter raform 提供商 1.27.0 或更高版本。

  • 确保你使用的是 Grafana 9.1 或更高版本。如果您使用 Grafana 版本 9 创建了亚马逊托管 Grafana 实例,则会出现这种情况。

创建用于置备的 API 密钥

你可以创建一个普通的 Grafana API 密钥来使用 Grafana 对 Terraform 进行身份验证。大多数使用 API 密钥的现有工具都应自动使用新的 Grafana 警报支持。有关创建用于 Terraform 的密钥的具体信息,请参阅使用 Terraform 实现亚马逊托管 Gra fana 自动化。

创建用于置备的 API 密钥
  1. 为您的 CI 管道创建一个新的服务帐号。

  2. 分配角色 “访问警报规则配置 API”。

  3. 创建新的服务帐号令牌。

  4. 命名并保存令牌以在 Terraform 中使用。

或者,您可以使用基本身份验证。要查看所有支持的身份验证格式,请参阅 Ter raform 文档中的 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 网络挂钩网址(或其他联系人)

    此示例创建了一个向 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 用户界面并查看联系人的详细信息。

    您无法在用户界面中编辑通过 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 用户界面并查看您的通知政策的详细信息。

    注意

    您无法通过用户界面编辑从 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 用户界面,查看静音时间的详细信息。

  4. 使用mute_timings字段在通知策略中引用您新创建的静音计时。这会将您的静音时间应用于您的部分或全部通知。

    注意

    您无法通过用户界面编辑从 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 用户界面并查看您的警报规则。

    您可以查看警报规则是否正在触发。您还可以看到警报规则每个查询阶段的可视化效果。

    警报触发时,Grafana 会通过您定义的策略发送通知。

    例如,如果你选择 Slack 作为联系人,Grafana 的嵌入式警报管理器会自动向 Sl ack 发布消息。