触发条件表达式

最近更新时间: 2026-03-13 09:03:00

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

语法说明

运算符 说明 示例
$N.keyname 引用执行语句的结果,N为对应的执行语句编号,keyname预览结果中的字段名
注意:keyname 首字符必须是字母,可以包含字母、数字、下划线,如包含特殊字符,请使用 AS 语法 对分析结果设置别名
$1.ErrCount
+ 求和运算符 $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 :结果计算为“真”,触发告警
  • $N.keyname 中的keyname 为执行语句结果中的字段名(首字符必须是字母,可以包含字母、数字、下划线)。例如:
    • 执行语句1为:level:error | select count(*) AS ErrCount
    • 执行语句结果中的ErrCount 可作为触发条件表达式中的 keyname,触发条件可写为 $1.ErrCount>10
  • 一个告警策略中可以设置多个执行语句(最多3个),每个执行语句有编号(从1开始依次递增),例如 $1.key1 引用编号为1的执行语句中的key1字段, $2.key2 引用编号为2的执行语句中的key2字段。
  • 当执行语句返回多个结果时,会根据返回结果依次计算1000次,判断其是否满足触发条件,当计算结果为真时停止。例如,表达式为 $1.a+$2.b>100,若执行语句1返回 m 条结果,执行语句 2 返回 n 条结果,则会进行 m * n 次计算,计算过程中当结果满足 $1.a+$2.b>100 为真时停止或计算超过1000次停止。超过1000次仍未满足触发条件时,认为本次判断结果为假,不触发告警。

示例

示例1:当近5分钟出现 error 级别日志时触发告警

执行语句:

level:error | select count(*) AS ErrCount

查询时间范围:近5分钟
触发条件:

$1.ErrCount>0

示例2:当近5分钟 5xx 状态码出现10次时触发告警

执行语句:

status:500 | select count(*) AS Count

查询时间范围:近5分钟
触发条件:

$1.Count>10

示例3: 当某 VIP 用户(uid:10001)的请求延时大于10s时触发告警

执行语句:

uid:10001 | select avg(request_time) as latency

查询时间范围:近5分钟
触发条件:

$1.latency>10