触发条件表达式
最近更新时间: 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 errCount
,errCount
可直接作为触发条件表达式中的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时,触发告警。