触发条件表达式
最近更新时间: 2025-10-11 18: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时,触发告警。