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

MySQL 表达式语法

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