告警通知变量

最近更新时间:2024-08-08 15:20:21

我的收藏
在告警策略中配置通知内容自定义接口回调配置多维分析时,可使用告警通知变量来自定义告警通知内容和多维分析语句,使得收到的告警通知更加清晰准确地描述告警原因。
告警变量还能够以日志的形式投递到日志主题中,使用方式详见 管理通知渠道组

快速开始

配置告警策略 时,在附加通知内容中填写如下信息:
详细日志:
{{.QueryLog[0][0]}}
配置完成后如下图所示:


收到告警通知时,附加通知内容将自动替换为下面的值,代表触发告警时最近的一条详细日志:
详细日志:
{"content":{"body_bytes_sent":"33352","http_referer":"-","http_user_agent":"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.17 Safari/537.36","remote_addr":"201.80.83.199","remote_user":"-","request_method":"GET","request_uri":"/content/themes/test-com/images/header_about.jpg","status":"404","time_local":"01/Nov/2018:01:16:31"},"fileName":"/root/testLog/nginx.log","pkg_id":"285A243662909DE3-70A","source":"172.17.0.2","time":1653831150008,"topicId":"a54de372-ffe0-49ae-a12e-c340bb2b03f2"}

通知变量

相关通知变量的说明如下表所示:
变量
含义
变量值示例
投递日志
说明
{{.RecordId}}
告警通知 ID
76afb409-4648-xxxx-b67a-fe350129ceb4
每次告警通知均使用不同的 ID
{{.RecordGroupId}}
告警分组 ID
52746a79-7681-495f-xxxx-2715593e625a
告警从触发到恢复,无论中间重复发送了多少次通知,对应的 ID 均相同;
告警策略启用分组触发功能时,同一时间可能产生多条告警,分别对应不同的分组及 ID
{{.UIN}}
账号 ID
100007xxx827
-
{{.Nickname}}
账号昵称
xx企业
-
{{.Region}}
地域
广州
注意:投递日志时为英文,例如 ap-guangzhou
-
{{.Alarm}}
告警策略名称
Nginx 错误日志过多
-
{{.AlarmID}}
告警策略 ID
notice-3abd7ad6-15b7-4168-xxxx-52e5b961a561
-
{{.Topic}}
日志主题名称
nginxLog
-
{{.TopicId}}
日志主题 ID
a54de372-ffe0-49ae-xxxx-c340bb2b03f2
-
{{.QueryParams}}
执行语句查询参数
[{
"TopicId": "36c6df96-a6ad-xxxx-99ec-3f0b66dea302",
"TopicName": "CDN Demo访问日志日志主题_10000753xxxx",
"TopicType": "log",
"Query": "* | select approx_percentile(request_time, 0.99) as p99",
"grammarVersion": "cql",
"StartTime": 1690956330000,
"EndTime": 1690957230000,
"QueryUrlPath": "/cls/search?grammarVersion=cql&queryBase64=KiB8IHNlbGVjdCBhcHByb3hfcGVyY2VudGlsZShyZXF1ZXN0X3RpbWUsIDAuOTkpIGFzIHA5OQ%3D%3D&region=ap-chongqing&time=2023-08-02T14%3A05%3A30.000%2C2023-08-02T14%3A20%3A30.000&topic_id=36c6df96-a6ad-xxxx-99ec-3f0b66dea302"
}]
数组结构,{{.QueryParams[0]}}代表第1个执行语句,{{.QueryParams[1]}}代表第2个执行语句,以此类推。
{{.Condition}}
触发条件
$1.errorLogCount > 1
-
{{.ConditionGroup}}
告警分组触发时对应的分组信息
{"$1.AppName":"userManageService"}
告警策略启用分组触发功能时才具备该变量
{{.Level}}
告警级别(英文)
Info
Critical
Warn
Info
{{.Level_zh}}
告警级别(中文)
提醒
紧急
警告
提醒
{{.HappenThreshold}}
告警所需的触发条件持续满足次数
1
-
{{.AlertThreshold}}
告警间隔时间
15
单位:分钟
{{.Label}}
附加分类字段
{"service":"payService"}

