You need to enable JavaScript to run this app.
导航

飞书消息通知模板

最近更新时间2024.02.19 10:25:59

首次发布时间2024.02.02 17:21:37

托管 Prometheus 支持自定义飞书消息通知模板。本文介绍如何创建飞书消息通知模板。

背景信息

当告警规则匹配的事件被触发后,托管 Prometheus 会通过邮件、飞书、钉钉、电话、Webhook 等方式发送告警通知。系统已为各种通知方式预置了消息模板,但如果预置的飞书模板不能满足需求,您可以手工自定义飞书消息通知模板。

飞书消息通知模板使用 Markdown 语法Go Template 语法 来撰写和渲染消息通知。配置自定义消息模板前,您需要首先了解 Go Template 中的常用语法。

说明

本文中提及的托管 Prometheus 告警事件变量参数和返回示例,请参见 变量结构和参数

Go Template 常用语法

.字符

.字符用于在当前作用域下,渲染指定的对象。

示例 1:取顶级作用域下的所有内容,即告警信息中的全部内容。

{{ . }}

预期返回结果:输出告警信息的全部内容。

示例 2:获取告警信息中的Region字段。

{{ .Region }}

预期返回结果如下:

cn-beijing

变量

变量用于保存传入的数据,数据传入变量后,整个模板都能通过变量访问该数据。例如,在{ {$alert := .Alerts}}中使用$alert作为变量,保存告警信息中的全部内容,然后可以使用{{$alert}}访问变量。

示例:将告警规则名称保存在$alertrulename,然后输出$alertrulename

{{ $alertrulename := .AlertingRuleName }} {{$alertrulename}}

预期返回结果:

CPU 利用率大于 80%

判断语句

判断语句if/else使用if检查数据,如果不满足条件,则执行else的内容。当if语句的判断条件为 空值0nil空字符串长度为 0 的字符串 时,都返回false

示例:如果告警信息中的.Level值为P0,则输出P0 告警

{{if eq "P0" .Level }} P0 告警 {{ end }}

预期返回结果:

P0 告警

比较函数

比较函数用于比较 2 个数据的大小,常与判断语句if/else搭配使用,用于对语句执行情况进行判断。常用的比较函数如下表所示。

函数名说明
eq等于
ne不等于
lt小于
le小于等于
gt大于
ge大于等于

示例:如果.Level值等于P0,则输出P0 告警

{{if eq "P0" .Level }} P0 告警 {{ end }}

预期返回结果:

P0 告警

逻辑函数

逻辑函数主要包括andornot,用于在多个条件中取 逻辑。

示例:如果Region的值为cn-beijing,并且Level的值为P0,则输出北京 P0 告警

{{if eq "cn-beijing" .Region and eq "P0" .Level }} 北京 PO 告警 {{ end }}

返回结果:

北京 PO 告警

常用内置函数

Go Template 中的常用内置函数,如下表所示。

函数名称说明示例

len

获取数组长度

获取 Alerts 数组长度。

{{ len .Alerts }}

预期结果如下:

9

使用限制

  • 不支持配置消息通知中的标题背景颜色,由系统自动设定(告警中为红色,解除为绿色)。
  • 不支持配置消息通知中的按钮,固定为 查看详情,用于跳转到告警事件列表。
  • 消息通知的标题和内容长度限制为 16k 字节数(utf-8 编码),超过此限制将导致告警信息被截断。

创建消息通知模板

  1. 登录 VMP 服务控制台
  2. 在顶部导航栏,选择目标地域。
  3. 单击左侧导航栏的 告警中心 > 通知消息模板,单击 创建消息模板
    alt
  4. 选择 告警通知告警恢复通知 页签,分别配置消息模板的参数。
    alt
    配置项说明
    模版类型选择消息通知模板的类型,目前仅支持 飞书机器人
    模板名称配置消息通知模板的名称。同一地域内不允许重名。
    模板描述配置消息通知模板的描述信息,长度限制为 128 个字符。

    模板配置

    根据 Markdown 语法和 Go Template 语法,分别配置 告警通知告警恢复通知 的通知模板。包括消息的标题和内容。预置模板的详细解释,请参见 模板示例说明

    • 标题:配置告警通知的标题,支持任意 utf-8 字符,取值小于 512 个字符。
    • 内容:配置告警通知的内容,支持任意 utf-8 字符,取值小于 8192 个字符。
  5. (可选)单击 重置,恢复模板内容到默认。
  6. 单击 确认,完成配置。

管理消息通知模板

飞书消息通知模板创建完成后,您可以在模板列表中查看模板。包括:模板的名称、类型、描述、创建时间等。
alt

飞书消息通知模支持如下管理操作:

  • 单击 操作 栏中的 编辑,可以编辑模板内容。
  • 单击 操作 栏中的 删除,可以删除该模板。
  • 单击模板名称,可以查看该模板的 基本信息已关联的通知策略

alt

注意

消息通知模板被告警通知策略关联后,仍可以直接删除模板。模板被删除后,告警通知策略会使用系统默认的通知模版发送告警通知。

后续操作

自定义飞书消息通知模板创建完成后,您可以在告警通知策略中引用该模板,详情请参见 创建告警通知策略

模板示例说明

在消息通知模版的控制台中,为您预置了飞书消息通知的模板示例,该模板由 标题内容 组成。本小节以预置 告警通知 模板为例,介绍模板示例的参数和含义。

标题说明

模板示例的标题如下:

火山 {{ .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 }}
    
    模板内容说明
    {{- $alertCount := len .Alerts }}
    {{- $maxAlerts := 10 }}

    分别定义了$alertCount$maxAlerts变量:

    • $alertCount:使用len函数,获取告警信息中的故障资源数量。
    • $maxAlerts:定义了最大展示的资源数量,默认为 10,即最多展示 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 }}

    当故障资源数小于$maxAlerts定义的值(默认为 10)时,使用递归的方式展示所有故障资源的详情。

    说明

    故障资源详情由.Alerts.Labels字段获取。参数含义和数据结构请参见 变量结构和参数,不同资源的 Labels 可能不同。

    {{- if gt $alertCount $maxAlerts }}
    **资源数量已超过 {{ $maxAlerts }} 个,完整告警请跳转控制台**
    {{- end }}

    当故障资源数大于$maxAlerts定义的值(默认为 10)时,不展示具体的资源信息,提示跳转至控制台查看。

消息示例

使用自定义模板时,实际生效效果如下图所示。
alt