模板变量
> 文档中心 > 文档中心 > INFINI Console > 操作手册 > 告警管理 > 模板变量

模板变量 #

简介 #

自定义告警触发事件内容时,除了自己撰写的固定文案外,事件标题、事件内容等也支持模板语法。可以使用事件中的字段实现文案的渲染。

模板变量 #

用于渲染字段的语法为{{ .字段名 }},可用于模板内容渲染的变量字段如下:

变量字段名字段类型说明示例
rule_idstringrule uuidc9f663tath2e5a0vksjg
rule_namestringrule nameHigh CPU usage
resource_idstringresource uuidc9f663tath2e5a0vksjg
resource_namestringresource namees-v716
event_idstringidentifier for check detailsc9f663tath2e5a0vksjx
timestampnumberMillisecond timestamp1654595042399
trigger_atnumberMillisecond timestamp1654595042399
durationstringAlarm duration“2m10s”
objectsstring arrayresource index name[".infini_metrics*"]
first_group_valuestringThe first value of group_values in resultsc9aikmhpdamkiurn1vq0
first_thresholdstringThe first value of threshold in results90
prioritystringThe highest priority in resultscritical
titlestringevent titleNode ({{.first_group_value}}) disk used >= 90%
messagestringevent contentEventID:{{.event_id}}; Cluster:{{.resource_name}}
resultsarrayresult of groups
results[0].thresholdarray[“90”]
results[0].prioritystringhigh
results[0].group_valuesarray[“cluster-xxx”, “node-xxx”]
results[0].issue_timestampnumberMillisecond timestamp1654595042399
results[0].result_valuefloat91.2
results[0].relation_valuesmap{a:100, b:91.2}

变量使用示例 #

示例 1:

{"content":"【Alerting】Event ID: {{.event_id}}, Cluster:{{.resource_name}}"}

示例 2(数组遍历):

{{range .results}} Cluster ID: {{index .group_values 0}} {{end}}

模版中使用环境变量 #

告警模版中可以解析系统环境变量和配置文件中配置的环境变量,系统环境变量优先级高于配置文件环境变量,访问方式为:

{{$.env.VARIABLE}}

INFINI Console 版本 1.2.0 及以上支持

系统环境变量 #

假如存在系统环境变量 WECHAT_WEBHOOK_ENDPOINT=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxx, 那么在告警模版中使用 {{$.env.WECHAT_WEBHOOK_ENDPOINT}} 就可以引用环境变量 WECHAT_WEBHOOK_ENDPOINT

配置文件中定义环境变量 #

假如 INFINI Console 配置文件 console.yml 中存在如下配置段:

env:
  INFINI_CONSOLE_ENDPOINT: "https://play.infinilabs.com:64443"
  WECHAT_WEBHOOK_ENDPOINT: "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxyy"

那么在告警模版中使用 {{$.env.INFINI_CONSOLE_ENDPOINT}} 就可以访问到配置文件中的环境变量 INFINI_CONSOLE_ENDPOINT

告警模版在 range 块中,这时候如果省略 $,用 {{.env.INFINI_CONSOLE_ENDPOINT}} 这种写法是没法正确解析的,需要使用 {{$.env.INFINI_CONSOLE_ENDPOINT}} 来访问根部变量 env

模板函数 #

除了直接展示告警事件中的字段值外,还支持使用模板函数对字段值进行进一步处理,优化输出。

函数支持额外参数,当无需或不传递参数时,可以直接使用以下语法进行使用:

{{ <模板变量> | <模板函数> }}

具体实例如下:

模板函数不带参数:

告警事件触发时间:{{ .timestamp | datetime }}

模板函数带参数:

告警事件触发时间:{{ .timestamp | datetime_in_zone "Asia/Shanghai" }}

多个函数组合使用:

字节类型的数值格式化后再转位大写:{{.result_value | format_bytes 2 | to_upper}}

完整的模板函数列表如下:

