1. 說明
本文主要介紹告警規則中表達式模式語法如何與 MySQL 告警相結合。你可以根據本文的使用場景介紹,體會語法與業務結合的深度用法。
1.1 閱讀前必讀
在閱讀學習本文前,需要了解表達式模式的基本語法。請參考鏈接:表達式語法
1.2 使用場景
本文將以打車訂單為例進行報警展示說明,示例數據庫首先創建了一個taxi_service
的數據庫,數據庫裡面創建了一個orders
表,表字段具體含義如下:
order_id: 訂單ID
passenger_name: 乘客姓名
driver_name: 司機姓名
status:訂單的狀態,可以是以下幾種:
Payment Successful
(支付成功)Order Canceled
(訂單取消)
abnormal_status:訂單的異常狀態
No Abnormality
(無異常)Low Level Abnormality
(低級別異常)Medium Level Abnormality
(中級別異常)High Level Abnormality
(高級別異常)
created_at: 創建時間
updated_at: 更新時間
completed_at: 完成時間
order_amount: 訂單金額
order_duration: 訂單持續時間(分鐘)
2 算數運算
2.1 單查詢條件運算
計算最近3天的支付成功訂單的平均金額,如果平均金額小於60觸發報警。
$A.avg_successful_payments < 60
2.2 多查詢條件優先級運算
計算近3天取消訂單金額與總金額占比,如果超過5%觸發報警。
$B.total_canceled_orders / ($A.total_successful_payments + $B.total_canceled_orders) * 100 > 5
3. 關係運算符
計算近6小時訂單無異常狀態且訂單取消金額大於100或近6小時訂單高級別異常狀態且訂單取消金額大於100,觸發報警。
$A.status == 'Order Canceled' && $A.abnormal_status == "No Abnormality" && $A.total_order_amount > 100 || $A.status == 'Order Canceled' && $A.abnormal_status == "High Level Abnormality" && $A.total_order_amount > 100
4. 邏輯運算符
計算昨日取消訂單量大於前日取消訂單量並且昨日支付訂單占比前日支付訂單低於60%,觸發報警。
$A.failed_orders > $B.failed_orders and $A.successful_orders / $B.successful_orders > 0.6
5. 元素值比對
計算 Driver13 和 Driver33 兩位司機,訂單金額大於1000 或 訂單數大於50,觸發報警。
($A.driver_name in ["Driver13","Driver33"] && $A.total_order_amount > 1000) || ($A.driver_name in ["Driver13","Driver33"] && $A.counts > 50)
注意:in 和 not in 是用於檢查元素是否存在於數組中,不是模糊匹配。
6. 字符串包含
計算司機姓名包含"Driver9"且訂單總金額大於3000,觸發報警。(關鍵詞可以是一個 error code)
$A.driver_name contains "Driver9" && $A.total_order_amount > 3000
7. 正則規則匹配
計算訂單異常狀態符合匹配級所有別異常正則且count值大於55,觸發報警。
$A.abnormal_status matches ".* Level Abnormality$" && $A.total_counts > 55
8. 值範圍區間
計算訂單金額在50-100區間的單數大於1的,觸發告警。
$A.total_counts >1 && between($A.order_amount, [50,100])
注意:between 和 not between 適用於非 string 類型值。
9. 時間比對
計算超過60s未更新數據,觸發告警。
now().Unix() - $A.create_at >60
create_at 是數據的時間戳字段,如下圖所示。
注意:時間戳只支持加減運算。