{{.StartTime}}
第一次告警触发时间
2022-05-28 18:56:37
时区:Asia/Shanghai
{{.StartTimeUnix}}
第一次告警触发时间戳
1653735397099
毫秒级 UNIX 时间戳
{{.NotifyTime}}
本次告警通知时间
2022-05-28 19:41:37
时区:Asia/Shanghai
{{.NotifyTimeUnix}}
本次告警通知时间戳
1653738097099
毫秒级 UNIX 时间戳
{{.NotifyType}}
告警通知类型
1
1代表告警通知,2代表恢复通知
{{.ConsecutiveAlertNums}}
连续告警次数
2
-
{{.Duration}}
告警持续时间
0
单位:分钟
{{.DetailUrl}}
告警详情页面链接
https://alarm.cls.tencentcs.com/MDv2xxJh
无需登录账号
{{.QueryUrl}}
第一个执行语句的检索分析链接
https://alarm.cls.tencentcs.com/T0pkxxMA
如需获取其它执行语句链接地址,请使用{{.QueryParams}}
{{.SilentUrl}}
告警屏蔽链接
https://alarm.cls.tencentcs.com/K6hyxxyG
无需登录账号,需{{.CanSilent}}为 true 时方可使用,例如:
{{if .CanSilent}}{{.SilentUrl}}{{end}}
{{.CanSilent}}
是否支持通过{{.SilentUrl}}直接屏蔽告警
true
在通知渠道组中开启“免登录屏蔽告警”功能后该值为 true,否则为 false
{{.Message}}
附加通知内容
-
特指告警策略配置中填写的“附加通知内容”,最大10KB,超出后将自动截断
{{.TriggerParams}}
告警触发时参数
$1.errorLogCount=5;
执行语句有多条结果同时满足触发条件时,仅记录其中的第一条结果
{{.QueryResult}}
执行语句执行结果
详见 {{.QueryResult}} 说明
-
{{.TriggerResult}}
满足触发条件的执行语句结果
详见 {{.TriggerResult}} 说明
-
{{.QueryLog}}
执行语句中检索条件匹配到的详细日志
详见 {{.QueryLog}} 说明
-
{{.AnalysisResult}}
多维分析结果
详见 {{.AnalysisResult}} 说明
仅告警触发时具备该变量,告警恢复时无该变量
{{.AnalysisResultFormat}}
格式化后的多维分析结果(英文)

内容与{{.AnalysisResult}}一致,但将 json 格式化为文本形式,使用换行、表格等形式展示,提高内容易读性。
{{.AnalysisResultFormat_zh}}
格式化后的多维分析结果(中文)

AlarmExecutionStatus
告警策略执行结果
TriggerNotice.SendSuccess
仅支持投递日志
AlarmExecutionErrorDetail
告警策略执行异常详情
{"TriggerFailedReason":"Parse expression failed: Invalid token: '$'","notify_result_group":null}
仅支持投递日志
Silent
当前告警通知是否被屏蔽
全部通知均被屏蔽:SilentAll
部分通知被屏蔽:SilentPartial 未被屏蔽:NotSilent
仅支持投递日志
相关说明如下:

{{.QueryResult}}

含义:执行语句执行结果(无论是否满足触发条件)。
说明:数组结构,{{.QueryResult[0]}} 代表第1个执行语句的执行结果,{{.QueryResult[1]}} 代表第2个执行语句的执行结果,以此类推。每个执行语句最多1000条数据、最大10KB,最多10个执行语句,总计最大100KB,超出限制后将自动截断。
变量值示例: 假设告警策略存在两条执行语句:
第1个执行语句:status:>=400 | select count(*) as errorLogCount
第2个执行语句:status:>=400 | select count(*) as errorLogCount,request_uri group by request_uri order by count(*) desc
则变量值为:
[
[{
"errorLogCount": 7
}],
[{
"errorLogCount": 3,
"request_uri": "/apple-touch-icon-144x144.png"
}, {
"errorLogCount": 3,
"request_uri": "/feed"
}, {
"errorLogCount": 1,
"request_uri": "/opt/node_apps/test-v5/app/themes/basic/public/static/404.html"
}]
]
{{.
TriggerResult
}}
含义:满足触发条件的执行语句执行结果。
说明:数组结构,{{.TriggerResult[0]}} 代表第1个执行语句的执行结果,{{.TriggerResult[1]}} 代表第2个执行语句的执行结果,以此类推。每个执行语句最多1000条数据、最大10KB,最多10个执行语句,总计最大100KB,超出限制后将自动截断。
变量值示例: 在上文的 {{.QueryResult}} 变量值示例的基础上,若触发条件为$1.errorLogCount > 1。 则变量值为:
[
[{
"errorLogCount": 7
}],
[{
"errorLogCount": 3,
"request_uri": "/apple-touch-icon-144x144.png"
}, {
"errorLogCount": 3,
"request_uri": "/feed"
}]
]

{{.QueryLog}}

