菜单
Grafana Cloud Enterprise 开源 RSS

模板注释和标签

您可以使用模板自定义警报和通知消息,包括从警报规则查询中获取动态数据。

在 Grafana Alerting 中,您可以通过两种方式对警报消息进行模板化。

  1. 模板注释和标签:在警报规则定义中,您可以对注释和标签进行模板化,以在警报中包含来自查询数据的额外信息,根据查询结果添加有意义的详细信息。
  2. 模板通知:您可以对通知进行模板化,以控制通知的内容和外观。

模板化工作原理

此图显示了两种模板类型的差异。

How templating works

有关此图的更详细解释,请参阅模板介绍

两种类型的模板都使用 Go 模板系统编写。然而,重要的是要理解通知模板中使用的变量和函数与注释和标签模板中使用的变量和函数是不同的。

  1. 模板注释和标签:这些模板向单个警报实例添加额外信息。像 $labels$values 这样的模板变量代表单个警报实例的警报查询数据。
  2. 模板通知:通知模板格式化一组警报的通知内容。像 .Alerts 这样的变量包含通知中所有触发和已解决的警报。

模板注释

注释为警报实例添加额外信息,通常用于帮助识别警报并指导响应者如何处理问题。

注释是警报规则中定义的键值对。它们可以包含纯文本或在警报触发时评估的模板代码。

Grafana 包含几个可选注释,例如 descriptionsummaryrunbook_url,这些都可以在警报规则中进行编辑。您也可以创建自己的自定义注释。例如,您可以创建一个名为 location 的新注释来报告触发警报的系统位置。

以下是解释警报触发原因的 summary 注释示例,使用纯文本。

CPU usage has exceeded 80% for the last 5 minutes.

但是,如果您想在注释中显示动态查询值,则需要使用模板代码。常见用例包括:

  • 显示触发警报的查询值。
  • 突出显示用于识别警报的标签信息,例如环境、实例或区域。
  • 根据查询值提供特定说明。
  • 根据查询标签自定义运行手册链接。
  • 包含基于查询标签的联系信息。

例如,您可以模板化上一个示例以显示触发警报的特定实例和 CPU 值。

CPU usage for {{ $labels.instance }} has exceeded 80% ({{ $values.A.Value }}) for the last 5 minutes.

或者,您可以使用 index 函数打印查询值。

CPU usage for {{ index $labels "instance" }} has exceeded 80% ({{ index $values "A" }}) for the last 5 minutes.

注释的结果如下所示。

CPU usage for Instance 1 has exceeded 80% (81.2345) for the last 5 minutes.

如何模板化注释

完成以下步骤来模板化注释。

  1. 导航到 Alerts & IRM -> Alert rules -> 创建或编辑警报规则。
  2. 向下滚动到 Configure notification message(配置通知消息)部分。
  3. 将您的模板复制到相应的注释字段中(summarydescriptionrunbook_urlcustom)。

预览注释模板

在创建或编辑警报规则时,您可以对注释进行模板化。

An alert rule templating the annotation summary

有两种常用的方法来测试和预览注释模板:

  1. 触发警报并在 Grafana UI 中查看警报实例状态,其中显示了警报实例的所有注释。
  2. 使用一个显示所有注释的通知模板,然后使用警报实例预览该通知模板

模板标签

警报实例的标签集合用于在所有其他警报实例中唯一标识该警报。

标签决定了警报如何进行通知路由和管理,因此其设计对于警报系统的有效性至关重要。

标签可以由警报规则查询返回,例如 Kubernetes Prometheus 查询中的 pod 标签。您也可以在警报规则中定义附加标签,以便为处理警报提供额外信息。

与注释类似,标签是键值对,可以包含纯文本或在警报触发时评估的模板代码。

当查询返回的标签不足时,可以模板化标签。例如:

  • 基于查询值的新标签可以以不同的方式对警报子集进行分组,从而改变通知发送方式。
  • 基于查询值的新标签可以在通知策略中使用,以改变通知联系点。

以下是根据查询值模板化 severity 标签的示例。

Go
{{ if (gt $values.A.Value 90.0) -}}
critical
{{ else if (gt $values.A.Value 80.0) -}}
high
{{ else if (gt $values.A.Value 60.0) -}}
medium
{{ else -}}
low
{{- end }}

在此示例中,severity 标签的值由查询值决定,可能的选项是 criticalhighmediumlow。然后您可以使用 severity 标签来更改其通知——例如,立即发送 critical 警报,或者将 low 警报路由到特定团队进行进一步审查。

注意

警报实例由其标签集合唯一标识。

  • 避免在标签中显示查询值,因为这会创建许多警报实例——每个不同的标签集合对应一个实例。相反,请使用注释来显示查询值。
  • 如果模板化标签的值发生更改,它将映射到不同的警报实例,并且当其标签值不再存在时,先前的实例会转换为 No data 状态。

如何模板化标签

完成以下步骤来模板化标签。

  1. 导航到 Alerts & IRM -> Alert rules -> 创建或编辑警报规则。
  2. 向下滚动到 Configure labels and notifications(配置标签和通知)部分。
  3. 点击 + Add labels(+ 添加标签)。
  4. 输入标识标签的 key
  5. value 字段中复制您的模板。

预览标签模板

在创建或编辑警报规则时,您可以模板化标签值。

要预览标签值,选择 Use notification policy,然后点击 Preview routing

Routing preview displays label values

更多信息

有关如何模板化警报规则的更多详细信息,请参阅:

提示

有关模板化的实际示例,请参阅我们的报警入门:模板化教程