MySQL 查询
夜莺( Nightingale )MySQL 日志告警规则
场景一:配置MySQL单条件告警规则
值字段
在查询条件 SQL 语句中,选择你想要的列名作为查询结果的值字段。如下图所示,我将 count(*) 起个别名 count ,将别名 count 作为值字段取 A 这个查询条件的结果。

标签字段
使用 GROUP BY 字段作为标签字段,告警将以此字段进行分组告警。
场景二:将过滤字段放在 where 进行过滤
如下面的查询语句:计算 severity 等级为 1、2、3的活跃告警数量。
SELECT COUNT(*) AS count FROM n9e_v6.alert_cur_event WHERE severity IN (1,2,3);

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

场景三:将过滤字段放在 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;

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


场景四:多查询条件表达式模式
配置多条查询条件 sql ,并将两个查询条件的结果进行阈值告警。


概述
MySQL 数据源告警查询直接用 SQL 查业务库或运维库做告警判定 — 适合业务实时监控、数据完整性告警、异常状态扫描等场景。
字段说明
| 字段 | 必填 | 说明 |
|---|---|---|
| 数据源 | 是 | 已配置的 MySQL 数据源 |
| SQL | 是 | 查询语句,支持模板变量(如 {{time_now}}、{{time_range}}) |
| 值字段 | 是 | SQL 结果的哪一列作为 $A.xxx 引用,用于告警判定 |
| 标签字段 | 否 | SQL 结果的哪些列作为告警事件标签,用于通知模板引用 |
| 执行频率 | 是 | 多久跑一次 SQL,建议 ≥ 1 分钟避免压力 |
操作步骤
- 在告警规则编辑页,“查询条件"区添加
$A查询; - 数据源类型选
MySQL、选具体数据源; - 写 SQL(如
SELECT count(*) AS err FROM orders WHERE status='failed' AND created_at > NOW() - INTERVAL 5 MINUTE); - 值字段:选
err; - 标签字段:可选(如要做分组告警,选业务维度列);
- “告警条件"写表达式:
$A.err > 10; - 设置执行频率 + 持续时长。
常见问题
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 分钟;
- 复杂查询用记录规则预聚合(如果可以的话);
- 用专用账号 + 单独的资源池隔离。