告警支持用户配置条件表达式,根据表达式的结果是否为真来判断是否满足告警条件。

在判断表达式是否为真时,用户配置的查询的执行结果将作为输入,日志字段作为变量,一旦条件为真则触发告警并返回。

限制说明

  • 负数需要使用括号,如 x+(-100)<100。
  • 数值类型都被当成64位浮点数,如果使用比较操作如等于可能存在误差。
  • 变量只能包含字母和数字,且首字母必须是字母。
  • 表达式长度最多支持128个字符。
  • 组合求值时最多只会计算1000种组合,如果没有找到结果为真的组合,则视为false。
  • 最多只支持三个查询。
  • 当且仅当表达式的值为布尔值true的时候,才会触发告警。如 100+100,计算结果为200,不会触发告警。
  • truefalse$.是保留字,不能作为变量使用。

基础语法

告警条件表达式支持以下语法类型。
语法类型 说明 示例
基础运算符 支持加减乘除、取模运算符,即: +-*/%。

x*100+y>200

x%10>5

比较运算符 支持大于(>)、大于等于(>=)、小于(<)、小于等于(<=)、等于(==)、不等于(!=)、正则匹配 (=~)、 正则不匹配(!~)8种比较运算符。
说明
  • 斜杠需要转义。
  • 正则表达式目前支持符合RE2规范的语法。

x >= 0

x < 100

x <= 100

x == 100

x == "foo"

正则匹配:x =~ "\\w+"

逻辑操作符 支持逻辑操作符:与(&&)、或(||)。

x >=0&&y <=100

x > 0 || y > 0

取反前缀操作 支持取反前缀操作(!)。

!(a < 1 && a > 100)

数值常量 支持数值常量,作为64位浮点数处理。

x > 100

字符串常量 支持字符串常量,形式为单引号引起来的字符串。如:'string'。

foo == 'string'

布尔常量 支持布尔常量:true和false。

(x > 100) == true

括号 支持使用括号改变计算的优先级。

x*(y+100)>100

contains函数 支持使用contains函数判断是否包含子串, 如 contains(field, 'xxxx') 返回true则表示 field 包含 xxxx 这个子串。

contains(foo, 'hello')

多个结果集组合求值

  • 语法

    告警支持用户关联多个图表的查询,在使用多个查询结果进行计算时,变量需要加上特定前缀以区分从哪个结果集中获取对应的变量值,格式为 $N.fieldname,其中N为查询的编号。目前支持用户最多配置三个查询,因此N的取值范围为[0,2]。如$0.foo表示第1个查询的foo字段。当仅有一个查询时,前缀可以省略。
    说明 如何查看查询的编号

    在告警配置步骤中,关联图表一栏显示了各个图表/查询分析语句的编号。其中第一个图表/查询分析语句编号为0,第二个图表/查询分析语句编号为1,第三个图表/查询分析语句编号为2。



  • 表达式求值

    在多个查询结果返回时,根据表达式的变量来判断需要使用哪些结果集求值。例如用户配置了三个查询,每个查询分别返回了x,y,z 条结果。而用户配置的表达式为$0.foo > 100 && $1.bar < 100,则说明判断表达式的值只需要使用前两个结果集,进行x*y次求值直到某次求值返回true,或者达到计算次数上限后直接返回false,目前上限为1000次。

运算方式

说明
  • number为64位浮点数类型。
  • string常量需要以单引号或英文双引号包含起来,如'string'、“string”。
  • 布尔值包括true和false。
运算符 运算方式
变量与变量运算 非string常量与变量运算 string常量与变量运算
四则运算(+-*/%) 左右值转number后运算。 不支持。
比较运算:

大于(>)、大于等于(>=)、小于(<)、小于等于(<=)、等于(==)、不等于(!=)

按照以下优先级决定运算顺序:
  1. 左右值转number后按照数值序运算,如转换失败则执行下一优先级的运算。
  2. 左右值按string类型字典序运算。
左右值转number后运算(数值序)。 左右值按string类型运算(字典序)。
正则是否匹配:

正则匹配 (=~)、 正则不匹配(!~)

左右值按string类型运算。 不支持。 左右值按string类型运算。
逻辑运算:

与(&&)、或(||)

不支持对查询结果字段直接应用该运算符,左右值必须分别为子运算式,且运算结果为bool类型。
取反前缀(!) 不支持对查询结果字段直接应用该运算符,被取反的值必须为子运算式,且运算结果为bool类型。
字符串查找(contains) 左右值转string类型运算。 不支持。 左右值按string类型运算。
括号() 决定运算结合顺序与优先级。