托管 Prometheus 支持自定义消息通知模板,您可以在通知消息模版中定义告警通知的结构和字段信息。本文介绍如何创建消息通知模板。
当告警规则匹配的事件被触发后,托管 Prometheus 会通过邮件、飞书、钉钉、电话、Webhook 等方式发送告警通知。系统已为各种通知方式预置了消息模板,但如果预置的通知消息模板不能满足需求,您可以自定义通知消息模板。
通知消息模板使用 Markdown 语法 和 Go Template 语法 来撰写和渲染消息通知。配置自定义消息模板前,您需要首先了解 Go Template 中的常用语法。
说明
本文中提及的托管 Prometheus 告警事件变量参数和返回示例,请参见 变量结构和参数。
一个主账号及其子账号最多可创建 100 个通知消息模板。
.
字符.
字符用于在当前作用域下,渲染指定的对象。
示例 1:取顶级作用域下的所有内容,即告警信息中的全部内容。
{{ . }}
预期返回结果:输出告警信息的全部内容。
示例 2:获取告警信息中的Region
字段。
{{ .Region }}
预期返回结果如下:
cn-beijing
变量用于保存传入的数据,数据传入变量后,整个模板都能通过变量访问该数据。例如,在{ {$alert := .Alerts}}
中使用$alert
作为变量,保存告警信息中的全部内容,然后可以使用{{$alert}}
访问变量。
示例:将告警规则名称保存在$alertrulename
,然后输出$alertrulename
。
{{ $alertrulename := .AlertingRuleName }} {{$alertrulename}}
预期返回结果:
CPU 利用率大于 80%
判断语句if/else
使用if
检查数据,如果不满足条件,则执行else
的内容。当if
语句的判断条件为 空值、0、nil、空字符串 或 长度为 0 的字符串 时,都返回false
。
示例:如果告警信息中的.Level
值为P0
,则输出P0 告警
。
{{if eq "P0" .Level }} P0 告警 {{ end }}
预期返回结果:
P0 告警
比较函数用于比较 2 个数据的大小,常与判断语句if/else
搭配使用,用于对语句执行情况进行判断。常用的比较函数如下表所示。
函数名 | 说明 |
---|---|
| 等于 |
| 不等于 |
| 小于 |
| 小于等于 |
| 大于 |
| 大于等于 |
示例:如果.Level
值等于P0
,则输出P0 告警
。
{{if eq "P0" .Level }} P0 告警 {{ end }}
预期返回结果:
P0 告警
逻辑函数主要包括and
、or
和not
,用于在多个条件中取 非、与 和 或 逻辑。
示例:如果Region
的值为cn-beijing
,并且Level
的值为P0
,则输出北京 P0 告警
。
{{if eq "cn-beijing" .Region and eq "P0" .Level }} 北京 PO 告警 {{ end }}
返回结果:
北京 PO 告警
Go Template 中的常用内置函数,如下表所示。
函数名称 | 说明 | 示例 |
---|---|---|
len | 获取数组长度 | 获取 Alerts 数组长度。
预期结果如下:
|
登录 VMP 服务控制台。
在顶部导航栏,选择目标地域。
单击左侧导航栏的 告警中心 > 通知消息模板,单击 创建消息模板。
选择 告警通知 或 告警恢复通知 页签,分别配置消息模板的参数。
配置项 | 说明 |
---|---|
模版类型 | 选择消息通知模板的类型,支持 飞书机器人、飞书应用机器人、钉钉机器人 和 企业微信机器人。 |
模板名称 | 配置消息通知模板的名称。同一地域内不允许重名。 |
模板描述 | 配置消息通知模板的描述信息,长度限制为 128 个字符。 |
模板配置 | 根据 Markdown 语法和 Go Template 语法,配置 告警通知 和 告警恢复通知 的通知模板。包括消息的标题和内容。
|
(可选)单击 重置,恢复模板内容到默认。
单击 确认,完成配置。
自定义飞书消息通知模板创建完成后,您可以在告警通知策略中引用该模板,详情请参见 创建告警通知策略。
在消息通知模版的控制台中,为您预置了飞书消息通知的模板示例,该模板由 标题 和 内容 组成。本小节以预置 告警通知 模板为例,介绍模板示例的参数和含义。
模板示例的标题如下:
火山 {{ .Region }} 正在发生告警
模板示例的标题中,使用Region
字段获取了发生告警的地域信息,并填充到告警标题中。
模板示例的内容,由 告警概述 和 故障资源详情 组成。
告警概述:由以下代码实现,展示了告警规则(包含链接)、告警级别、告警条件和持续时间。
**🔴告警规则**: [{{ .AlertingRuleName }}]({{ .AlertingRuleDetailURL }}) **🚨告警级别**: {{ .Level }} **🚦告警条件**: {{ .PromQL }} {{ .Comparator }} {{ .Threshold }} [ 持续 {{ .For }} ]
说明
在 Markdown 语法中:
**
,表示该语句使用加粗格式。[]()
表示链接,其中[]
中填写链接的名称,()
中填写链接的 URL 地址。故障资源详情:由以下代码实现,分别展示了每个故障资源的告警详情。
{{- $alertCount := len .Alerts }} {{- $maxAlerts := 10 }} **故障资源详情 ({{ $alertCount }} 个)**: {{- range $idx, $alert := .Alerts }} {{- if lt $idx 10 }} {{- $labels := "" -}} {{- range $k, $v := $alert.Labels }} {{- $labels = print $labels $k "=" "\"**" $v "**\"" " " -}} {{- end }} [{{ $alert.Id }}]({{ $alert.DetailURL }}){{ "{" }} {{ $labels }}{{ "}" }} 当前值: {{ $alert.Value }} 开始时间: {{ $alert.StartsAt.Format "2006-01-02 15:04:05" }} {{- end }} {{- end }} --- {{- if gt $alertCount $maxAlerts }} **资源数量已超过 {{ $maxAlerts }} 个,完整告警请跳转控制台** {{- end }}
模板内容 | 说明 |
---|---|
| 分别定义了
|
| 当故障资源数小于 说明 故障资源详情由 |
| 当故障资源数大于 |
使用自定义模板时,实际生效效果如下图所示。