告警监控规则根据评估表达式的执行结果来判断是否满足触发告警条件,以及评估动态告警严重度。您查询语句的执行结果将作为输入,集合操作结果的字段作为变量,当评估表达式条件为真且符合连续触发阈值配置时,则触发告警。本文介绍评估表达式的使用方法。

限制说明

告警监控规则的评估表达式相关限制说明如下所示:
  • 负数使用括号包裹,例如x+(-100)<100
  • 数值类型都被转换为64位浮点数,如果使用比较操作(例如等于)可能存在误差。
  • 变量名只能包含字母和数字,且必须以字母开头。
  • 评估表达式长度为1~128个字符。
  • 仅当评估表达式的值为true且满足连续触发阈值时,才会触发告警。例如评估表达式为100+100,计算结果为200,由于其结果是数字不是true,故不会触发告警。
  • 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')
特殊字段名称 字段名称为结果集中的字段名称,建议使用英文字符串,不推荐使用纯数字、特殊符号(例如%)。

如果字段名称为纯数字或者含有特殊符号,需使用英文中括号包裹。

  • [5xx比例(%)] > 20
  • [404] > 20

对集合操作结果进行评估

日志服务支持3个集合关联监控以及评估集合操作结果。更多信息,请参见多集合操作机制

您可以在评估表达式中使用动态变量。更多信息,请参见使用评估表达式设置触发条件

运算方式

说明
  • Number为64位浮点数类型。
  • String常量需要使用单引号或英文双引号进行包裹,例如'String'"String"
  • 布尔值包括true和false。
运算符 运算方式
变量与变量运算 非String常量与变量运算 String常量与变量运算
四则运算(+-*/%) 左右值转Number后运算。 左右值转Number后运算。 不支持。
比较运算:

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

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

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

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

与(&&)、或(||)

左右值必须为子运算式,且运算结果为布尔值。例如,评估表达式为$0.success_ratio < 90 && $1.平均响应时间 > 60 左右值必须为子运算式,且运算结果为布尔值。例如,评估表达式为$0.success_ratio < 90 && $1.平均响应时间 > 60 左右值必须为子运算式,且运算结果为布尔值。例如,评估表达式为$0.success_ratio < 90 && $1.平均响应时间 > 60
取反前缀(!) 被取反的值必须为子运算式,且运算结果为布尔值。例如,评估表达式为!($0.success_ratio < 90)

不支持对集合操作结果的字段直接使用该运算符。

被取反的值必须为子运算式,且运算结果为布尔值。例如,评估表达式为!($0.success_ratio < 90)

不支持对集合操作结果的字段直接使用该运算符。

被取反的值必须为子运算式,且运算结果为布尔值。例如,评估表达式为!($0.success_ratio < 90)

不支持对集合操作结果的字段直接使用该运算符。

字符串查找(contains) 左右值转String类型运算。 不支持。 左右值按String类型运算。
括号() 决定运算结合顺序与优先级。 决定运算结合顺序与优先级。 决定运算结合顺序与优先级。

示例

  • 示例1:如果15分钟(相对)内请求成功率低于90%且平均响应时间高于60s则产生告警,告警评估表达式为$0.success_ratio < 90 && $1.平均响应时间\(s\) > 60,如下图所示。示例1
  • 示例2:如果15分钟内状态码500出现10次则产生告警,告警评估表达式为status == 500 && total > 10,如下图所示。示例2