首页 / 项目管理 / 通知 / 通知模板

通知模板

通知模板是一个由自定义内容、内容变量和内容格式参数组成的标准化的结构体。用于为通知策略,标准化定制告警通知消息的内容及格式。

项目管理员或运维人员通过设置通知模板,可基于不同的告警通知方式自定义通知消息的内容及格式,帮助用户快速获取关键的告警信息,提升运维效率。

平台支持多种通知服务器,请首先参考 通知服务器 文档添加服务器,添加后,对应的通知类型的模版将会展示,若未配置通知服务器,默认不展示对应的通知模板。

创建通知模板

基于实际的监控告警运维场景,提供了丰富的用于设置通知消息的内容的变量。创建通知模板时,可基于实际的监控告警运维场景,增减内容变量并设置消息内容的格式。一个通知模板可被一个或多个相同通知类型的通知策略使用,所有使用该模板的通知策略,可基于模板标准化输出发送给通知对象的通知消息。

操作步骤

  1. 项目管理 视图,单击 项目名称

  2. 在左侧导航栏中,单击 通知

  3. 切换至 通知模板 标签页。

  4. 单击 创建通知模板

  5. 基本信息 区域,配置以下参数。

    参数 说明
    消息类型 根据通知的用途选择消息的类型。
    告警消息:结合项目的告警功能,发送由告警规则触发的告警消息;
    组件异常消息:组件异常消息提醒,发送由某些组件异常触发的通知信息。
  6. 模板配置 区域,参考不同类型的模板说明配置变量、内容格式相关参数。

    提示

    • 模板的内容仅能由平台支持的变量、变量显示名称、特殊格式标记语言组成。在符合语法规范的前提下,可自由组合变量及其他组成要素。

    • 模板中仅能使用平台支持的变量,可修改变量的显示名称、内容格式,但不可修改变量本身,参考 变量 特殊格式标记语言

    • 平台基于实际运维场景,提供了针对不同通知类型的默认通知模板内容,能够满足大部分通知消息设置需求。如无特殊需求,您可直接使用默认的模板内容。

    本文以邮箱通知模板为例进行说明。

    • 通知主题:邮件主题。也可使用平台预置的默认主题,如需修改,仅替换变量 {{}}(变量) 或修改变量之外的文本内容即可。

      预置主题为:【{{.externalLabels.status}}】PAAS 平台告警:{{.externalLabels.object}}的{{.externalLabels.summary}}

      显示效果:【告警中】PAAS 平台告警:节点192.168.16.53的节点的CPU使用率超过80%

    • 通知内容:邮件通知的内容,默认显示预置的 HTML 格式通知模板内容,您可根据自己的需要增减变量或设置格式标签,模板内容支持 HTML 格式和文本格式,且支持填写中/英文文本。

      提示

      • 输入框右侧默认展开当前格式内容的编写说明区域框,编写过程中,可参考右侧的说明信息或 特殊格式标记语言 编写内容。单击编写说明区域框底部的 收起帮助信息 按钮,可收起编写说明区域框;单击 可再次展开编写说明区域框。

      • 单击输入框下方的 预览通知 按钮,可在弹出的对话框中,预览基于当前设置的邮件主题、通知内容生成的通知消息的展示效果。

      • 单击 样例 右侧的 查看 按钮,可在弹出的对话框中,查看示例内容;单击 图标,在弹出的确认提示框中单击 替换 按钮后,可将输入框中当前内容快速替换为示例内容。

  7. 单击 创建

如何引用变量?

变量是通知消息(NotificationMessage)的标签(labels)或注释(annotations)的键,格式如 {{.标签键}}。通常为了方便用户快速获取关键信息,可为变量自定义显示名称,例如:告警等级:{{ .externalLabels.severity }}

提示:在模板配置的邮箱、Webhook 和短信参数中,平台默认支持使用基础变量,若基础变量无法满足您的通知需求,平台还支持在 Webhook 的内容中,使用 更多 webhook 高级变量(Alpha) ,您可以根据平台提供的更多参数,自定义通知模板,请联系管理员开启相关功能。

