通知模板
通知模板是一个由自定义内容、内容变量和内容格式参数组成的标准化的结构体。用于为通知策略,标准化定制告警通知消息的内容及格式。
项目管理员或运维人员通过设置通知模板,可基于不同的告警通知方式自定义通知消息的内容及格式,帮助用户快速获取关键的告警信息,提升运维效率。
平台支持多种通知服务器,请首先参考 通知服务器 文档添加服务器,添加后,对应的通知类型的模版将会展示,若未配置通知服务器,默认不展示对应的通知模板。
创建通知模板
基于实际的监控告警运维场景,提供了丰富的用于设置通知消息的内容的变量。创建通知模板时,可基于实际的监控告警运维场景,增减内容变量并设置消息内容的格式。一个通知模板可被一个或多个相同通知类型的通知策略使用,所有使用该模板的通知策略,可基于模板标准化输出发送给通知对象的通知消息。
操作步骤
-
在 项目管理 视图,单击 项目名称。
-
在左侧导航栏中,单击 通知。
-
切换至 通知模板 标签页。
-
单击 创建通知模板。
-
在 基本信息 区域,配置以下参数。
参数 说明 消息类型 根据通知的用途选择消息的类型。
告警消息:结合项目的告警功能,发送由告警规则触发的告警消息;
组件异常消息:组件异常消息提醒,发送由某些组件异常触发的通知信息。 -
在 模板配置 区域,参考不同类型的模板说明配置变量、内容格式相关参数。
提示:
-
模板的内容仅能由平台支持的变量、变量显示名称、特殊格式标记语言组成。在符合语法规范的前提下,可自由组合变量及其他组成要素。
-
平台基于实际运维场景,提供了针对不同通知类型的默认通知模板内容,能够满足大部分通知消息设置需求。如无特殊需求,您可直接使用默认的模板内容。
本文以邮箱通知模板为例进行说明。
-
通知主题:邮件主题。也可使用平台预置的默认主题,如需修改,仅替换变量
{{}}(变量) 或修改变量之外的文本内容即可。预置主题为:
【{{.externalLabels.status}}】PAAS 平台告警:{{.externalLabels.object}}的{{.externalLabels.summary}}。显示效果:
【告警中】PAAS 平台告警:节点192.168.16.53的节点的CPU使用率超过80%。 -
通知内容:邮件通知的内容,默认显示预置的 HTML 格式通知模板内容,您可根据自己的需要增减变量或设置格式标签,模板内容支持 HTML 格式和文本格式,且支持填写中/英文文本。
提示:
-
输入框右侧默认展开当前格式内容的编写说明区域框,编写过程中,可参考右侧的说明信息或 特殊格式标记语言 编写内容。单击编写说明区域框底部的 收起帮助信息 按钮,可收起编写说明区域框;单击
可再次展开编写说明区域框。 -
单击输入框下方的 预览通知 按钮,可在弹出的对话框中,预览基于当前设置的邮件主题、通知内容生成的通知消息的展示效果。
-
单击 样例 右侧的 查看 按钮,可在弹出的对话框中,查看示例内容;单击
图标,在弹出的确认提示框中单击 替换 按钮后,可将输入框中当前内容快速替换为示例内容。
-
-
-
单击 创建。
如何引用变量?
变量是通知消息(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> |
插入超链接。 |