2. Grafana 告警体系概述:Alerting 架构、数据源、评估组、通知策略

在深入告警降噪规则的参数化测试之前,必须理解 Grafana 告警体系的核心组件及其协作方式。Grafana Alerting 是一个独立于仪表盘的内置引擎,支持从多种数据源查询指标、定义告警条件、执行周期性评估,并通过灵活的通知策略将告警事件分发到不同的接收端。

核心认知:Grafana 告警体系采用“数据源 → 告警规则 → 评估组 → 通知策略”的流水线架构。告警降噪规则作用于评估组与通知策略之间,用于抑制、去重或聚合告警事件。

2.1 整体架构与数据流

Grafana Alerting 架构由四个主要层次组成,数据从底层数据源向上流动,最终触发通知动作。下图展示了完整的告警数据流与组件关系。

Grafana Alerting 架构与数据流 Grafana Alerting 架构与数据流 数据源层 Prometheus | Loki | Graphite | InfluxDB | CloudWatch | 自定义数据源 告警规则层 规则定义(查询表达式、阈值、条件) | 多维度标签 | 注解 评估组层 分组评估 | 独立评估间隔 | 挂起/待定状态管理 | 告警事件生成 通知策略层 路由匹配 | 接收者配置 | 分组/抑制/静默 | 降噪规则生效位置 通知接收端:Slack | Email | PagerDuty | Webhook | 钉钉 | 飞书 降噪规则作用域 评估组 → 通知策略之间
架构要点:降噪规则(Notification Policy 中的分组、抑制、静默)位于评估组层与通知策略层的交界处。评估组生成告警事件后,通知策略根据标签匹配规则对事件进行路由、分组、抑制或静默,最终决定是否发送通知以及发送到哪个接收端。

2.2 数据源(Data Sources)

数据源是告警规则的输入基础。Grafana 支持多种数据源类型,告警规则通过查询数据源获取时间序列数据或日志数据,然后与阈值进行比较。

数据源类型 典型用途 查询语言 告警适用场景
Prometheus 指标监控、Kubernetes PromQL CPU/内存/请求速率/错误率
Loki 日志聚合 LogQL 错误日志频率、特定模式匹配
Graphite 传统指标监控 Graphite Query 系统指标、业务指标
InfluxDB 时序数据库 Flux / InfluxQL IoT、应用性能监控
CloudWatch AWS 云资源 CloudWatch Metrics EC2/RDS/Lambda 等云服务告警
自定义数据源 内部系统、API 自定义查询 业务自定义指标、第三方系统
注意:数据源必须在 Grafana 中预先配置并测试连通性。告警规则使用的数据源必须支持“后端查询”模式(Server-side query),否则无法在告警引擎中执行评估。部分数据源(如某些插件)仅支持前端查询,不能用于告警。

2.3 评估组(Evaluation Groups)

评估组是告警规则的组织单元和执行调度单位。每个评估组包含一组告警规则,并拥有独立的评估间隔(Evaluation Interval)。Grafana 告警引擎会按照评估组配置的间隔,周期性地执行组内所有规则的查询和条件判断。

评估组的关键属性:

  • 名称:评估组的唯一标识,用于组织和区分不同的规则集合。
  • 评估间隔:规则执行的频率,例如 10s、30s、1m、5m。间隔越短,告警响应越快,但系统负载也越高。
  • 挂起周期(Pending Period):规则条件满足后,需要持续满足该时长才触发告警。用于避免瞬时抖动导致的误报。
  • 规则列表:组内包含的告警规则,每条规则定义查询表达式、阈值、标签和注解。

评估组的工作流程:

  1. Grafana 告警引擎按评估间隔触发评估组。
  2. 引擎并行执行组内所有规则的查询语句,从数据源获取结果。
  3. 将查询结果与规则中定义的阈值条件进行比较。
  4. 根据比较结果更新告警状态(Normal、Pending、Firing)。
  5. 状态变为 Firing 的告警生成告警事件,进入通知策略处理流程。
