基于告警聚合计数实现集群级告警升级——夜莺 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 个活跃告警事件。

标签: 告警
快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云
OpenSource
开源版
Flashcat
Flashcat
Flashduty
Flashduty