告警条件表达式语法

日志服务根据告警条件表达式的执行结果来判断是否产生告警。

在判断告警条件表达式的执行结果时,您查询语句的执行结果将作为输入,日志字段作为变量,一旦条件为真则触发告警。

限制说明

告警条件表达式相关限制说明如下所示:

  • 负数需要使用括号,如 x+(-100)<100。

  • 数值类型都被当成64位浮点数,如果使用比较操作(例如等于)可能存在误差。

  • 变量只能包含字母和数字,且首字母必须是字母。

  • 表达式长度为1~128个字符。

  • 组合求值时最多计算1000种组合,如果没有找到结果为真的组合,则视为false。

  • 最多只支持三个查询。

  • 当且仅当表达式的值为true时,才会触发告警。例如100+100,计算结果为200,不会触发告警。

  • true、false、美元符号($)和英文句点(.)是保留词,不能作为变量使用。

基础语法

告警条件表达式支持如下语法类型。

语法类型

说明

示例

基础运算符

支持加减乘除、取模运算符,如下所示:

+-*/%

  • 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(foo, 'hello')返回true则表示foo中包含hello子串。

contains(foo, 'hello')

多个结果组合求值

  • 语法

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

  • 表达式求值

    在多个查询结果返回时,根据表达式的变量来判断需要使用哪些结果求值。例如您配置了三个查询,分别返回了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类型运算。

逻辑运算:

与(&&)、或(||)

不支持对查询结果字段直接应用该运算符,左右值必须分别为子运算式,且运算结果为布尔值。

取反前缀(!)

不支持对查询结果字段直接应用该运算符,被取反的值必须为子运算式,且运算结果为布尔值。

字符串查找(contains)

左右值转string类型运算。

不支持。

左右值按string类型运算。

括号()

决定运算结合顺序与优先级。

示例

  • 示例1:如果1天(相对)内任务成功率低于90%且延时超过60秒则产生告警,告警表达式如下图所示。示例1

  • 示例2:如果15分钟内状态码500出现10次则产生告警,告警表达式如下图所示。示例2

  • 示例3:如果1小时内加工速率低于1000条则产生告警,告警表达式如下图所示。示例3