降噪关联:评估组是告警事件的“生产者”。降噪规则无法改变评估组内部的评估逻辑,但可以控制评估组产生的告警事件如何被聚合、抑制或静默。在参数化测试中,评估组的间隔和挂起周期会影响告警事件的产生频率,进而影响降噪规则的测试结果。

2.4 通知策略(Notification Policies)

通知策略是 Grafana 告警体系中最灵活、最复杂的组件,也是告警降噪规则的核心载体。通知策略负责将告警事件路由到正确的接收端,并在此过程中执行分组、抑制、静默等降噪操作。

通知策略的层级结构:

  • 根策略(Root Policy):每个 Grafana 实例只有一个根策略,作为所有告警事件的默认路由入口。根策略定义了默认的接收者、分组选项和降噪设置。
  • 子策略(Child Policies):在根策略下可以创建多个子策略,每个子策略通过标签匹配规则(Label Matchers)决定哪些告警事件进入该策略处理。子策略可以嵌套,形成树状路由结构。
  • 接收者(Contact Points):策略的最终目标,定义了通知发送的方式和目的地(如 Slack Webhook、Email 地址、PagerDuty 服务等)。

通知策略中的降噪机制:

降噪机制 作用 配置位置 测试关注点
分组(Grouping) 将具有相同标签值的告警事件合并为一条通知 策略的“分组选项” 分组字段、分组等待时间、分组间隔
抑制(Inhibition) 当某个告警触发时,抑制其他相关告警的通知 策略的“抑制规则” 源匹配、目标匹配、抑制条件
静默(Silences) 在指定时间段内屏蔽匹配的告警通知 独立于策略的全局静默配置 匹配标签、开始/结束时间、持续时间
定时静默(Mute Timings) 按周期性时间窗口(如周末、夜间)静默告警 策略的“静默时间” 时间范围、时区、重复周期
通知策略树与降噪机制 通知策略树与降噪机制 根策略(默认) 子策略:env=prod 子策略:severity=critical 子策略:team=platform 每个子策略可独立配置降噪机制 分组:按 alertname、severity 等标签聚合告警 抑制:高优先级告警抑制低优先级告警 | 静默:维护窗口期屏蔽通知 Slack #prod-alerts PagerDuty critical Email platform-team
参数化测试切入点:通知策略中的分组等待时间(group_wait)、分组间隔(group_interval)、重复间隔(repeat_interval)是降噪规则参数化测试的核心参数。通过调整这些参数,可以模拟不同场景下的告警聚合行为,验证降噪效果是否符合预期。

2.5 告警状态与生命周期

理解告警状态转换对于降噪测试至关重要。每个告警规则实例在其生命周期中会经历以下状态:

状态 含义 触发条件 降噪影响
Normal 正常状态,条件未满足 查询结果未超过阈值 不产生告警事件,降噪规则不参与
Pending 待定状态,条件已满足但未超过挂起周期 查询结果超过阈值,但持续时间 < 挂起周期 不产生通知,但降噪规则可提前标记
Firing 触发状态,条件持续满足超过挂起周期 查询结果超过阈值,且持续时间 ≥ 挂起周期 生成告警事件,进入通知策略,降噪规则生效
Resolved 已解决状态,条件不再满足 查询结果恢复到阈值以下 可发送恢复通知,降噪规则可抑制恢复通知
测试陷阱:在参数化测试中,如果挂起周期设置过长(例如 5 分钟),测试用例的执行时间也会相应延长。建议在测试环境中将挂起周期设置为 0 或极短值(如 5s),以加速测试循环。生产环境的挂起周期应单独验证。

2.6 本章小结

Grafana 告警体系由数据源、告警规则、评估组和通知策略四个核心层次构成。数据源提供指标和日志数据;告警规则定义查询和阈值条件;评估组负责周期性执行规则并管理告警状态;通知策略则承担路由、分组、抑制和静默等降噪功能。