触发条件表达式

最近更新时间:2024-08-23 10:01:01

我的收藏
触发条件表达式用于判断是否触发告警。将执行语句结果作为触发表达式的输入变量,当表达式判断结果为真时触发告警。

语法说明

运算符
说明
示例
$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 就需触发告警。