基础变量

当通知策略基于通知模板向用户发送通知消息时,模板中的变量会引用通知消息中相应标签的值(实际的监控数据)。最终将监控数据以标准化的内容形式发送给用户。

平台默认支持的基础变量如下:

显示名称 变量 说明
告警状态 {{ .externalLabels.status }} 例如:告警中。更多告警状态请参考 状态说明
告警等级 {{ .externalLabels.severity }} 例如:严重。更多告警等级请参考 创建告警策略
告警集群 {{ .labels.alert_cluster }} 发生告警的资源所在集群,例如:集群 1。
告警对象 {{ .externalLabels.object }} 发生告警的资源的类型及名称,例如:节点192.168.16.53。
策略名称 {{ .labels.alert_resource }} 告警策略的名称。例如:cpaas-node-rules。
告警描述 {{ .externalLabels.summary }} 告警策略的描述信息。
触发数值 {{ .externalLabels.currentValue }} 触发告警的监控数值。
告警时间 {{ dateFormatWithZone .startsAt “2006-01-02 15:04:05” “Asia/Chongqing” }} 告警的开始时间。
恢复时间 {{ dateFormatWithZone .endsAt “2006-01-02 15:04:05” “Asia/Chongqing” }} 告警的结束时间。
指标名称 {{ .labels.alert_indicator }} 监控指标的名称。

更多 webhook 高级变量(Alpha)

若基础变量无法满足通知模板要求,您可以联系管理员开启相关功能以使用更多高级变量。

提示:平台支持企业微信群机器人、钉钉群机器人、飞书群机器人、或者 WebHook 消息类型,开启本功能后,企业微信群机器人、钉钉群机器人、飞书群机器人内容的模板不变,仍需引用基础变量,您可参考界面示例进行修改。webhook 类型则需按照以下步骤改写模板以支持更多变量:

若您在模板配置的通知内容中填写{},那么将返回如下系统默认返回的通知消息代码;您也可以编写自定义模板,引用其中消息代码中相应的键,当通知策略基于通知模板向用户发送通知消息时,模板中的变量会引用通知消息中相应标签的值(实际的监控数据),最终将监控数据以标准化的内容形式发送给用户。

通知消息代码示例

# 以下为alertmanager告警触发之后返回的原生消息,您可以根据需要使用 golang template 语法引用变量,语法参考https://pkg.go.dev/text/template
# annotations主要包括告警规则触发时的当前值,告警规则关联的通知,告警规则显示名称,告警规则自带的summary
annotations:
  alert_current_value: '1'
  alert_notifications: '["ait-test"]'
  display_name: deployment_ready
  summary: 命名空间cpaas-system有状态middleware-exporter服务运行状态异常
# labels主要包括告警规则上固定的labels,和查询表达式查来出其他labels
labels:
  alert_cluster: global # 发生告警的资源所在集群,例如:集群 1。
  alert_indicator: custom # 监控指标的名称。
  alert_indicator_aggregate_range: '0' # 采集监控指标数据的持续时间
  alert_indicator_comparison: '!=' # 告警触发条件中的比较运算符。
  alert_indicator_threshold: '2' # 告警触发条件中的告警阈值。
  alert_involved_object_kind: Cluster # 发生告警的资源的类型。
  alert_involved_object_name: global # 发生告警的资源的名称。
  alert_kind: resource # 告警策略的名称。例如:cpaas-node-rules。
  alert_name: custom-d5u2l # 发生告警的告警规则的名称。
  alert_namespace: cpaas-system # 告警策略所在的命名空间
  alert_project: cpaas-system # 告警策略所在的项目
  alert_resource: alauda-rules # # 告警策略名称
  alert_source: Platform # 告警源,来自于平台或用户
  alertgroup: general 
  alertname: custom-d5u2l-388642e14b069a7d662f4752981a441a
  deployment: middleware-exporter
  display_name: deployment_ready
  namespace: cpaas-system
  severity: Medium
