配置通知模板
告警通知模板采用了 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. |