含义:执行语句中检索条件匹配到的详细日志(不包含 SQL 中的过滤条件)。
说明:数组结构,{{.QueryLog[0]}} 代表第1个执行语句的详细日志,{{.QueryLog[1]}} 代表第2个执行语句的详细日志,以此类推。每个执行语句最多10条数据、最大10KB,最多10个执行语句,总计最大100KB,超出限制后将自动截断。
变量值示例
[
[{
"content": {
"__TAG__": {
"pod": "nginxPod",
"cluster": "testCluster"
},
"body_bytes_sent": "32847",
"http_referer": "-",
"http_user_agent": "Opera/9.80 (Windows NT 6.1; U; en-US) Presto/2.7.62 Version/11.01",
"remote_addr": "105.86.148.186",
"remote_user": "-",
"request_method": "GET",
"request_uri": "/apple-touch-icon-144x144.png",
"status": "404",
"time_local": "01/Nov/2018:00:55:14"
},
"fileName": "/root/testLog/nginx.log",
"pkg_id": "285A243662909DE3-5CD",
"source": "172.17.0.2",
"time": 1653739000013,
"topicId": "a54de372-ffe0-49ae-a12e-c340bb2b03f2"
}, {
"content": {
"__TAG__": {
"pod": "nginxPod",
"cluster": "testCluster"
},
"body_bytes_sent": "33496",
"http_referer": "-",
"http_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36",
"remote_addr": "222.18.168.242",
"remote_user": "-",
"request_method": "GET",
"request_uri": "/opt/node_apps/test-v5/app/themes/basic/public/static/404.html",
"status": "404",
"time_local": "01/Nov/2018:00:54:37"
},
"fileName": "/root/testLog/nginx.log",
"pkg_id": "285A243662909DE3-5C8",
"source": "172.17.0.2",
"time": 1653738975008,
"topicId": "a54de372-ffe0-49ae-a12e-c340bb2b03f2"
}]
]

{{.AnalysisResult}}

含义:多维分析结果。
说明:对象结构,第一层级对象分别对应每个多维分析的结果。一级对象的 key 为多维分析的名称,value 为该多维分析的结果。仅告警触发(即{{.NotifyType}}=1)时具备该变量,告警恢复(即{{.NotifyType}}=2)时无该变量。每个多维分析最多10KB,最多5个多维分析,总计最大50KB。超出限制后将自动截断
相关原始日志:每个语句最多10条数据,以用户配置为准。
字段 Top5及占比统计:每个语句最多5条数据
自定义检索分析(SQL):每个语句最多1000条数据
自定义检索分析(检索):每个语句最多10条数据
变量值示例 假设告警策略存在3个多维分析:
名称:Top URL
类型:字段TOP5及占比统计
字段:request_uri

名称:错误日志URL分布
类型:自定义检索分析
分析语句:status:>=400 | select count(*) as errorLogCount,request_uri group by request_uri order by count(*) desc

名称:详细错误日志
类型:自定义检索分析
分析语句:status:>=400
则变量值为:
{
"Top URL": [{
"count": 77,
"ratio": 0.45294117647058824,
"value": "/"
}, {
"count": 20,
"ratio": 0.11764705882352941,
"value": "/favicon.ico"
}, {
"count": 7,
"ratio": 0.041176470588235294,
"value": "/blog/feed"
}, {
"count": 5,
"ratio": 0.029411764705882353,
"value": "/test-tile-service"
}, {
"count": 3,
"ratio": 0.01764705882352941,
"value": "/android-chrome-192x192.png"
}],
"详细错误日志": [{
"content": {
"__TAG__": {
"pod": "nginxPod",
"cluster": "testCluster"
},
"body_bytes_sent": "32847",
"http_referer": "-",
"http_user_agent": "Opera/9.80 (Windows NT 6.1; U; en-US) Presto/2.7.62 Version/11.01",
"remote_addr": "105.86.148.186",
"remote_user": "-",
"request_method": "GET",
"request_uri": "/apple-touch-icon-144x144.png",
"status": "404",
"time_local": "01/Nov/2018:00:55:14"
},
"fileName": "/root/testLog/nginx.log",
"pkg_id": "285A243662909DE3-5CD",
"source": "172.17.0.2",
"time": 1653739000013,
"topicId": "a54de372-ffe0-49ae-a12e-c340bb2b03f2"
}, {
"content": {
"__TAG__": {
"pod": "nginxPod",
"cluster": "testCluster"
},
"body_bytes_sent": "33496",
"http_referer": "-",
"http_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36",
"remote_addr": "222.18.168.242",
"remote_user": "-",
"request_method": "GET",
"request_uri": "/opt/node_apps/test-v5/app/themes/basic/public/static/404.html",
"status": "404",
"time_local": "01/Nov/2018:00:54:37"
},
"fileName": "/root/testLog/nginx.log",
"pkg_id": "285A243662909DE3-5C8",
"source": "172.17.0.2",
"time": 1653738975008,
"topicId": "a54de372-ffe0-49ae-a12e-c340bb2b03f2"
}],
"错误日志URL分布": [{
"errorLogCount": 3,
"request_uri": "/apple-touch-icon-144x144.png"
}, {
"errorLogCount": 3,
"request_uri": "/feed"
}, {
"errorLogCount": 1,
"request_uri": "/opt/node_apps/test-v5/app/themes/basic/public/static/404.html"
}]
}

