模板
使用模板自定义、格式化和重复使用警报通知消息。通过合并动态内容(例如指标值、标签和其他上下文信息)创建更灵活和信息丰富的警报通知消息。
在 Grafana 中,有两种方法可以模板化警报通知消息
标签和注释
- 在警报规则中模板化标签和注释。
- 标签和注释包含有关警报的信息。
- 标签用于区分警报与所有其他警报,而注释用于向现有警报添加其他信息。
通知模板
- 在联系点中模板化通知。
- 向联系点添加通知模板以重复使用并确保通知中的消息一致。
- 使用通知模板更改通知中消息的标题、内容和格式。
此图说明了整个模板化过程,从在警报规则中创建标签和注释或在联系点中创建通知模板,到它们在导出和应用到警报通知消息时的样子。

在此图中
- 监控应用程序:Web 服务器、数据库或任何其他生成指标的服务。例如,它可以是提供有关请求速率、响应时间等的指标的 NGINX 服务器。
- Prometheus:Prometheus 从监控应用程序收集指标。例如,它可能会从 NGINX 服务器抓取指标,包括 instance(服务器主机名)和 job(服务名称)之类的标签。
- Grafana:Grafana 查询 Prometheus 以检索指标数据。例如,您可以创建一个警报规则来监控 NGINX 请求速率随时间的变化,并根据 instance 标签模板化标签或注释。
- Alertmanager:Alertmanager 是 Prometheus 生态系统的一部分,它处理警报通知。例如,如果某个特定 NGINX 服务器上的请求速率超过某个阈值,Alertmanager 就可以向例如 Slack 或电子邮件发送警报通知,包括服务器名称和超过的阈值(instance 标签将被插值,实际服务器名称将出现在警报通知中)。
- 警报通知:当警报规则条件满足时,Alertmanager 会向 Slack、Grafana OnCall 等各种渠道发送通知。这些通知可以包含来自与警报规则关联的标签的信息。例如,如果由于特定服务器上的 CPU 使用率过高而触发了警报,通知消息可以包含服务器名称(instance 标签)、磁盘使用率百分比和超过的阈值之类的详细信息。
标签和注释
标签和注释包含有关警报的信息。标签用于区分警报与所有其他警报,而注释用于向现有警报添加其他信息。
模板标签
标签模板应用于警报规则本身(即在警报的“配置标签和通知”部分)。
注意
当您需要改进或更改警报的唯一标识方式时,请考虑模板化标签。如果您从查询中获得的标签不够详细,这尤其有用。请记住,最好为摘要和描述保留长句子。此外,避免在标签中使用查询的值,因为这可能会在您实际上只需要一个警报时创建许多警报。
可以使用变量和函数应用模板化。这些变量可以表示从数据查询中检索的动态值。
注意
在 Grafana 模板化中,使用 $ 和 . 符号引用变量及其属性。您可以使用 $ 符号后跟变量名称,在警报规则定义中直接引用变量。类似地,您可以在警报规则定义中使用点 (.) 表示法访问变量的属性。
以下是一些常用的内置变量,用于在 Grafana 警报中与标签的名称和值交互
$labels
变量,它包含来自查询的所有标签。例如,假设您有一个当 CPU 使用率超过某个阈值时触发的警报规则。您希望创建注释以在触发此警报时提供更多上下文,例如包含遇到高 CPU 使用率的特定服务器。
The host {{ index $labels "instance" }} has exceeded 80% CPU usage for the last 5 minutes
此模板的结果将打印
The host instance 1 has exceeded 80% CPU usage for the last 5 minutes
$value
变量,它是一个字符串,包含警报规则中所有即时查询的标签和值;阈值、reduce 和数学表达式以及经典条件。在前面的示例中,
$value
变量将写入类似于以下内容的内容CPU usage for {{ index $labels "instance" }} has exceeded 80% for the last 5 minutes: {{ $value }}
此模板的结果将打印
CPU usage for instance1 has exceeded 80% for the last 5 minutes: [ var='A' labels={instance=instance1} value=81.234 ]
$values
变量是一个表,包含所有即时查询和表达式的标签和浮点值,并按它们的 Ref ID(即标识查询或表达式的 ID)进行索引。默认情况下,查询的 Red ID 为“A”。给定一个带有标签 instance=server1 的警报,以及一个值为 81.2345 的即时查询,将这样写入
CPU usage for {{ index $labels "instance" }} has exceeded 80% for the last 5 minutes: {{ index $values "A" }}
并将打印
CPU usage for instance1 has exceeded 80% for the last 5 minutes: 81.2345
注意
标签模板中的额外空格可能会破坏与通知策略的匹配。
模板注释
标签和注释具有相同的结构:一组命名值;但是它们的预期用途不同。注释的目的是为现有警报添加其他信息。
Grafana 中有一些建议的注释,例如 description
、summary
、runbook_url
、dashboardUId
和 panelId
。与标签一样,注释必须有名称,并且其值可以包含在警报触发时计算的文本和模板代码的组合。
以下是在警报规则上下文中对注释进行模板化的示例。文本/模板添加到“添加注释”部分。
CPU usage for {{ index $labels "instance" }} has exceeded 80% for the last 5 minutes
此模板的结果将打印
CPU usage for Instance 1 has exceeded 80% for the last 5 minutes
模板通知
通知模板代表为重复使用模板而设计的模板化的另一种方法。通知是向用户发送有关警报触发的事件或条件的邮件。您可以创建可重复使用的通知模板来自定义警报通知的内容和格式。变量、标签或其他特定于上下文的详细信息可以添加到模板中,以动态插入诸如指标值之类的信息。
以下是一个通知模板示例
{{ define "alerts.message" -}}
{{ if .Alerts.Firing -}}
{{ len .Alerts.Firing }} firing alert(s)
{{ template "alerts.summarize" .Alerts.Firing }}
{{- end }}
{{- if .Alerts.Resolved -}}
{{ len .Alerts.Resolved }} resolved alert(s)
{{ template "alerts.summarize" .Alerts.Resolved }}
{{- end }}
{{- end }}
{{ define "alerts.summarize" -}}
{{ range . -}}
- {{ index .Annotations "summary" }}
{{ end }}
{{ end }}
这是您将在您的联系点接收到的消息
1 firing alert(s)
- The database server db1 has exceeded 75% of available disk space. Disk space used is 76%, please resize the disk size within the next 24 hours
1 resolved alert(s)
- The web server web1 has been responding to 5% of HTTP requests with 5xx errors for the last 5 minutes
创建模板后,您需要在您的**联系点**中引用它(在可选的[联系点]
设置中)。
注意
不建议在通知模板中包含单个警报信息。相反,将此类详细信息纳入使用标签和注释的规则中更有效。