# 告警的开始和结束时间
startsAt: '2023-08-09T06:29:18.113184463Z'
endsAt: '0001-01-01T00:00:00Z'
# 告警状态,包括告警中和已解决两种状态
status: firing
# 告警的指纹和url信息
fingerprint: c33ac30fed829472
generatorURL: http://prometheus.server:9090/graph?g0.expr=up%7Binstance%3D~%2210%7C80%7C192.%2A%22%7D+%3D%3D+0&g0.tab=1
# 平台提供的更多告警信息字段,您也可以引用以下字段聚合出更多种告警信息
externalLabels:
  status: "告警中"                          # 告警状态
  severity: "严重"                          # 告警等级
  object: "集群global"                      # 告警对象
  comparison: "不等于"                      # 告警规则的比较符号
  threshold: "2.00"                         # 告警规则的阈值,一般会保留两位小数
  currentValue: "1.00"                      # 触发告警的指标的当前值
  summary: "命名空间cpaas-system有状态middleware-exporter服务运行状态异常"  # 告警消息的summary,如果告警规则设置了summary的annotation,就直接从annotation中读取,否则从indicator的summary中读取
 
externalNotifications:                      # 告警规则关联的通知策略的信息
- name: nf1                                 # 通知策略的名字
  users:                                    # 通知策略包含的用户
    - apiVersion: auth.alauda.io/v1
      kind: User
      metadata:
        annotations:
          auth.cpaas.io/connector.data: '{"groups":[]}'
          cpaas.io/display-name: admin
        labels:
          auth.cpaas.io/user.connector_id: local
          auth.cpaas.io/user.connector_type: local
          auth.cpaas.io/user.email: 8afe307d054f1e96ce2e3d10aa374162
          auth.cpaas.io/user.state: active
          auth.cpaas.io/user.username: ""
          auth.cpaas.io/user.valid: "true"
        name: 8afe307d054f1e96ce2e3d10aa374162
      spec:
        connector_name: local
        connector_type: local
        email: admin@cpaas.io
        is_admin: true
        last_login_time: "2023-08-15T23:35:23Z"
        state: active
        username: admin                         # 用户名
        valid: true
        mail: admin@cpaas.io                    # 邮件地址
        mobile: 13312348888                     # 手机号,可以为空
        webhookType: "Webhook"                  # 类型,Webhook/WeChat/DingTalk
        webhookUrl: https://callback.tk         # 地址
  groups:                                     # 通知策略包含的联系组
    - apiVersion: ait.alauda.io/v1beta1
      kind: NotificationGroup
      metadata:
        annotations:
          cpaas.io/creator: admin
          cpaas.io/description: ""
          cpaas.io/operator: admin@cpaas.io
          cpaas.io/updated-at: "2023-08-15T02:57:22Z"
        labels:
          cpaas.io/source: Platform
        name: vx
        namespace: cpaas-system
      spec:
        mail: "ait@alauda.io"                       # 联系组的邮箱地址
        webhookType: WeChat                         # 联系组的Webhook类型和地址
        webhookUrl: https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=c55f6376-1ed9-485e-8273-4d75449bca7f
        users:
          - 8afe307d054f1e96ce2e3d10aa374162
      users:
        - apiVersion: auth.alauda.io/v1
          kind: User
          metadata:
            annotations:
              auth.cpaas.io/connector.data: '{"groups":[]}'
              cpaas.io/display-name: admin
            labels:
              auth.cpaas.io/user.connector_id: local
              auth.cpaas.io/user.connector_type: local
              auth.cpaas.io/user.email: 8afe307d054f1e96ce2e3d10aa374162
              auth.cpaas.io/user.state: active
              auth.cpaas.io/user.username: ""
              auth.cpaas.io/user.valid: "true"
            name: 8afe307d054f1e96ce2e3d10aa374162
          spec:
            connector_name: local
            connector_type: local
            email: admin@cpaas.io
            is_admin: true
            last_login_time: "2023-08-15T23:35:23Z"
            state: active
            username: admin                         # 用户名
            valid: true
            mail: admin@cpaas.io                    # 邮件地址
            mobile: 13312348888                     # 手机号,可以为空
            webhookType: "Webhook"                  # 类型,Webhook/WeChat/DingTalk
            webhookUrl: https://callback.tk         # 地址

