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