夜莺-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
参考资料

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: 訂單持續時間(分鐘)

mysql表達式001

2 算數運算

2.1 單查詢條件運算

計算最近3天的支付成功訂單的平均金額,如果平均金額小於60觸發報警。

$A.avg_successful_payments < 60

mysql表達式002

2.2 多查詢條件優先級運算

計算近3天取消訂單金額與總金額占比,如果超過5%觸發報警。

$B.total_canceled_orders / ($A.total_successful_payments + $B.total_canceled_orders) * 100 > 5

mysql表達式003

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

mysql表達式004

4. 邏輯運算符

計算昨日取消訂單量大於前日取消訂單量並且昨日支付訂單占比前日支付訂單低於60%,觸發報警。

$A.failed_orders > $B.failed_orders and $A.successful_orders / $B.successful_orders > 0.6

mysql表達式005

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)

mysql表達式006

注意:in 和 not in 是用於檢查元素是否存在於數組中,不是模糊匹配。

6. 字符串包含

計算司機姓名包含"Driver9"且訂單總金額大於3000,觸發報警。(關鍵詞可以是一個 error code)

$A.driver_name contains "Driver9" && $A.total_order_amount > 3000

mysql表達式007

7. 正則規則匹配

計算訂單異常狀態符合匹配級所有別異常正則且count值大於55,觸發報警。

$A.abnormal_status matches ".* Level Abnormality$" && $A.total_counts > 55

mysql表達式008

8. 值範圍區間

計算訂單金額在50-100區間的單數大於1的,觸發告警。

$A.total_counts >1 && between($A.order_amount, [50,100])

mysql表達式009

注意:between 和 not between 適用於非 string 類型值。

9. 時間比對

計算超過60s未更新數據,觸發告警。

now().Unix() - $A.create_at >60

mysql表達式010

create_at 是數據的時間戳字段,如下圖所示。

mysql表達式011

注意:時間戳只支持加減運算。

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