消息提取为变量

您可以根据系统返回的消息代码进行提取并引用为变量,按照您的需求自定义通知模板。模板使用 golang template 语法编写,更多请参考 官方文档

提示:除了支持 golang template 的所有语法之外,平台还内置以下自定义函数,您可以根据这些自定义函数进行扩展,以简化模板的书写:

// dateFormat: 将一个字符串的日期,按照给定的layout进行转换
"dateFormat": func(date, layout string) string
// dateFormatWithZone: 将一个字符串的日期,按照给定的layout和时区进行转换
"dateFormatWithZone": func(date, layout, zone string)
// float: 将一个字符串的数字,转成float64的数字
"float": func(s string) float64
// MarshalIndent:将特定的struct转成json,可以指定前缀和缩进
"MarshalIndent": func(i interface{}, prefix string, indent string) string
// ToString: 将一个字符串变量转成合法的json字符串,会处理双引号转义问题,并会在字符串前后加上一对双引号
"ToString": func(s string) string

使用自定义变量及函数的模板示例如下:

提示:在通知模板中,若使用高级变量,则需使用 JSON 格式传入。

{
  "status": {{ ToString .externalLabels.status }},
  "serverity": {{ ToString .externalLabels.severity }},
  "cluster": {{  ToString .labels.alert_cluster }},
  "object": {{  ToString .externalLabels.object }},
  "resource": {{  ToString .labels.alert_resource }},
  "summary": {{  ToString .externalLabels.summary }},
  "currentValue": {{  ToString .externalLabels.currentValue }},
  "startsAt": "{{ dateFormatWithZone .startsAt "2006-01-02 15:04:05" "Asia/Chongqing" }}",
  "labels": {{ MarshalIndent .labels "  " "  "}},
  "notifications": {{ MarshalIndent .externalNotifications "  " "  "}}
}

使用上述模板示例后,平台渲染的 JSON 如下:

