MySQL 查询

夜莺( Nightingale )MySQL 日志告警规则

场景一:配置MySQL单条件告警规则

值字段

在查询条件 SQL 语句中,选择你想要的列名作为查询结果的值字段。如下图所示,我将 count(*) 起个别名 count ,将别名 count 作为值字段取 A 这个查询条件的结果。

mysql001

标签字段

使用 GROUP BY 字段作为标签字段,告警将以此字段进行分组告警。

场景二:将过滤字段放在 where 进行过滤

如下面的查询语句:计算 severity 等级为 1、2、3的活跃告警数量。

SELECT COUNT(*) AS count FROM n9e_v6.alert_cur_event WHERE severity IN (1,2,3);

mysql002

最终产生告警时,只会展现 count 值。

mysql003

场景三:将过滤字段放在 where 进行过滤并分组告警

查询条件设置为以 severity 分组,并将 severity 设定为标签字段

SELECT severity as severity,COUNT(*) AS count FROM n9e_v6.alert_cur_event WHERE severity IN (1,2,3) GROUP BY severity;

mysql004

通过报警时间与数据预览对比发现,使用 severity 分组后,告警会根据标签字段进行分组告警。

mysql005

mysql006

场景四:多查询条件表达式模式

配置多条查询条件 sql ,并将两个查询条件的结果进行阈值告警。

mysql007

mysql008

概述

MySQL 数据源告警查询直接用 SQL 查业务库或运维库做告警判定 — 适合业务实时监控数据完整性告警异常状态扫描等场景。

字段说明

字段 必填 说明
数据源 已配置的 MySQL 数据源
SQL 查询语句,支持模板变量(如 {{time_now}}{{time_range}}
值字段 SQL 结果的哪一列作为 $A.xxx 引用,用于告警判定
标签字段 SQL 结果的哪些列作为告警事件标签,用于通知模板引用
执行频率 多久跑一次 SQL,建议 ≥ 1 分钟避免压力

操作步骤

  1. 在告警规则编辑页,“查询条件"区添加 $A 查询;
  2. 数据源类型选 MySQL、选具体数据源;
  3. 写 SQL(如 SELECT count(*) AS err FROM orders WHERE status='failed' AND created_at > NOW() - INTERVAL 5 MINUTE);
  4. 值字段:选 err
  5. 标签字段:可选(如要做分组告警,选业务维度列);
  6. “告警条件"写表达式:$A.err > 10
  7. 设置执行频率 + 持续时长。

常见问题

Q1:SQL 返回多行结果会怎样?

A:每行作为独立 series,逐行判定告警。返回 10 行就最多产生 10 条告警事件。

Q2:模板变量怎么用?

A:在 SQL 里用 {{time_now}} 引用当前时间戳,{{time_range}} 引用查询时间范围。详见 告警表达式语法

Q3:能用 SQL 跨库查询吗?

A:单个 MySQL 数据源只对应一个连接,跨库查询用 database.table.column 格式(账号要有跨库权限)。跨数据源 join 不直接支持 — 用 $A / $B 多查询表达式合成。

Q4:业务库压力太大怎么办?

A:

  • 只读副本而不是主库;
  • SQL 加 LIMIT 限制返回行数;
  • 执行频率从默认 15s 调到 1-5 分钟;
  • 复杂查询用记录规则预聚合(如果可以的话);
  • 用专用账号 + 单独的资源池隔离。

参考资料

更新时间 2025-03-13

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云