触发条件表达式用于判断是否触发告警。将执行语句结果作为触发表达式的输入变量,当表达式判断结果为真时触发告警。
语法说明
| 运算符 | 说明 | 示例 |
|---|---|---|
| $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
- 执行语句1为:
- 一个告警策略中可以设置多个执行语句(最多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