夜莺-Nightingale
夜莺V7
项目介绍 功能概览
部署升级 部署升级
数据接入 数据接入
告警管理 告警管理
数据查看 数据查看
功能介绍 功能介绍
API FAQ
夜莺V6
项目介绍 架构介绍
快速开始 快速开始
黄埔营
安装部署 安装部署
升级
采集器 采集器
使用手册 使用手册
API API
数据库表结构 数据库表结构
FAQ FAQ
开源生态
Prometheus
版权声明
第1章:天降奇兵 第1章:天降奇兵
第2章:探索PromQL 第2章:探索PromQL
第3章:Prometheus告警处理 第3章:Prometheus告警处理
第4章:Exporter详解 第4章:Exporter详解
第5章:数据与可视化 第5章:数据与可视化
第6章:集群与高可用 第6章:集群与高可用
第7章:Prometheus服务发现 第7章:Prometheus服务发现
第8章:监控Kubernetes 第8章:监控Kubernetes
第9章:Prometheus Operator 第9章:Prometheus Operator
参考资料

告警表达式语法

告警规则表达式语法本质是时序指标数据之间的运算,运算逻辑是寻找相同的 Label(数据标签)的指标值进行运算,不相同的 Label(数据标签)的指标值无法进行运算,所以表达式语法在做运算时 Label(数据标签) 需要保持一致。

举例

在时序指标数据中,每个时间序列都由指标名称(Metric Name)和数据标签(Label)来唯一标识,格式为<metric name>{<label name>=<label value>, …}

在配置告警时,辅助配置中有两个很重要的配置,值字段和标签字段。

值字段:指定查询结果的某列作为查询条件的结果,可以理解为指标名称(Metric Name)。

标签字段:指定查询结果的那些列作为值字段的标签名和标签值,也就是标签(Label)。

告警表达式001

告警表达式002

根据上图数据格式转化如下

变量 变量的值字段(Metric Name) 变量值的标签字段(Label) 转化时序数据格式
A $A.price $A.product_name A.price{product_name=} value

如果在告警配置查询统计中在增加一个 B 查询条件,且还需要 A 查询条件与 B 查询条件运算,那么 A 和 B 两个查询条件的数据标签必须一致,才可以进行运算,否则无法进行运算,下图 B 的数据标签与 A 的数据标签不一致,是无法运算的,通过字段重命名统一数据标签实现 $A 和 $B 的运算。

告警表达式003

告警表达式004

算数运算符

运算 说明 示例
+ 相加 $A + $B
- 相减 $A - $B
* 相乘 $A * $B
/ 相除 $A / $B
() 优先级 ($A - $B) * $C

系运算符

运算 说明 示例
== 检查两个值是否相等,如果相等返回 True 否则返回 False。 $A == $B
$A == 0
!= 检查两个值是否不相等,如果不相等返回 True 否则返回 False。 $A != $B
$A.count != 0
> 检查左边值是否大于右边值,如果是返回 True 否则返回 False。 $A > $B
$A > 0
< 检查左边值是否小于右边值,如果是返回 True 否则返回 False。 $A < $B
$A < 0
>= 检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。 $A >= $B
$A > 0
<= 检查左边值是否小于等于右边值,如果是返回 True 否则返回 False。 $A <= $B
$A <= 0

时间戳运算

当前时间字段 说明 示例
now().Unix() 用于比对查询数据时间戳字段与当前时间的差,Unix()时间格式只支持加减运算。 $A.timestamp - now().Unix()

逻辑运算符

运算 说明 示例
&& 逻辑 AND 运算符。 如果两边的操作数都是 True,则条件 True,否则为 False。 $A > 0 && $B < 10
|| 逻辑 OR 运算符。 如果两边的操作数有一个 True,则条件 True,否则为 False。 $A + $B >20

元素值比对

运算 说明 示例
in 用于检查元素是否存在于数组中,返回 true 或 false 。如果元素存在是 True,则条件 True,否则为 False。 expr:$A in [“admin”, “moderator”]
data:map[string]interface{}{"$.A": “admin”}
expected: true
not in 用于检查元素是否存在于数组中,返回 true 或 false 如果元素不存在是 True,则条件 True,否则为 False。 expr:$A not in [1, 2, 3]
data:map[string]interface{}{"$.A": 5}
expected: true

字符串包含与不包含

运算 说明 示例
contains 用于检查元素是否存在于数组中,返回 true 或 false 。如果元素存在是 True,则条件 True,否则为 False。 expr:$A contains $B
data: map[string]interface{}{"$.A": “hello world”, “$.B”: “world”}
expected: true
not contains 用于检查一个字符串是否不包含另一个字符串,,返回 true 或 false 。如果不包含返回 True,否则为 False。 expr: $.A contains $.B
data:map[string]interface{}{"$.A": “hello world”, “$.B”: “go”}
expected: false,

正则规则匹配

运算 说明 示例
maeches 用于检查一个字符串是否符合给定的正则表达式,返回 true 或 false 。如果符合返回 True,否则为 False。 expr:$A matches $B
data:map[string]interface{}{"$.A": “123”, “$.B”: “^[0-9]+$”}
expected: truee

值范围区间

运算 说明 示例
between 检查一个值是否在指定范围内,返回 true 或 false 。 如果在指定范围内True,否则为 False。 expr:between($.A, [100,200])
data: map[string]interface{}{"$.A": 155.0},
expected: true
not between 检查一个值是否不在指定范围内,返回 true 或 false 。 如果不在指定范围内 True,否则为 False。 expr: not between($.A, [100.3,200.3])
data: map[string]interface{}{"$.A": 155.1},
expected: false

更多参考文档: MySQL 告警表达式使用场景介绍

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云
OpenSource
开源版
Flashcat
Flashcat