触发条件表达式

最近更新时间: 2024-10-17 17:10: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"
contains(a,"b") 字符串函数,contains(a,"b") 判断字符串a中是否包含b,若为真则返回true contains(loginfo,"error")
  • 只有表达式判断为真时,才会触发告警;例如, $1.a+$1.b 计算结果为100,不会触发,$1.a+$1.b>=100则会触发;

  • $N.keyname 中的keyname 为查询分析结果后的字段名(首字符必须是字母,可以包含字母、数字、下滑线);例如,level:error | select count(*) AS errCounterrCount 可直接作为触发条件表达式中的keyname;若字段名含有特殊字符,需要用[]将引用变量括起来,例如[$1.count(*)]推荐在分析语句中使用 AS 分析语句 对分析结果字段名设置别名

  • 一个告警策略中可以设置多个监控对象(最多3个),每个监控对象有编号标识(从1开始以此递增),例如 $1.key1 引用编号为1的查询中的key1字段名, $2.key2 引用编号为2的查询中的key2字段名;

  • 当查询分析结果返回多个值时,会根据返回结果依次计算1000次,当计算结果为 true 时停止;例如表达式为 $1.a+$2.b>100,若分析1返回 m 条结果,分析2返回 n 条结果,则会进行 m*n 次计算,计算过程中当结果满足$1.a+$2.b>100 为真时停止或计算超过1000次停止。

表达式示例

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

  • 执行语句:level:error | select count(*) as ErrCount,表示统计周期内 level 字段值为 error 的日志数量,统计结果记为 ErrCount

  • 触发条件:$1.ErrCount>0,表示引用 ErrCount 变量值,当大于0时,触发告警。

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

  • 查询语句:status:>500 | select count(*) as count,表示统计周期内 status 字段值大于500的日志数量,统计结果记为 count

  • 触发条件:$1.count>10,表示引用 count 变量值,当大于10时,触发告警。

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

  • 查询语句:uid:10001 | select uid,avg(request_time) as latency group by uid,表示统计周期内编号为10001的用户的请求延时,请求延时记为 latency

  • 触发条件:$1.latency>10,表示引用 latency 变量值,当大于10时,触发告警。