2. Grafana OnCall 架构简介:核心组件、数据流与告警生命周期

在落地告警降噪规则之前,必须理解 Grafana OnCall 的架构骨架。OnCall 并非一个孤立的告警接收器,而是一套围绕 路由、编排、通知 构建的事件驱动系统。本章将拆解其三大核心组件(Integration、Escalation Chain、Schedule),并串联完整的告警生命周期。

2.1 三大核心组件

Grafana OnCall 的架构可以抽象为三个层次:接入层(Integration)、编排层(Escalation Chain)、通知层(Schedule + 用户)。三者通过 Alert Group 对象串联。

组件 职责 类比 关键属性
Integration 接收外部监控系统(Prometheus、Grafana、Zabbix 等)的告警 Webhook,并将其标准化为 OnCall 内部的 Alert 对象。 “翻译官” + “路由器” 类型(Grafana、Prometheus、Webhook)、路由规则、模板(Templates)
Escalation Chain 定义告警从产生到关闭的 处理步骤序列,包括通知谁、等待多久、是否升级、是否自动执行动作。 “剧本” 或 “流程引擎” 步骤类型(Notify、Wait、Resolve、Trigger Action)、超时、升级策略
Schedule 管理值班人员的 时间轮换,决定在特定时间点哪个用户或团队是“当前责任人”。 “值班表” 轮换类型(单日、多日、自定义)、覆盖(Override)、层级(Layer)
架构要点: Integration 负责“入”,Escalation Chain 负责“流”,Schedule 负责“人”。降噪规则主要作用于 Integration 和 Escalation Chain 之间,控制哪些 Alert 能进入编排流程。

2.2 告警生命周期与数据流

一个告警从外部系统触发到最终关闭,在 OnCall 内部经历以下阶段。理解这个生命周期是配置降噪规则的前提。

  1. Ingestion(接收):外部系统通过 Webhook 发送告警到 Integration 的端点。
  2. Normalization(标准化):Integration 根据模板将原始 Payload 解析为 OnCall 的 Alert 对象,包含标题、描述、严重级别、标签等。
  3. Grouping(分组):根据 分组规则(基于标签或内容指纹)将相似的 Alert 合并为 Alert Group。这是降噪的第一道关卡。
  4. Routing(路由):Alert Group 根据 Integration 的 路由规则 被分配到指定的 Escalation Chain。
  5. Escalation(编排):Escalation Chain 按步骤执行:查找当前 Schedule 确定责任人 → 发送通知(电话、短信、Slack、邮件)→ 等待确认 → 超时后升级到下一级。
  6. Resolution(关闭):责任人确认(Acknowledge)或外部系统发送恢复告警后,Alert Group 被关闭。
Grafana OnCall 告警生命周期与数据流 1. 接收 Ingestion 2. 标准化 Normalization 3. 分组 Grouping 4. 路由 Routing 5. 编排 Escalation 6. 关闭 Resolution 💡 降噪规则作用位置: 分组(Grouping)和路由(Routing)阶段是告警降噪的核心战场。通过标签指纹合并重复告警,通过路由规则将低优先级告警直接丢弃或路由到静默通道。

2.3 核心组件交互关系

Integration、Escalation Chain、Schedule 三者并非孤立运行,而是通过以下方式协同工作:

  • Integration → Escalation Chain:每个 Integration 必须绑定一个默认的 Escalation Chain。路由规则可以覆盖此默认绑定,实现“不同标签走不同流程”。
  • Escalation Chain → Schedule:Escalation Chain 中的 Notify 步骤会引用一个 Schedule,从而确定当前应该通知谁。如果没有 Schedule,则通知固定用户或团队。
  • Schedule → User:Schedule 的轮换层最终指向具体的 OnCall 用户(User),用户配置了个人通知方式(电话、短信、Slack 等)。
Grafana OnCall 核心组件交互关系 Integration 接入层 / 路由 Escalation Chain 编排层 / 流程 Schedule 通知层 / 值班 绑定 引用 🔗 交互要点: • Integration 通过路由规则决定 Alert Group 进入哪个 Escalation Chain。 • Escalation Chain 的 Notify 步骤查询 Schedule,获取当前值班人列表。

2.4 告警降噪在架构中的位置

从架构视角看,告警降噪并非一个独立模块,而是贯穿 分组(Grouping) 和 路由(Routing) 两个阶段的策略组合:

降噪策略 作用阶段 实现方式 典型场景
分组降噪 Grouping 基于标签模板(如 alertname、instance)自动合并相同指纹的告警。 Prometheus 中同一台机器的 CPU 持续抖动,只产生一个 Alert Group。
路由降噪 Routing 根据告警标签(如 severity=info)将低优先级告警路由到“仅记录”的 Escalation Chain,不触发通知。 开发环境的磁盘告警只写入日志,不呼叫值班人。
抑制降噪 Escalation 在 Escalation Chain 中配置 Wait 步骤,等待一段时间后检查是否已恢复,避免短时抖动触发通知。 网络闪断 30 秒内恢复,不产生告警通知。
工程落地提示: 在部署 OnCall 初期,建议先配置 分组降噪 和 路由降噪,它们对告警量的削减效果最明显(通常可减少 60%-80% 的 Alert Group 数量)。抑制降噪需要结合业务抖动窗口谨慎配置,避免漏过真实故障。