菜单
Grafana Cloud 企业版 开源版

模板

使用模板自定义、格式化和重复使用警报通知消息。通过合并动态内容(例如指标值、标签和其他上下文信息)创建更灵活和信息丰富的警报通知消息。

在 Grafana 中,有两种方法可以模板化警报通知消息

  1. 标签和注释

    • 在警报规则中模板化标签和注释。
    • 标签和注释包含有关警报的信息。
    • 标签用于区分警报与所有其他警报,而注释用于向现有警报添加其他信息。
  2. 通知模板

    • 在联系点中模板化通知。
    • 向联系点添加通知模板以重复使用并确保通知中的消息一致。
    • 使用通知模板更改通知中消息的标题、内容和格式。

此图说明了整个模板化过程,从在警报规则中创建标签和注释或在联系点中创建通知模板,到它们在导出和应用到警报通知消息时的样子。

How Templating works
模板的工作原理

在此图中

  • 监控应用程序: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 中有一些建议的注释,例如 descriptionsummaryrunbook_urldashboardUIdpanelId。与标签一样,注释必须有名称,并且其值可以包含在警报触发时计算的文本和模板代码的组合。

以下是在警报规则上下文中对注释进行模板化的示例。文本/模板添加到“添加注释”部分。

    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

模板通知

通知模板代表为重复使用模板而设计的模板化的另一种方法。通知是向用户发送有关警报触发的事件或条件的邮件。您可以创建可重复使用的通知模板来自定义警报通知的内容和格式。变量、标签或其他特定于上下文的详细信息可以添加到模板中,以动态插入诸如指标值之类的信息。

以下是一个通知模板示例

Go
{{ 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

创建模板后,您需要在您的**联系点**中引用它(在可选的[联系点]设置中)。

注意

不建议在通知模板中包含单个警报信息。相反,将此类详细信息纳入使用标签和注释的规则中更有效。