本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用消息模板
本文档主题专为支持 Grafana 8.x 版本的 Grafana 工作空间而设计。
有关支持 Grafana 版本 10.x 的 Grafana 工作空间,请参阅。在 Grafana 版本 10 中工作
有关支持 Grafana 9.x 版本的 Grafana 工作空间,请参阅。在 Grafana 版本 9 中工作
通过发送的通知使用联络点是使用消息模板生成的。Grafana 的默认模板基于 Go 模板系统
由于大多数联系人字段都可以模板化,因此您可以创建可重复使用的自定义模板并在多个联系点中使用它们。该模板数据主题列出了可用于模板化的变量。
使用模板
模板用于创建消息。例如,通过 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 }}
以下过程说明如何创建、编辑和删除自定义消息模板。
创建消息模板
-
在 Grafana 控制台的 Grafana 菜单中,选择警报(铃铛)图标以打开警报页面。
-
选择 “联络点”。
-
从 Alertmanager 下拉列表中,选择要为其创建消息模板的警报管理器实例。默认为 Grafana 警报管理器。
-
选择 “添加模板”。
-
添加描述性名称。
-
为模板添加内容,例如:
{{ define "mymessage" }} {{ range .Alerts }} [{{ .Status }}] {{ range .Labels }} {{ .Name }}={{.Value }}{{end}} {{ end }} {{ end }}
内容部分中的
define
标签指定模板名称。此标签是可选的,如果省略,则模板名称将派生自 “名称” 字段。当两者都指定时,最佳做法是使它们保持不变。 -
选择保存模板。
注意
警报消息模板中的 HTML 呈现为文本,控制字符已转义。Grafana 不支持在生成的通知中呈现 HTML。
编辑消息模板
-
在 “警报” 页面中,选择联系人以打开联系人列表。
-
在 “模板” 表格中,找到要编辑的模板,然后选择 “编辑” 图标(钢笔)。
-
进行更改,然后选择保存模板。
删除消息模板
-
在 “警报” 页面中,选择联系人以打开联系人列表。
-
在 “模板” 表格中,找到要移除的模板,然后选择 “删除” 图标(垃圾桶)。
-
选择 “是,删除” 以删除模板。
嵌套模板
您可以将模板嵌入到其他模板中。
例如,您可以使用define
关键字定义模板片段:
{{ define "mytemplate" }} {{ len .Alerts.Firing }} firing. {{ len .Alerts.Resolved }} resolved. {{ end }}
然后,您可以使用template
关键字将自定义模板嵌入到此片段中。例如:
Alert summary: {{ template "mytemplate" . }}
您可以使用以下内置模板选项来嵌入自定义模板。
名称 | 注意 |
---|---|
|
显示高级状态信息。 |
|
提供触发警报和已解决警报的格式化摘要。 |
自定义模板示例
以下是如何使用自定义模板的示例。
呈现单个警报的模板:
{{ 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 | 注意 |
---|---|---|
|
字符串 |
要向其发送通知的联系点的名称。 |
|
字符串 |
如果至少有一个警报正在触发,则触发,否则已解决。 |
|
提醒 |
此通知中包含的警报对象列表(见下文)。 |
|
KeyValue |
这些警报按标签进行分组。 |
|
KeyValue |
此通知中包含的所有警报的通用标签。 |
|
KeyValue |
此通知中包含的所有警报的通用注释。 |
|
字符串 |
返回发送通知的 Grafana 的链接。如果使用外部警报管理器,请返回指向此警报管理器的链接。 |
该Alerts
类型公开了两个用于筛选返回的警报的函数。
-
Alerts.Firing
— 返回触发警报列表。 -
Alerts.Resolved
— 返回已解决警报的列表。
警报(类型)
警报类型包含以下数据。
名称 | Type | 注意 |
---|---|---|
Status |
字符串 |
|
标签 |
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 一样,但使用 1024 而不是 1000 作为基础。 |
|
数字或字符串 |
字符串 |
将以秒为单位的持续时间转换为更具可读性的格式。 |
|
数字或字符串 |
字符串 |
将比率值转换为 100 的分数。 |
|
数字或字符串 |
字符串 |
将 Unix 时间戳以秒为单位转换为更具可读性的格式。 |
|
字符串 |
字符串 |
Strings.title,将每个单词的第一个字符大写。 |
|
字符串 |
字符串 |
字符串。 ToUpper,将所有字符转换为大写。 |
|
字符串 |
字符串 |
字符串。 ToLower,将所有字符转换为小写。 |
|
图案、文本 |
布尔值 |
regexp。 MatchString 测试未锚定的 regexp 匹配项。 |
|
图案、替换、文本 |
字符串 |
Regexp。 ReplaceAllString 正则表达式替换,未锚定。 |
|
字符串-带 |
字符串 |
返回给定表达式和数据源的 Explore 中图形视图的路径。 |
|
字符串-带 |
字符串 |
返回给定表达式和数据源的 Explore 中表格视图的路径。 |
|
[] 接口 {} |
地图 [字符串] 接口 {} |
将对象列表转换为带有键的地图,例如 arg0、arg1。使用此函数将多个参数传递给模板。 |
|
一点也不 |
字符串 |
返回一个表示外部 URL 的字符串。 |
|
一点也不 |
字符串 |
返回外部 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 |
|
路径前缀 |
{路径前缀} |
/路径/前缀 |