变量语法

变量语法类似 Go Template 语法,可对告警通知变量进行提取和格式化处理,以更加清晰地呈现在告警通知内容中。所有变量及变量语法均位于{{ }}中,外部的文本不会进行处理。

变量提取

语法格式
{{.variable[x]}}{{index .variable x}}
{{.variable.childNodeName}}{{index .variable "childNodeName"}}
语法说明
变量为数组时,使用 {{.variable[x]}} 按数组下标提取对应的数组元素,其中 x 为大于等于0的整数,等价于 {{index .variable x}}
变量为对象时,使用 {{.variable.childNodeKey}} 按子级对象名称(key)提取对应的子级对象值(value),等价于 {{index .variable "childNodeName"}}
注意
子级对象名称包含空格时,请使用 {{index .variable "childNodeName"}}形式的语法,例如 {{index .AnalysisResult "Top URL"}}
使用数组下标提取元素时,请勿超出数组长度。必要时可使用 len 函数通过 条件判断 语法确定是否超出数组长度。
使用示例 {{.QueryResult}} 变量值为:
[
[{
"errorLogCount": 7 //提取该值
}],
[{
"errorLogCount": 3,
"request_uri": "/apple-touch-icon-144x144.png"
}, {
"errorLogCount": 3,
"request_uri": "/feed"
}, {
"errorLogCount": 1,
"request_uri": "/opt/node_apps/test-v5/app/themes/basic/public/static/404.html"
}]
]
通过以下表达式获取第一个数组中的 errorLogCount 的值:
{{.QueryResult[0][0].errorLogCount}}
返回结果:
7

循环遍历

语法格式
{{range .variable}}
自定义内容{{.childNode1}}自定义内容{{.childNode2}}...
{{end}}
{{range $key,$value := .variable}}
自定义内容{{$key}}自定义内容{{$value}}...
{{end}}
语法说明
变量为数组或包含多个子级对象的对象时,可使用该语法将其中的每个元素/对象按指定格式展示出来。
注意:
range语法内部,默认获取的是.variable内部的元素/对象,不能直接使用{{.UIN}}的形式获取外部变量,如需获取请在range语法外部提前创建独立的变量,例如:
{{$UIN := .UIN}} //创建变量
{{range .variable}}
自定义内容{{.childNode1}}自定义内容{{.childNode2}}...
{{$UIN}} //使用变量
{{end}}
使用示例
{{.QueryResult}} 变量值为:
[
[{
"errorLogCount": 7
}],
[{
"errorLogCount": 3,
"request_uri": "/apple-touch-icon-144x144.png"
}, {
"errorLogCount": 3,
"request_uri": "/feed"
}, {
"errorLogCount": 1,
"request_uri": "/opt/node_apps/test-v5/app/themes/basic/public/static/404.html"
}]
]
通过以下表达式分别展示第二个数组中每个 request_uri 对应的 errorLogCount:
{{range .QueryResult[1]}}
* {{.request_uri}}错误日志数:{{.errorLogCount}}
{{end}}
返回结果:

* /apple-touch-icon-144x144.png错误日志数:3

* /feed错误日志数:3

* /opt/node_apps/test-v5/app/themes/basic/public/static/404.html错误日志数:1

条件判断