模板函数参数说明
to_fixed固定小数位数float 类型数值保留 N 位小数位
示例:{{.result_value | to_fixed 2}}
输出:10.35
format_bytes固定小数位数字节类型数值格式化
示例:{{.result_value | format_bytes 2}}
输出:10.35gb
date时间戳转为 UTC 日期
示例:{{.timestamp | date}}
输出:2022-05-01
date_in_zone时区时间戳转为当前区域日期
示例:{{.timestamp | date_in_zone "Asia/Shanghai"}}
输出:2022-05-01
datetime时间戳转为 UTC 时间
示例:{{.timestamp | datetime}}
输出:2022-05-01 10:10:10
datetime_in_zone时区时间戳转为当前区域时间
示例:{{.timestamp | datetime_in_zone "Asia/Shanghai"}}
输出:2022-05-01 10:10:10
to_lower英文字符转为小写
示例:{{.resource_name | to_lower }}
输出:cluster
to_upper英文字符转为大写
示例:{{.resource_name | to_upper }}
输出:CLUSTER
add数值类型数值相加
示例:{{.result_value | add 1 }}
输出:2
sub数值类型数值相减
示例:{{sub .result_value 1 }}
输出:0
mul数值类型数值相乘
示例:{{mul .result_value 3 2 }}
输出:6
div数值类型数值相除
示例:{{div .result_value 2 }}
输出:0.5
lookup字符串类型通过标识字段获取相关数据其他字段信息
示例(根据集群 ID 获取集群名称):{{lookup "category=metadata, object=cluster, property=name, default=N/A" "cg84bttath2dl9gaf50g"}}
输出:es710
str_replace字符串类型字符串替换
示例:{{ "hello world" | str_replace "world" "world!"}}
输出:hello world!
md_to_html字符串类型markdown 转 html 格式
示例:{{ "**hello world**" | md_to_html }}
输出:<p><strong>hello world</strong></p>

目前 lookup 函数第一个查找目录参数设置里面 category 仅支持 metadata 固定写法;object 可选值为 cluster|node|index,这三个指分别对应从 系统索引 .infini_cluster|.infini_node|.infini_index 中查找数据; property 指定获取哪个字段;default 找不到对应字段或者出错时的返回值; eg: 索引 .infini_node 中有如下一条数据
{ "metadata": { "cluster_name": "easysearch-7201", "cluster_id": "cgn4f7t3q95k3acgcam0", "host": "10.0.0.3", "node_name": "node_1", "category": "elasticsearch", "node_id": "tM87zZ-3TxCCPtJeOY1hSg", "labels": { "ip": "10.0.0.3", "roles": [ "data", "ingest", "master", "remote_cluster_client" ], "transport_address": "10.0.0.3:17201", "version": "1.0.0", "status": "unavailable" } }, "payload": {...} }

则可以使用节点 ID tM87zZ-3TxCCPtJeOY1hSg 来查询节点名称,查询方法如下:
{{lookup "category=metadata, object=node, property=metadata.node_name, default=N/A" "tM87zZ-3TxCCPtJeOY1hSg"}}

常用模板语法 #

array 数组遍历:

{{range .results}} priority: {{.priority}} {{end}}

通过数组下标取值:

示例:group_values = ["value1","value2","value3"]

{{index .group_values 0}}
#输出值为:value1
{{index .group_values 2}}
输出值为:value3

if 条件分支:

{{if pipeline}} T1 {{else}} T0 {{end}}

示例:

{{if eq .priority "critical"}} "#C91010" {{else if eq .priority "high"}} "#EB4C21" {{else}} "#FFB449" {{end}}

完整的比较运算符用法:

eq
	Returns the boolean truth of arg1 == arg2
ne
	Returns the boolean truth of arg1 != arg2
lt
	Returns the boolean truth of arg1 < arg2
le
	Returns the boolean truth of arg1 <= arg2
gt
	Returns the boolean truth of arg1 > arg2
ge
	Returns the boolean truth of arg1 >= arg2

更多模板语法 点击查看