配置通知模板
告警通知模板采用了 Go Template 语法来渲染模板。Go Template 在渲染模板时,需要依据上下文中的数据来填充模板。
{
"alerts": [
{
"annotations": {
"message": "命名空间: arms-prom / Pod: kube-state-metrics-ccb59dbff-jljg4 / 容器: kube-state-metrics内存使用率超过80%, 当前值15.52%",
"value": "15.521240234375"
},
"endsAt": "2023-02-22T07:27:15.404000000Z",
"fingerprint": "bec72890cc2c7b4a027e008df0cd1013",
"labels": {
"container": "kube-state-metrics",
"severity": "warning",
"instance": "10.0.80.186:10255",
"clustername": "klyz1688-kubernetes-1",
"alertname": "容器内存使用率大于80%",
"_aliyun_arms_involvedObject_name": "klyz1688-kubernetes-1",
"pod_name": "kube-state-metrics-ccb59dbff-jljg4",
"_aliyun_arms_involvedObject_kind": "cluster",
"name": "k8s_kube-state-metrics_kube-state-metrics-ccb59dbff-jljg4_arms-prom_359508f3-7e76-4740-b915-41ea48849641_0",
"namespace": "arms-prom"
},
"startsAt": "2023-02-22T07:18:15.578000000Z",
"status": "firing"
}
],
"commonAnnotations": {
"message": "命名空间: arms-prom / Pod: kube-state-metrics-ccb59dbff-jljg4 / 容器: kube-state-metrics内存使用率超过80%, 当前值15.52%",
"value": "15.521240234375"
},
"commonLabels": {
"container": "kube-state-metrics",
"severity": "warning",
"instance": "10.0.80.186:10255",
"clustername": "klyz1688-kubernetes-1",
"alertname": "容器内存使用率大于80%",
"_aliyun_arms_involvedObject_name": "klyz1688-kubernetes-1",
"pod_name": "kube-state-metrics-ccb59dbff-jljg4",
"_aliyun_arms_involvedObject_kind": "cluster",
"name": "k8s_kube-state-metrics_kube-state-metrics-ccb59dbff-jljg4_arms-prom_359508f3-7e76-4740-b915-41ea48849641_0",
"namespace": "arms-prom"
},
"groupLabels": {
"alertname": "容器内存使用率大于80%"
},
"status": "firing",
"startTime": "2023-02-22 07:18:15",
"endTime": "告警恢复时间",
"level": "error",
"dispatchRuleName": "通知策略名称",
"alarmId": "123456"
},
.
字符
在当前作用域下渲染指定对象。
示例 1:取顶级作用域下的所有内容,即示例代码中上下文数据的全部内容。
返回结果:输出示例代码的全部内容。
示例 2:获取上下文数据中的level
字段。
返回结果:
示例 3:获取上下文数据中的commonLabels.alertname
字段。
返回结果:
变量
传给模板的数据可以保存在模板的变量中,整个模板中都能访问。例如,在{ {$context := .}}
中使用$context
作为变量,保存传入的数据,然后可以使用{{$context}}
访问变量。
示例1:将告警名称赋值给$alertname
,然后输出$alertname
。
返回结果:
示例2:将alerts
列表中第一个元素赋值给$alert0
,并输出第一个告警(元素)下的alertname
。
返回结果:
判断语句 if/else
使用if
检查数据,如果不满足可以执行else
。空值、0、nil、空字符串或者长度为0的字符串都返回false
。
示例1:如果告警事件中的severity
标签值为warning
,则输出P3告警
。
返回结果:
示例2:如果告警事件中的severity
标签值为critical
,则输出P1告警
,否则输出P2告警
。
返回结果:
循环函数 for
for
函数用于重复执行代码内容。
示例1:遍历alerts
列表,获取每个告警的alertname
。
返回结果:
range 函数
range
函数用于遍历指定内容。
示例1:遍历 0-9。
返回结果:
index 函数
index
函数用于获取数组中的元素。
示例1:获取alerts
列表中第一个元素,然后赋值给$alert0
。
返回结果:
比较函数
常用的比较函数:
eq
:等于ne
:不等于lt
:小于le
:小于等于gt
:大于ge
:大于等于
示例:如果commonLabels
中的severity
标签值等于warning
,则输出P3告警
。
返回结果:
常用内置函数
查询相关
名称 | Arguments | 返回值 | 解析 |
---|---|---|---|
query | query string | []sample | 查询数据库,不支持返回范围向量 |
first | []sample | sample | 相当于index a 0 |
label | label, sample | string | 相当于index sample.Labels label |
value | sample | interface{} | 相当于sample.Value |
sortByLabel | label, []samples | []sample | 根据给出的 label(标签)对 samples(数据样本)列表进行排序。是稳定排序 |
first
, label
和value
旨在使查询结果易于在管道中使用
数字相关
名称 | Arguments | 返回值 | 解析 |
---|---|---|---|
humanize | number or string | string | 使用数据指标前缀将数字转化为更以读的格式 |
humanize1024 | number or string | string | 类似于humanize ,但使用 1024 作为基准而不是 1000 |
humanizeDuration | number or string | string | 将持续时间(以秒为单位)转换为更可读的格式 |
humanizePercentage | number or string | string | 将比值转化为百分数 |
humanizeTimestamp | number or string | string | 将 Unix 时间戳转化为易读的格式 |
toTime | number or string | *time.Time | 将 Unix 时间戳转化为 time.Time |
Humanizing 相关函数旨在产生合理的输出以供人们使用
字符相关
名称 | Arguments | 返回值 | 解析 |
---|---|---|---|
title | string | string | strings.Title 函数,大写每个单词的第一个字符 |
toUpper | string | string | strings.ToUpper 函数,所有字符转化为大写 |
toLower | string | string | strings.ToLower 函数,所有字符转化为小写 |
stripPort | string | string | net.SplitHostPort, splits string into host and port, then returns only host. |
match | pattern, text | boolean | regexp.MatchString 函数,测试非锚定的正则表达式匹配 |
reReplaceAll | pattern, replacement, text | string | Regexp.ReplaceAllString 函数,正则表达式替换,非锚定 |
graphLink | expr | string | 返回表达式浏览器中该表达式的图形视图的路径 |
tableLink | expr | string | 返回表达式浏览器中表达式的表格化("Console")视图的路径 |
parseDuration | string | float | Parses a duration string such as "1h" into the number of seconds it represents. |
stripDomain | string | string | Removes the domain part of a FQDN. Leaves port untouched. |
其他
名称 | Arguments | 返回值 | 解析 |
---|---|---|---|
args | []interface{} | map[string]interface{} | 这会将对象列表转换为具有键 arg0, arg1 等的映射。旨在允许将多个参数传递给模板 |
tmpl | string, []interface{} | nothing | 类似于内置的template 函数,但允许使用非文字作为模板名称。注意,假定其结果是安全的,并且不会自动转义。仅在控制台中可用 |
safeHtml | string | string | 将字符串标记为 HTML,不需要自动转义 |
externalURL | none | string | The external URL under which Prometheus is externally reachable. |
pathPrefix | none | string | The external URL path for use in console templates. |