语法格式
{{if boolen}}
xxx
{{end}}
{{if boolen}}
xxx
{{else}}
xxx
{{end}}
{{if boolen}}
xxx
{{else if boolen}}
xxx
{{end}}
语法说明
根据条件判断结果分别执行对应的表达式,条件判断支持使用 and or not 进行逻辑运算,支持比较大小值。
eq arg1 arg2 : arg1 == arg2时为true
ne arg1 arg2 : arg1 != arg2时为true
lt arg1 arg2 : arg1 < arg2时为true
le arg1 arg2 : arg1 <= arg2时为true
gt arg1 arg2 : arg1 > arg2时为true
ge arg1 arg2 : arg1 >= arg2时为true
使用示例
{{.QueryResult}} 变量值为:
[
[{
"errorLogCount": 7
}],
[{
"errorLogCount": 3,
"request_uri": "/apple-touch-icon-144x144.png"
}, {
"errorLogCount": 3,
"request_uri": "/feed"
}, {
"errorLogCount": 1,
"request_uri": "/opt/node_apps/test-v5/app/themes/basic/public/static/404.html"
}]
]
通过以下表达式分别展示第二个数组中 errorLogCount 大于等于2且小于等于100的 request_uri 及对应的 errorLogCount:
{{range .QueryResult[1]}}
{{if and (ge .errorLogCount 2) (le .errorLogCount 100)}}
* {{.request_uri}}错误日志数:{{.errorLogCount}}
{{end}}
{{end}}
返回结果:


* /apple-touch-icon-144x144.png错误日志数:3



* /feed错误日志数:3
使用 if 还可以判断字段值是否存在,字段值为空白字符串或不存在时,相当于 false。例如:
{{if .QueryLog[0][0].apple}}
apple exist, value is : {{.QueryLog[0][0].apple}}
{{else}}
apple is not exist
{{end}}

移除空白符号

语法格式
{{- xxx}}{{xxx -}}
语法说明
变量语法在执行过程中会保留语法本身带来的空格、缩进和换行等空白符号,例如循环迭代和条件判断使用示例中的返回结果中包含较多空白行,影响展示效果,此时可在{{ }}的头部或尾部使用-移除其前面或后面的空白符号。
使用示例
沿用条件判断中的示例,表达式修改为:
{{- range .QueryResult[1]}}
{{- if and (ge .errorLogCount 2) (le .errorLogCount 100)}}
* {{.request_uri}}错误日志数:{{.errorLogCount}}
{{- end}}
{{- end}}
返回结果:
* /apple-touch-icon-144x144.png错误日志数:3
* /feed错误日志数:3

变量函数

转义特殊字符

语法格式
函数
说明
{{escape .variable}}
"等特殊符号进行转义,以便于将变量放在 json 中,保持 json 格式正确
{{escape_markdown .variable}}
* #等特殊符号进行转义,以便于将变量放在 markdown 中,保持 markdown 格式正确
适用于企业微信机器人通知渠道
{{escape_markdown_html .variable}}
* #等特殊符号进行转义,以便于将变量放在 markdown 中,保持 markdown 格式正确 适用于钉钉及飞书机器人通知渠道
使用示例
{{.ExecuteQuery[0]}} 的变量值为 status:>=400 | select count(*) as "错误日志数" 如果不使用转义,自定义接口回调配置中请求内容为:
{
"Query":"{{.ExecuteQuery[0]}}"
}
返回结果如下(不是一个合法的 JSON):

{
"Query":"status:>=400 | select count(*) as "错误日志数""
}

此时可使用转义,将自定义接口回调配置中请求内容修改为:
{
"Query":"{{escape .ExecuteQuery[0]}}"
}
返回结果如下(符合 JSON 语法要求):
{
"Query":"status:>=400 | select count(*) as \\"错误日志数\\""
}


统计长度或元素个数

语法格式
{{len .variable}}
语法说明
获取数组、map 数据结构的元素个数,也可获取字符串的长度,不支持获取数值的长度。
使用示例
{{.QueryResult}}变量值为:
[[{"number":19778,"text":"hello"}],[]]
通过以下表达式分别统计数组、map 的元素个数及字符串的长度:
{{.QueryResult}}数组下的元素个数:{{len .QueryResult}}
{{.QueryResult[0]}}数组下的元素个数:{{len .QueryResult[0]}}
{{.QueryResult[0][0]}}map下的元素个数:{{len .QueryResult[0][0]}}
{{.QueryResult[0][0].text}}字符串的长度: {{len .QueryResult[0][0].text}}
返回结果:
[[{"number":19783,"text":"hello"}],[]]数组下的元素个数:2
[{"number":19783,"text":"hello"}]数组下的元素个数:1
{"number":19783,"text":"hello"}map下的元素个数:2
hello字符串的长度: 5

字符串截取

按字符串长度截取

语法格式
{{substr .variable start}}{{substr .variable start length}}
语法说明
按指定起始位置和长度(可选)对字符串进行截取,起始位置及长度均按照字节数计算,一般英文字母及数字占1个字节,中文占3~4个字节。
使用示例
{{.QueryLog[0][0].fileName}} 变量值为:
/root/testLog/nginx.log
通过以下表达式获取第6个字节开始、总长7个字节的字符串:
{{substr .QueryLog[0][0].fileName 6 7 }}
返回结果:
testLog

