新版grafana unified alerting支持面板内直接创建复合告警规则,通过多数据源查询、表达式组合条件、热注入逻辑及动态通知实现“所见即所告”,无需重启服务。

新版Grafana Alerting引擎(Unified Alerting)支持在面板内直接定义、编辑和启用告警规则,无需跳转到独立告警管理页,真正实现“所见即所告”。所谓“热注入复合触发逻辑”,指的是:在不中断面板展示、不重启服务的前提下,将含多条件、多数据源、带持续时长与状态判断的告警逻辑,实时绑定到具体可视化面板,并立即生效评估。关键不在“热”字本身,而在于规则结构解耦、评估独立、通知可插拔。
确保环境已启用统一告警引擎
这是所有操作的前提。旧版“Classic Alerting”不支持面板内原生创建复杂规则:
- 确认 Grafana 版本 ≥ 9.0(推荐 ≥ 10.4),且工作区参数中 unified_alerting = true、alerting = true
- 登录后进入 Alerting > Overview,若看到 “Unified Alerting is enabled” 提示,说明已就绪
- 若仍显示 Classic 模式,需在配置文件或启动参数中显式启用 unified alerting,并重启服务(云托管版如阿里云可观测 Grafana 版默认开启)
在面板中构建复合触发逻辑告警
不是简单设一个阈值,而是组合多个判断维度。以“API网关异常突增+延迟升高+错误率上升”三重叠加为例:
- 编辑目标面板 → 切换到 Alert 标签页 → 点击 Create alert rule
-
Query 区添加多个查询(支持同面板内多个数据源):
– Q1:Prometheus 查询错误率(rate(http_requests_total{status=~"5.."}[5m]) / rate(http_requests_total[5m]))
– Q2:Prometheus 查询 P95 延迟(histogram_quantile(0.95, sum by (le) (rate(http_request_duration_seconds_bucket[5m]))))
– Q3:MySQL 查询最近1分钟失败订单数(需已配置 MySQL 数据源,SQL 示例:SELECT COUNT(*) FROM orders WHERE status = 'failed' AND create_time > NOW() - INTERVAL 1 MINUTE) -
Condition 使用表达式语言组合判断:
Q1 > 0.05 AND Q2 > 2.0 AND Q3 > 10(注意:Q1/Q2/Q3 是你在 Query 中定义的引用别名) - Evaluation group 设为每 1 分钟执行一次;For 设为 “3m”,表示该复合条件需连续满足 3 分钟才真正触发告警实例
- 勾选 Enable this rule 后保存,规则即刻开始调度评估——这就是“热注入”:面板未刷新、图表持续渲染,后台已同步运行新逻辑
绑定多通道与动态上下文通知
告警触发后,通知内容需反映复合逻辑的当前状态,而非单一指标快照:
- 在 Contact points 中预先配置好钉钉、Webhook、邮件等渠道(如名称为 DingTalk-Prod-OnCall)
- 在告警规则的 Notifications 区,选择该渠道,并在 Annotations 中写入动态描述:
summary: "API网关三重异常:错误率{{ $values.Q1 | humanizePercentage }},P95延迟{{ $values.Q2 | humanizeDuration }},失败订单{{ $values.Q3 }}" - 利用 Labels 实现自动分组与路由:
service: "api-gateway", severity: "{{ if gt $values.Q1 0.1 }}critical{{ else }}warning{{ end }}" - 若对接 ARMS 或 EventBridge,Webhook URL 需指向其集成地址;通知内容会自动携带所有 $values 和 $labels,供下游做聚合/降噪/升级
验证与迭代无需停服
规则上线后,调试和优化全程在线完成:
- 进入 Alerting > Alert rules,找到刚创建的规则,点击右侧 Test Rule 可手动触发一次评估(模拟当前数据状态)
- 查看 Alerting > Alerts 页面,筛选该规则,观察 “Last evaluation” 时间戳与 “State”(firing/pending/resolved)是否符合预期
- 直接返回面板 → 编辑 → Alert 标签页 → 修改 Condition 表达式或 For 时长 → Save,修改秒级生效,历史告警实例不受影响
- 若某查询临时不可用(如 MySQL 连接超时),引擎会标记该子查询为 “No data”,但不影响其他查询继续评估——复合逻辑具备容错性











