夜莺-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

正則規則匹配

運算 說明 示例
matches 用於檢查一個字符串是否符合給定的正則表達式,返回 true 或 false 。如果符合返回 True,否則為 False。 expr:$A matches $B
data:map[string]interface{}{"$.A": “123”, “$.B”: “^[0-9]+$”}
expected: true

值範圍區間

運算 說明 示例
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