托管 Prometheus 支持自定义消息通知模板,您可以在通知消息模版中定义告警通知的结构和字段信息。本文介绍如何创建消息通知模板。
说明
新版告警中心已经发布上线,针对通知策略、通知模板、聚合策略、屏蔽策略等功能进行全面升级优化,推荐使用全新「通知模版」配置通知模板。 背景信息
当告警规则匹配的事件被触发后,托管 Prometheus 会通过邮件、飞书、钉钉、电话、Webhook 等方式发送告警通知。系统已为各种通知方式预置了消息模板,但如果预置的通知消息模板不能满足需求,您可以自定义通知消息模板。
说明
本文中提及的托管 Prometheus 告警事件变量参数和返回示例,请参见 变量结构和参数。 一个主账号及其子账号最多可创建 100 个通知消息模板。
Go Template 常用语法
.字符
.字符用于在当前作用域下,渲染指定的对象。
示例 1:取顶级作用域下的所有内容,即告警信息中的全部内容。
预期返回结果:输出告警信息的全部内容。
示例 2:获取告警信息中的Region字段。
预期返回结果如下:
变量
变量用于保存传入的数据,数据传入变量后,整个模板都能通过变量访问该数据。例如,在{ {$alert := .Alerts}}中使用$alert作为变量,保存告警信息中的全部内容,然后可以使用{{$alert}}访问变量。
示例:将告警规则名称保存在$alertrulename,然后输出$alertrulename。
{{ $alertrulename := .AlertingRuleName }} {{$alertrulename}}
预期返回结果:
判断语句
判断语句if/else使用if检查数据,如果不满足条件,则执行else的内容。当if语句的判断条件为 空值、0、nil、空字符串 或 长度为 0 的字符串 时,都返回false。
示例:如果告警信息中的.Level值为P0,则输出P0 告警。
{{if eq "P0" .Level }} P0 告警 {{ end }}
预期返回结果:
比较函数
比较函数用于比较 2 个数据的大小,常与判断语句if/else搭配使用,用于对语句执行情况进行判断。常用的比较函数如下表所示。
示例:如果.Level值等于P0,则输出P0 告警。
{{if eq "P0" .Level }} P0 告警 {{ end }}
预期返回结果:
逻辑函数
逻辑函数主要包括and、or和not,用于在多个条件中取 非、与 和 或 逻辑。
示例:如果Region的值为cn-beijing,并且Level的值为P0,则输出北京 P0 告警。
{{if eq "cn-beijing" .Region and eq "P0" .Level }} 北京 PO 告警 {{ end }}
返回结果:
常用内置函数
Go Template 中的常用内置函数,如下表所示。
使用限制
- 不支持配置消息通知中的标题背景颜色,由系统自动设定(告警中为红色,解除为绿色)。
- 不支持配置消息通知中的按钮,固定为 查看详情,用于跳转到告警事件列表。
- 消息通知的标题和内容长度限制为 16k 字节数(utf-8 编码),超过此限制将导致告警信息被截断。
操作步骤
- 单击左侧导航栏的 告警中心 > 通知消息模板,单击 创建消息模板。
-
- 选择 告警通知 或 告警恢复通知 页签,分别配置消息模板的参数。
-
后续操作
自定义飞书消息通知模板创建完成后,您可以在告警通知策略中引用该模板,详情请参见 创建告警通知策略。 模板示例说明
在消息通知模版的控制台中,为您预置了飞书消息通知的模板示例,该模板由 标题 和 内容 组成。本小节以预置 告警通知 模板为例,介绍模板示例的参数和含义。
标题说明
模板示例的标题如下:
模板示例的标题中,使用Region字段获取了发生告警的地域信息,并填充到告警标题中。
内容说明
模板示例的内容,由 告警概述 和 故障资源详情 组成。
- 告警概述:由以下代码实现,展示了告警规则(包含链接)、告警级别、告警条件和持续时间。
**🔴告警规则**: [{{ .AlertingRuleName }}]({{ .AlertingRuleDetailURL }})
**🚦告警条件**: {{ .PromQL }} {{ .Comparator }} {{ .Threshold }} [ 持续 {{ .For }} ]
说明
在 Markdown 语法中:
- 在语句前后分别添加**,表示该语句使用加粗格式。
- []()表示链接,其中[]中填写链接的名称,()中填写链接的 URL 地址。
- 故障资源详情:由以下代码实现,分别展示了每个故障资源的告警详情。
{{- $alertCount := len .Alerts }}
**Fault Resource Details ({{ $alertCount }} 个)**:
{{- range $idx, $alert := .Alerts }}
{{- range $k, $v := $alert.Labels }}
{{- $labels = print $labels $k "=" "\"**" $v "**\"" " " -}}
[{{ $alert.Id }}]({{ $alert.DetailURL }}){{ "{" }} {{ $labels }}{{ "}" }}
Current Value: {{ $alert.Value }}
Start Time: {{ $alert.StartsAt.Format "2006-01-02 15:04:05" }}
{{- if gt $alertCount $maxAlerts }}
**The number of resources exceeds {{ $maxAlerts }} ,Jump to console for full alerts**
消息示例
使用自定义模板时,实际生效效果如下图所示。