触发条件表达式用于判断是否触发告警。将执行语句结果作为触发表达式的输入变量,当表达式判断结果为真时触发告警。
语法说明
运算符 | 说明 | 示例 |
$N.__QUERYCOUNT__ | 执行语句结果条数, N 为对应的执行语句编号。针对不同使用场景,其具体含义如下: 日志主题 执行语句不包含 SQL:匹配检索条件的原始日志条数 执行语句包含 SQL:SQL结果条数(注意:SQL 中未指定 limit 时,默认最大返回100条结果) 指标主题:PromQL 查询结果条数 | $1.__QUERYCOUNT__ |
$N.keyname | 引用执行语句的结果, N 为对应的执行语句编号,keyname 为执行语句结果中的字段名称。注意: keyname 首字符必须是字母,可以包含字母、数字、下划线,如包含特殊字符:日志主题执行语句中支持使用 AS 语法 对字段名称设置别名 使用方括号整体包裹,例如 [$1.@value] 监控对象为指标主题时,除指标维度(label)外,系统预置如下变量: $N.__name__ :指标的名称$N.value :指标的值$N.time :指标对应的时间,秒级 UNIX 时间戳指标维度(label)的字段名称如果与上述变量冲突,会在原字段名称前自动添加@符号,例如 [$1.@value] | $1.ErrCount $1.value |
+ | 求和运算符 | $1.ErrCount+$1.FatCount>10 |
- | 减法运算符 | $1.Count-$1.InfoCount>100 |
* | 乘法运算符 | $1.RequestMilSec*1000>10 |
/ | 除法运算符 | $1.RequestSec/1000>0.01 |
% | 取模运算符 | $1.keyA%10==0 |
== | 比较运算符:等于 | $1.ErrCount==100 $1.level=="Error" |
> | 比较运算符:大于 | $1.ErrCount>100 |
< | 比较运算符:小于 | $1.pv<100 |
>= | 比较运算符:大于等于 | $1.ErrCount>=100 |
<= | 比较运算符:小于等于 | $1.pv<=100 |
!= | 比较运算符:不等于 | $1.level!="Info" |
() | 括号,控制运算优先级 | ($1.a+$1.b)/$1.c>100 |
&& | 逻辑运算符:与 | $1.ErrCount>100 && $1.level=="Error" |
|| | 逻辑运算符:或 | $1.ErrCount>100 || $1.level=="Error" |
需使用比较运算符对变量进行比较,且结果需为布尔值且为“真”时才会触发告警。例如
$1.a
值为80,$1.b
值为20时:表达式
$1.a+$1.b
:结果为100,不是布尔值,不触发告警。表达式
$1.a+$1.b>=100
:结果为“真”,触发告警。一个告警策略中可以设置多个执行语句(最多3个),每个执行语句有编号(从1开始依次递增),例如
$1.key1
引用编号为1
的执行语句中的key1
字段, $2.key2
引用编号为2
的执行语句中的key2
字段。监控对象为指标主题时,建议在执行语句中直接配置好告警条件,触发条件中直接使用
$N.__QUERYCOUNT__ > 0
即可(请将其中的 N 替换为执行语句编号),详见 示例3。当执行语句返回多个结果时,会根据返回结果依次计算1000次,判断其是否满足触发条件,当计算结果为真时停止。例如,表达式为
$1.a+$2.b>100
,若执行语句1返回 m 条结果,执行语句 2 返回 n 条结果,则会进行 m * n 次计算,计算过程中当结果满足 $1.a+$2.b>100
为真时停止或计算超过1000次停止。超过1000次仍未满足触发条件时,认为本次判断结果为假,不触发告警。示例
示例1:【日志主题】当近5分钟出现 error 级别日志时触发告警
监控对象:日志主题
执行语句:
level:error
查询时间范围:近5分钟
触发条件:执行语句1的结果条数大于0
$1.
__QUERYCOUNT__>0
示例2: 【日志主题】当某 VIP 用户(uid:10001)的请求平均延时大于10s 时触发告警
监控对象:日志主题
执行语句:
uid:
10001| select avg(request_time) as latency
查询时间范围:近5分钟
触发条件:执行语句1的 latency 大于10
$1.latency>10
示例3: 【指标主题】文件系统空间占用率大于 50% 时触发告警
监控对象:指标主题
执行语句:
filesystem_usage_pct > 0.5
触发条件:执行语句1的结果条数大于0
$1.__QUERYCOUNT__>0
__QUERYCOUNT__
为系统预置变量,表示执行语句的结果条数。执行语句中已经通过> 0.5
对指标进行了过滤,所以只要执行语句的结果条数大于 0 就需触发告警。