按首尾字符串截取

语法格式
{{extract .variable "startStringRegex" ["endStringRegex"]}}
语法说明
按指定起始字符和结束字符(可选)对字符串进行截取,起始字符和结束字符通过正则表达式进行指定。
使用示例
{{.QueryLog[0][0].fileName}}变量值为:
/root/testLog/nginx.log
通过以下表达式获取 /root//nginx 之间的字符串:
{{extract .QueryLog[0][0].fileName "/root/" "/nginx"}}
返回结果:
testLog
{{.Condition}}变量值为:
$1.errorLogCount > 1
通过以下表达式获取 $1. 之后的字符串(因为$.是正则表达式中的特殊符号,所以需要转义):
{{extract .Condition "\\\\$1\\\\."}}
返回结果:
errorLogCount > 1

是否包含指定字符串

语法格式
{{containstr .variable "searchstring"}}
语法说明
变量值中是否包含指定的字符串,判断结果可用于条件判断语法中。
使用示例
{{.QueryLog[0][0].fileName}} 变量值为:
/root/testLog/nginx.log
通过以下表达式获取 /root//nginx 之间的字符串:
{{if containstr .QueryLog[0][0].fileName "test"}}
测试日志
{{else}}
非测试日志
{{end}}
返回结果:
测试日志

UNIX 时间戳转换

语法格式
{{fromUnixTime .variable}}{{fromUnixTime .variable "timezone"}}
语法说明
将 UNIX 时间戳(支持毫秒及秒级时间戳)转换为可读的日期时间。其中时区可选,默认为 Asia/Shanghai。
使用示例
{{.QueryLog[0][0].time}} 变量值为:
1653893435008
通过以下表达式分别获取不同时区下的日期时间:
{{fromUnixTime .QueryLog[0][0].time}}
{{fromUnixTime .QueryLog[0][0].time "Asia/Shanghai"}}
{{fromUnixTime .QueryLog[0][0].time "Asia/Tokyo"}}
返回结果:

2022-05-30 14:50:35.008 +0800 CST
2022-05-30 14:50:35.008 +0800 CST
2022-05-30 15:50:35.008 +0900 JST

字符串拼接

语法格式
{{concat .variable1 .variable2 ...}}
语法说明
将指定的多个变量或字符串拼接在一起。
使用示例
将地域及告警策略名称拼接在一起:
{{concat .Region .Alarm}}
返回结果:
广州 alarmTest

base64/base64url/url 编码及解码

语法格式
{{base64_encode .variable}}
{{base64_decode .variable}}
{{base64url_encode .variable}}
{{base64url_decode .variable}}
{{url_encode .variable}}
{{url_decode .variable}}
语法说明
对指定的变量或字符串进行编码(encode)或解码(decode),其中 base64url 在编解码过程中不会去除或补充尾部的"="。
使用示例
{{base64_encode "test测试"}}
{{base64_decode "dGVzdOa1i+ivlQ=="}}
{{base64url_encode "test测试"}}
{{base64url_decode "dGVzdOa1i-ivlQ=="}}
{{url_encode "https://console.cloud.tencent.com:80/cls?region=ap-chongqing"}}
{{url_decode "https%3A%2F%2Fconsole.cloud.tencent.com%3A80%2Fcls%3Fregion%3Dap-chongqing"}}
返回结果:
dGVzdOa1i+ivlQ==
test测试
dGVzdOa1i-ivlQ==
test测试
https%3A%2F%2Fconsole.cloud.tencent.com%3A80%2Fcls%3Fregion%3Dap-chongqing
https://console.cloud.tencent.com:80/cls?region=ap-chongqing

md5/sha1/sha256/sha512 加密

