使用消息模板 - Amazon Managed Grafana

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用消息模板

本文档主题专为支持 Grafana 8.x 版本的 Grafana 工作空间而设计。

有关支持 Grafana 版本 10.x 的 Grafana 工作空间,请参阅。在 Grafana 版本 10 中工作

有关支持 Grafana 9.x 版本的 Grafana 工作空间,请参阅。在 Grafana 版本 9 中工作

通过发送的通知使用联络点是使用消息模板生成的。Grafana 的默认模板基于 Go 模板系统,其中一些字段被评估为文本,而另一些字段则以 HTML 进行评估(这可能会影响转义)。

由于大多数联系人字段都可以模板化,因此您可以创建可重复使用的自定义模板并在多个联系点中使用它们。该模板数据主题列出了可用于模板化的变量。

使用模板

模板用于创建消息。例如,通过 Slack 警报消息,您可以在联系人中设置标题和正文。以下示例说明如何使用默认模板创建标题,其中包含触发和已解决的警报数量,以及列出警报及其状态的正文。

  • 标题:

    {{ len .Alerts.Firing }} firing, {{ len .Alerts.Resolved }} resolved
  • 正文

    {{ range .Alerts }}{{ .Status }}: {{ .Labels.alertname }} {{end }}

您可以创建自己的自定义模板,如以下示例所示。

  • 标题:

    {{ template "slack.default.title" .}}
  • 正文

    {{ template "mymessage" .}}

以下是一个示例模板。

{{ define "myalert" }} [{{.Status}}] {{ .Labels.alertname }} Labels: {{ range .Labels.SortedPairs }} {{ .Name }}: {{ .Value }} {{ end }} {{ if gt (len .Annotations) 0 }} Annotations: {{ range .Annotations.SortedPairs }} {{ .Name }}: {{ .Value }} {{ end }} {{ end }} {{ if gt (len .SilenceURL ) 0 }} Silence alert: {{ .SilenceURL }} {{ end }} {{ if gt (len .DashboardURL ) 0 }} Go to dashboard: {{ .DashboardURL }} {{ end }} {{ end }}

以下过程说明如何创建、编辑和删除自定义消息模板。

创建消息模板
  1. 在 Grafana 控制台的 Grafana 菜单中,选择警报(铃铛)图标打开警报页面。

  2. 选择 “联络点”。

  3. Alertmanager 下拉列表中,选择要为其创建消息模板的警报管理器实例。默认为 Grafana 警报管理器。

  4. 选择 “添加模板”。

  5. 添加描述性名称

  6. 为模板添加内容,例如:

    {{ define "mymessage" }} {{ range .Alerts }} [{{ .Status }}] {{ range .Labels }} {{ .Name }}={{.Value }}{{end}} {{ end }} {{ end }}

    内容部分中的define标签指定模板名称。此标签是可选的,如果省略,则模板名称将派生自 “名称” 字段。当两者都指定时,最佳做法是使它们保持不变。

  7. 选择保存模板

注意

警报消息模板中的 HTML 呈现为文本,控制字符已转义。Grafana 不支持在生成的通知中呈现 HTML。

编辑消息模板
  1. 在 “警报” 页面中,选择联系人以打开联系人列表。

  2. 在 “模板” 表格中,找到要编辑的模板,然后选择 “编辑” 图标(钢笔)。

  3. 进行更改,然后选择保存模板

删除消息模板
  1. 在 “警报” 页面中,选择联系人以打开联系人列表。

  2. 在 “模板” 表格中,找到要移除的模板,然后选择 “删除” 图标(垃圾桶)。

  3. 选择 “是,删除” 以删除模板。

嵌套模板

您可以将模板嵌入到其他模板中。

例如,您可以使用define关键字定义模板片段:

{{ define "mytemplate" }} {{ len .Alerts.Firing }} firing. {{ len .Alerts.Resolved }} resolved. {{ end }}

然后,您可以使用template关键字将自定义模板嵌入到此片段中。例如:

Alert summary: {{ template "mytemplate" . }}

您可以使用以下内置模板选项来嵌入自定义模板。

名称 注意

default.title

显示高级状态信息。

default.message

提供触发警报和已解决警报的格式化摘要。

自定义模板示例

以下是如何使用自定义模板的示例。

呈现单个警报的模板:

{{ define "myalert" }} [{{.Status}}] {{ .Labels.alertname }} Labels: {{ range .Labels.SortedPairs }} {{ .Name }}: {{ .Value }} {{ end }} {{ if gt (len .Annotations) 0 }} Annotations: {{ range .Annotations.SortedPairs }} {{ .Name }}: {{ .Value }} {{ end }} {{ end }} {{ if gt (len .SilenceURL ) 0 }} Silence alert: {{ .SilenceURL }} {{ end }} {{ if gt (len .DashboardURL ) 0 }} Go to dashboard: {{ .DashboardURL }} {{ end }} {{ end }}

呈现整条通知消息的模板:

{{ define "mymessage" }} {{ if gt (len .Alerts.Firing) 0 }} {{ len .Alerts.Firing }} firing: {{ range .Alerts.Firing }} {{ template "myalert" .}} {{ end }} {{ end }} {{ if gt (len .Alerts.Resolved) 0 }} {{ len .Alerts.Resolved }} resolved: {{ range .Alerts.Resolved }} {{ template "myalert" .}} {{ end }} {{ end }} {{ end }}

模板数据

以下数据将传递到消息模板。

名称 Type 注意

Receiver

字符串

要向其发送通知的联系点的名称。

Status

字符串

如果至少有一个警报正在触发,则触发,否则已解决。

Alerts

提醒

