基于告警聚合计数实现集群级告警升级——夜莺 MySQL 数据源实践
巴辉特
2025-12-31 15:12:00
背景与需求
假设有一个 Kubernetes 集群,里边的机器数量比较多,偶尔有个机器挂了只做低级别告警(比如只发邮件提醒),如果超过 50 台机器都告警了,则要产生一条高级别告警(可能要打电话、发短信提醒)。
实现思路
夜莺已经有个 alert_cur_event 数据库表,存储了当前所有活跃(未恢复)的告警事件,我们可以通过 SQL 语句查询出符合条件的告警数量。数量超过一定数量就告警。
告警规则大家习惯针对 Prometheus 数据源写 PromQL 表达式,但夜莺也支持 MySQL 数据源,可以直接写 SQL 语句。本文针对这个场景,顺便演示如何用 MySQL 数据源实现上述需求。
具体实现
1. 创建 MySQL 数据源

在数据源管理,创建一个 MySQL 数据源,填写好连接、认证信息,指向夜莺所用的 MySQL 测试通过后保存。(建议单独分配一个低权限的只读账号,我这里图省事,直接使用 root 账号演示了)
2. 创建告警规则

关键配置解释如下:
- 数据源类型:选择 MySQL
- 数据源筛选:选择刚才创建的那个夜莺 MySQL 数据源
- 查询条件:即查询 SQL 语句:
select count(*) cnt from n9e_v6.alert_cur_event where rule_id=73;这里的 73 是我测试用的某个告警规则 ID,大家可以根据实际情况修改 - 值字段:选择 cnt,即 SQL 语句中返回用于做后续阈值判定的列名
- 阈值判断:使用简单模式即可,选择大于(
>),填写阈值。我这里故意填写为 1 是方便快速触发测试,请根据实际需求填写
3. 测试效果
正常产生了告警事件:

其中触发时的值为 3:实际就是 ID 为 73 的告警规则当前有 3 个活跃告警事件。