语法格式
{{md5 .variable}}
{{md5 .variable | base64_encode}}
{{md5 .variable | base64url_encode}}
{{sha1 .variable}}
{{sha1 .variable | base64_encode}}
{{sha1 .variable | base64url_encode}}
{{sha256 .variable}}
{{sha256 .variable | base64_encode}}
{{sha256 .variable | base64url_encode}}
{{sha512 .variable}}
{{sha512 .variable | base64_encode}}
{{sha512 .variable | base64url_encode}}
语法说明
对指定的变量或字符串按照特定的加密算法进行加密,默认返回结果编码格式为16进制字符串,可按需修改为 base64 或 base64url 编码格式。
使用示例
{{md5 "test"}}
{{md5 "test" | base64_encode}}
{{md5 "test" | base64url_encode}}
{{sha1 "test"}}
{{sha1 "test" | base64_encode}}
{{sha1 "test" | base64url_encode}}
{{sha256 "test"}}
{{sha256 "test" | base64_encode}}
{{sha256 "test" | base64url_encode}}
{{sha512 "test"}}
{{sha512 "test" | base64_encode}}
{{sha512 "test" | base64url_encode}}
返回结果:
098F6BCD4621D373CADE4E832627B4F6
CY9rzUYh03PK3k6DJie09g==
CY9rzUYh03PK3k6DJie09g==
A94A8FE5CCB19BA61C4C0873D391E987982FBBD3
qUqP5cyxm6YcTAhz05Hph5gvu9M=
qUqP5cyxm6YcTAhz05Hph5gvu9M=
9F86D081884C7D659A2FEAA0C55AD015A3BF4F1B2B0B822CD15D6C15B0F00A08
n4bQgYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg=
n4bQgYhMfWWaL-qgxVrQFaO_TxsrC4Is0V1sFbDwCgg=
EE26B0DD4AF7E749AA1A8EE3C10AE9923F618980772E473F8819A5D4940E0DB27AC185F8A0E1D5F84F88BC887FD67B143732C304CC5FA9AD8E6F57F50028A8FF
7iaw3Ur350mqGo7jwQrpkj9hiYB3Lkc/iBml1JQODbJ6wYX4oOHV+E+IvIh/1nsUNzLDBMxfqa2Ob1f1ACio/w==
7iaw3Ur350mqGo7jwQrpkj9hiYB3Lkc_iBml1JQODbJ6wYX4oOHV-E-IvIh_1nsUNzLDBMxfqa2Ob1f1ACio_w==

hmac_md5/hmac_sha1/hmac_sha256/hmac_sha512 加密

语法格式
{{hmac_md5 .variable "Secretkey"}}
{{hmac_md5 .variable "Secretkey" | base64_encode}}
{{hmac_md5 .variable "Secretkey" | base64url_encode}}
{{hmac_sha1 .variable "Secretkey"}}
{{hmac_sha1 .variable "Secretkey" | base64_encode}}
{{hmac_sha1 .variable "Secretkey" | base64url_encode}}
{{hmac_sha256 .variable "Secretkey"}}
{{hmac_sha256 .variable "Secretkey" | base64_encode}}
{{hmac_sha256 .variable "Secretkey" | base64url_encode}}
{{hmac_sha512 .variable "Secretkey"}}
{{hmac_sha512 .variable "Secretkey" | base64_encode}}
{{hmac_sha512 .variable "Secretkey" | base64url_encode}}
语法说明
对指定的变量或字符串按照特定的加密算法进行加密,默认返回结果编码格式为16进制字符串,可按需修改为 base64 或 base64url 编码格式。其中 Secretkey 为 hmac 加密算法中的密钥,可按需进行修改。
使用示例
{{hmac_md5 "test" "Secretkey"}}
{{hmac_md5 "test" "Secretkey" | base64_encode}}
{{hmac_md5 "test" "Secretkey" | base64url_encode}}
{{hmac_sha1 "test" "Secretkey"}}
{{hmac_sha1 "test" "Secretkey" | base64_encode}}
{{hmac_sha1 "test" "Secretkey" | base64url_encode}}
{{hmac_sha256 "test" "Secretkey"}}
{{hmac_sha256 "test" "Secretkey" | base64_encode}}
{{hmac_sha256 "test" "Secretkey" | base64url_encode}}
{{hmac_sha512 "test" "Secretkey"}}
{{hmac_sha512 "test" "Secretkey" | base64_encode}}
{{hmac_sha512 "test" "Secretkey" | base64url_encode}}
返回结果:
E7B946D930658699AA668601E33E87CE
57lG2TBlhpmqZoYB4z6Hzg==
57lG2TBlhpmqZoYB4z6Hzg==
2AB64F124D932F5033EAC7AF392AC5CC4D52F503
KrZPEk2TL1Az6sevOSrFzE1S9QM=
KrZPEk2TL1Az6sevOSrFzE1S9QM=
FC49EBC05209B1359773D87C216BA85BCE0163FDE459EA37AB603EC9D8445D23
/EnrwFIJsTWXc9h8IWuoW84BY/3kWeo3q2A+ydhEXSM=
_EnrwFIJsTWXc9h8IWuoW84BY_3kWeo3q2A-ydhEXSM=
D18DF3D943F74769A8B66E43D7EF03639BB6B8B8A2EBC9976170DC58EEE58BE98478F3183E4B5AA3481DE12026AAE3843F8213B39D639EAC6EE93734EA667BC5
0Y3z2UP3R2motm5D1+8DY5u2uLii68mXYXDcWO7li+mEePMYPktao0gd4SAmquOEP4ITs51jnqxu6Tc06mZ7xQ==
0Y3z2UP3R2motm5D1-8DY5u2uLii68mXYXDcWO7li-mEePMYPktao0gd4SAmquOEP4ITs51jnqxu6Tc06mZ7xQ==