{
  "status": "告警中",
  "serverity": "严重",
  "cluster": "global",
  "object": "集群/global",
  "resource": "alauda-rules",
  "summary": "命名空间cpaas-system有状态middleware-exporter服务运行状态异常",
  "currentValue": "1.00",
  "startsAt:"2023-08-09 06:29:18",
  "labels": {
    "alert_cluster": "global",
    "alert_indicator": "custom",
    "alert_indicator_aggregate_range": "0",
    "alert_indicator_comparison": "!=",
    "alert_indicator_threshold": "2",
    "alert_involved_object_kind": "Cluster",
    "alert_involved_object_name": "global",
    "alert_kind": "resource",
    "alert_name": "custom-d5u2l",
    "alert_namespace": "cpaas-system",
    "alert_project": "cpaas-system",
    "alert_resource": "alauda-rules",
    "alert_source": "Platform",
    "alertgroup": "general",
    "alertname": "custom-d5u2l-388642e14b069a7d662f4752981a441a",
    "deployment": "middleware-exporter",
    "display_name": "deployment_ready",
    "namespace": "cpaas-system",
    "severity": "Medium"
  },
  "notifications": [
    {
      "name": "nf1",
      "users": [
        {
          "apiVersion": "auth.alauda.io/v1",
          "kind": "User",
          "metadata": {
            "annotations": {
              "auth.cpaas.io/connector.data": "{\"groups\":[]}",
              "cpaas.io/display-name": "admin"
            },
            "labels": {
              "auth.cpaas.io/user.connector_id": "local",
              "auth.cpaas.io/user.connector_type": "local",
              "auth.cpaas.io/user.email": "8afe307d054f1e96ce2e3d10aa374162",
              "auth.cpaas.io/user.state": "active",
              "auth.cpaas.io/user.username": "",
              "auth.cpaas.io/user.valid": "true"
            },
            "name": "8afe307d054f1e96ce2e3d10aa374162"
          },
          "spec": {
            "connector_name": "local",
            "connector_type": "local",
            "email": "admin@cpaas.io",
            "is_admin": true,
            "last_login_time": "2023-08-15T23:35:23Z",
            "state": "active",
            "username": "admin",
            "valid": true,
            "mail": "admin@cpaas.io",
            "mobile": 13312348888,
            "webhookType": "Webhook",
            "webhookUrl": "https://callback.tk"
          }
        }
      ],
      "groups": [
        {
          "apiVersion": "ait.alauda.io/v1beta1",
          "kind": "NotificationGroup",
          "metadata": {
            "annotations": {
              "cpaas.io/creator": "admin",
              "cpaas.io/description": "",
              "cpaas.io/operator": "admin@cpaas.io",
              "cpaas.io/updated-at": "2023-08-15T02:57:22Z"
            },
            "labels": {
              "cpaas.io/source": "Platform"
            },
            "name": "vx",
            "namespace": "cpaas-system"
          },
          "spec": {
            "mail": "ait@alauda.io",
            "webhookType": "WeChat",
            "webhookUrl": "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=c55f6376-1ed9-485e-8273-4d75449bca7f",
            "users": [
              "8afe307d054f1e96ce2e3d10aa374162"
            ]
          },
          "users": [
            {
              "apiVersion": "auth.alauda.io/v1",
              "kind": "User",
              "metadata": {
                "annotations": {
                  "auth.cpaas.io/connector.data": "{\"groups\":[]}",
                  "cpaas.io/display-name": "admin"
                },
                "labels": {
                  "auth.cpaas.io/user.connector_id": "local",
                  "auth.cpaas.io/user.connector_type": "local",
                  "auth.cpaas.io/user.email": "8afe307d054f1e96ce2e3d10aa374162",
                  "auth.cpaas.io/user.state": "active",
                  "auth.cpaas.io/user.username": "",
                  "auth.cpaas.io/user.valid": "true"
                },
                "name": "8afe307d054f1e96ce2e3d10aa374162"
              },
              "spec": {
                "connector_name": "local",
                "connector_type": "local",
                "email": "admin@cpaas.io",
                "is_admin": true,
                "last_login_time": "2023-08-15T23:35:23Z",
                "state": "active",
                "username": "admin",
                "valid": true,
                "mail": "admin@cpaas.io",
                "mobile": 13312348888,
                "webhookType": "Webhook",
                "webhookUrl": "https://callback.tk"
              }
            }
          ]
        }
      ]
    }
  ],
  # 如果Webhook无法将消息转成合法的json,我们在error里面设置上这次发送失败详细原因:
  "error": {
    "kind": "Status",
    "apiVersion": "v1",
    "metadata": {},
    "status": "Failure",
    "message": "error when creating",       # 发送消息遇到了错误详情
    "reason": "InvalidJson",                # 发送消息遇到了错误原因:RenderError/InvalidJson
    "details":
      "causes": [
        {
          "type": "Message",                # 发送的原生消息
          "message"; "<unmarshal message>"  # Json序列化之后的消息内容
        },
        {
          "type": "Template",               # 发送消息用到的模板
          "message"; "<template>" # 模板内容
        },
        {
          "type": "Result",                 # 渲染之后的结果 
          "message"; "<render result>"      # 渲染之后的内容
        },
      },
    "code": 400
   }
}

特殊格式标记语言

在邮箱通知中,常见的 HTML 格式标签及使用说明参见下表:

内容要素 标签 说明
文本 - 支持输入中/英文文本内容。
字体 <font color="#FF0000">设置字体颜色</font>
<b>字体加粗</b>
设置字体格式。
标题 <h1>一级标题</h1>,支持到 h6(六级标题)。 设置标题层级。
段落 <p>段落</p> 插入普通段落文本。
引用 <q>引用</q> 插入短引用内容。
超链接 <a href="//www.example.com">超链接</a> 插入超链接。