此通知中包含的警报对象列表(见下文)。

GroupLabels

KeyValue

这些警报按标签进行分组。

CommonLabels

KeyValue

此通知中包含的所有警报的通用标签。

CommonAnnotations

KeyValue

此通知中包含的所有警报的通用注释。

ExternalURL

字符串

返回发送通知的 Grafana 的链接。如果使用外部警报管理器,请返回指向此警报管理器的链接。

Alerts类型公开了两个用于筛选返回的警报的函数。

  • Alerts.Firing— 返回触发警报列表。

  • Alerts.Resolved— 返回已解决警报的列表。

警报(类型)

警报类型包含以下数据。

名称 Type 注意

Status

字符串

firingresolved

标签

KeyValue

附在警报上的一组标签。

注释

KeyValue

附在警报上的一组注释。

StartsAt

time.time

警报开始触发的时间。

EndsAt

time.time

仅在已知警报结束时间时才进行设置。否则,设置为自上次收到警报以来可配置的超时时间。

生成器网址

字符串

指向 Grafana 或外部警报管理器的反向链接。

silenceURL

字符串

链接到 grafana silence,其中预先填充了此警报的标签。仅适用于 Grafana 托管的警报。

仪表板网址

字符串

如果警报规则属于一个,则链接到 grafana 仪表板。仅适用于 Grafana 托管的警报。

面板网址

字符串

如果警报规则属于 grafana 仪表板面板,则链接到。仅适用于 Grafana 托管的警报。

指纹

字符串

可用于识别警报的指纹。

ValueString

字符串

包含警报中每个简化表达式的标签和值的字符串。

KeyValue 键入

KeyValue类型是一组表示标签和注释的键/值字符串对。

除了可以直接访问存储为 a 的数据外KeyValue,还有对数据进行排序、删除和转换的方法。

名称 参数 返回值 注意

SortedPairs

键和值字符串对的排序列表

删除

[] 字符串

KeyValue

返回不包含给定键的键/值映射的副本。

名称

[] 字符串

标签名称列表

[] 字符串

标签值列表

模板函数

使用模板函数,您可以处理标签和注释以生成动态通知。以下功能可用。

名称 参数类型 返回类型 描述

humanize

数字或字符串

字符串

使用指标前缀将数字转换为更具可读性的格式。

humanize1024

数字或字符串

字符串

就像 Humanize 一样,但使用 1024 而不是 1000 作为基础。

humanizeDuration

数字或字符串

字符串

将以秒为单位的持续时间转换为更具可读性的格式。

humanizePercentage

数字或字符串

字符串

将比率值转换为 100 的分数。

humanizeTimestamp

数字或字符串

字符串

将 Unix 时间戳以秒为单位转换为更具可读性的格式。

title

字符串

字符串

Strings.title,将每个单词的第一个字符大写。

toUpper

字符串

字符串

字符串。 ToUpper,将所有字符转换为大写。

toLower

字符串

字符串

字符串。 ToLower,将所有字符转换为小写。

match

图案、文本

布尔值

regexp。 MatchString 测试未锚定的 regexp 匹配项。

reReplaceAll

图案、替换、文本

字符串

Regexp。 ReplaceAllString 正则表达式替换,未锚定。

graphLink

字符串-带exprdatasource字段的 JSON 对象

字符串

返回给定表达式和数据源的 Explore 中图形视图的路径。

tableLink

字符串-带exprdatasource字段的 JSON 对象

字符串

返回给定表达式和数据源的 Explore 中表格视图的路径。

args

[] 接口 {}

地图 [字符串] 接口 {}

将对象列表转换为带有键的地图,例如 arg0、arg1。使用此函数将多个参数传递给模板。

externalURL

一点也不

字符串

返回一个表示外部 URL 的字符串。

pathPrefix

一点也不

字符串

返回外部 URL 的路径。

下表显示了使用每个函数的示例。

函数 TemplateString 输入 预期

人性化

{人性化 $value}

1234567.0

1.235M

人性化1024

{人性化 1024 $value}

1048576.0

1Mi

人性化持续时间

{HumanizeDuration $value}

899.99

14m 59s

人性化百分比

{人性化百分比 $值}

0.1234567

12.35%

人性化时间戳

{HumanizetimeStamp $value}

1435065584.128

2015-06-23 13:19:44.128 +0000 UTC

title

{$value | 标题}

aa bB cc

啊 Bb Cc

toUpper

{$value | toupper}

aa bB cc

AA BB CC

toLower

{$value | toLower}

aa bB cc

aa bb cc

match

{匹配 “a+” $labels.instance}

aa

true

reReplaceAll

{{ reReplaceAll “localhost :( .*)” “我的.domain:$1" $labels.instance}}

本地主机:3000

我的.domain:3000

GraphL

{{GraphLink “{\ “expr\”:\ “up\”,\ “datasource\”:\ “gdev-prometheus\"}”}}

/探索? left= [“now-1h”、“now”、“gdev-prometheus”、{“datasource”: “gdev-prometheus”、“expr”: “up”、“instant”: false、“range”: true}]

TableLink

{{TableLink “{\" expr\”:\ “up\”,\ “datasource\”:\ “gdev-prometheus\"}”}}

/探索? left= [“now-1h”、“now”、“gdev-prometheus”、{“datasource”: “gdev-prometheus”、“expr”: “up”、“instant”: true、“range”: false}]

args

{{定义 “x”}} {{.arg0}} {{.arg1}} {{end}} {{模板 “x” (args 1 “2")}}}

1 2

外部网址

{externalURL}

http://localhost/path/prefix

路径前缀

{路径前缀}

/路径/前缀