参考案例

案例1:在告警通知中展示最近一条详细日志

需求场景 将符合执行语句检索条件的最近一条详细日志添加至告警通知中,以 key:value 的形式展示,每行一个 key,不包含 CLS 预置字段和元数据字段。
通知内容配置
{{range $key,$value := .QueryLog[0][0].content}}
{{if not (containstr $key "__TAG__")}}
{{- $key}}:{{$value}}
{{- end}}
{{- end}}
其中 .QueryLog[0][0] 代表符合告警策略第一条执行语句检索条件的最近一条详细日志,其值为:
{
"content": {
"__TAG__": {
"a": "b12fgfe",
"c": "fgerhcdhgj"
},
"body_bytes_sent": "33704",
"http_referer": "-",
"http_user_agent": "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.3319.102 Safari/537.36",
"remote_addr": "247.0.249.191",
"remote_user": "-",
"request_method": "GET",
"request_uri": "/products/hadoop)",
"status": "404",
"time_local": "01/Nov/2018:07:54:08"
},
"fileName": "/root/testLog/nginx.log",
"pkg_id": "285A243662909DE3-210B",
"source": "172.17.0.2",
"time": 1653908859008,
"topicId": "a54de372-ffe0-49ae-a12e-c340bb2b03f2"
}
告警通知内容
remote_addr:247.0.249.191
time_local:01/Nov/2018:07:54:08
http_user_agent:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.3319.102 Safari/537.36
remote_user:-
http_referer:-
body_bytes_sent:33704
request_method:GET
request_uri:/products/hadoop)
status:404

案例2:在告警通知中展示执行语句执行结果

需求场景 将执行语句执行结果中符合触发条件的部分添加至告警通知中,以列表的形式展示。 告警策略执行语句为:status:>=400 | select count(*) as errorLogCount,request_uri group by request_uri order by count(*) desc 触发条件为:$1.errorLogCount > 10
通知内容配置
{{range .QueryResult[0]}}
{{- if gt .errorLogCount 10}}
{{.request_uri}}错误日志数:{{.errorLogCount}}
{{- end}}
{{- end}}
其中 .QueryResult[0] 代表告警策略第一条执行语句的执行结果,其值为:
[{
"errorLogCount": 161,
"request_uri": "/apple-touch-icon-144x144.png"
}, {
"errorLogCount": 86,
"request_uri": "/opt/node_apps/test-v5/app/themes/basic/public/static/404.html"
}, {
"errorLogCount": 33,
"request_uri": "/feed"
}, {
"errorLogCount": 26,
"request_uri": "/wp-login.php"
}, {
"errorLogCount": 10,
"request_uri": "/safari-pinned-tab.svg"
}, {
"errorLogCount": 7,
"request_uri": "/mstile-144x144.png"
}, {
"errorLogCount": 4,
"request_uri": "/atom.xml"
}, {
"errorLogCount": 3,
"request_uri": "/content/plugins/prettify-gc-syntax-highlighter/launch.js?ver=3.5.2?ver=3.5.2"
}]
告警通知内容
/apple-touch-icon-144x144.png错误日志数:161
/opt/node_apps/elastic-v5/app/themes/basic/public/static/404.html错误日志数:86
/feed错误日志数:33
/wp-login.php错误日志数:26

案例3:在多维分析中使用执行语句执行结果作为

需求场景
告警策略中配置多维分析时,需将执行语句的结果中的某个字段的值作为多维分析的过滤条件。

告警策略配置



其中{{.QueryResult[0][0].status_code}}代表第一条执行语句执行结果中第一行第二列的值,既可以类似上图使用在SQL语句中,也可以使用在检索条件中,例如:
status_code:{{.QueryResult[0][0].status_code}} | select url,status_code limit 5
注意:
变量值为字符串时,请使用引号包裹以符合检索分析语句规则。SQL中需使用单引号包裹,例如'{{.QueryResult[0][0].url}}',检索条件中使用双引号包裹,例如"{{.QueryResult[0][0].url}}"