2. Grafana 告警体系回顾

在深入降噪规则测试验证之前,必须对 Grafana Alerting 的核心架构、数据源与告警规则的绑定关系、以及告警状态机的生命周期有清晰的理解。本节将系统梳理这三个关键维度,为后续的降噪策略设计打下基础。

2.1 Grafana Alerting 架构总览

Grafana Alerting 采用 统一告警引擎 架构,将数据源查询、告警规则评估、通知路由与静默/分组等降噪机制整合在一个平面内。其核心组件包括:

  • Alert Rule(告警规则):定义查询表达式、评估频率、条件阈值及持续时间。
  • Evaluation Engine(评估引擎):周期性执行规则,计算是否触发告警。
  • Alert Instance(告警实例):规则每次评估产生的具体告警对象,携带标签与时间序列数据。
  • Notification Policy(通知策略):基于标签匹配将告警实例路由到不同的联系人点(Contact Point)。
  • Silence / Mute Timing(静默/屏蔽时段):在指定时间窗口内抑制告警通知。
  • Alert Grouping(告警分组):将相似告警合并为一条通知,减少告警风暴。
架构要点: Grafana Alerting 是 内置引擎,不依赖外部 Alertmanager(如 Prometheus),所有告警状态、分组、静默均在 Grafana 自身数据库中管理,适合统一监控面板与告警策略的场景。
Grafana Alerting 核心架构 Grafana Alerting 核心架构 数据源 Prometheus / Loki / Graphite 告警规则 查询 + 条件 + 持续时间 评估引擎 周期性执行 / 状态计算 告警实例 标签 + 时间序列 + 状态 通知策略 路由 / 分组 / 重复 静默 / 降噪规则 时间窗口 / 标签匹配 架构特点 统一引擎 · 内置数据库 无需外部 Alertmanager

2.2 数据源与告警规则的绑定

Grafana 告警规则必须关联一个 数据源,评估引擎通过该数据源执行查询。支持的数据源类型包括:

数据源类型 查询语言 典型场景 注意事项
Prometheus PromQL 基础设施指标、Kubernetes 监控 需注意时间序列基数
Loki LogQL 日志告警、错误率检测 日志量大会影响评估延迟
Graphite Graphite Query 传统指标监控 函数支持有限
InfluxDB Flux / InfluxQL 时序数据告警 版本兼容性需确认
CloudWatch Metric Math AWS 资源监控 跨区域查询延迟较高
最佳实践: 每条告警规则应明确指定数据源,并在规则中通过 datasource_uid 字段锁定。避免在规则中使用默认数据源,防止环境迁移后查询失败。

告警规则的核心结构包含以下字段:

// 告警规则 YAML 示例(Grafana 8.x+)
apiVersion: 1
groups:
  - name: "production_alerts"
    interval: 30s
    rules:
      - uid: "high_cpu_rule"
        title: "CPU 使用率过高"
        condition: "A"
        data:
          - refId: "A"
            datasourceUid: "prometheus_prod"
            model:
              expr: 'avg(rate(node_cpu_seconds_total{mode="user"}[5m])) > 0.8'
              intervalMs: 30000
              maxDataPoints: 100
        for: "5m"
        labels:
          severity: "critical"
        annotations:
          summary: "CPU 使用率超过 80%"

2.3 告警状态机:Pending → Firing → Resolved

Grafana 告警实例遵循严格的状态机转换逻辑。理解状态机是配置降噪规则(如静默、分组、抑制)的前提。

告警状态机转换 告警状态机:Pending → Firing → Resolved Normal 未触发 Pending 等待持续期 Firing 已触发 Resolved 已恢复 条件满足 持续期通过 条件恢复 自动转换 关键参数:for 设置持续期避免抖动 默认 0s 即直接 Firing

状态转换的详细说明:

当前状态 触发条件 下一状态 说明
Normal 查询结果未达到阈值 — 正常状态,不产生告警实例
Normal → Pending 查询结果首次达到阈值 Pending 告警条件满足,但尚未超过 for 持续期
Pending → Firing 条件持续满足超过 for 时间 Firing 正式触发告警,发送通知
Firing → Resolved 查询结果恢复到阈值以下 Resolved 告警恢复,发送恢复通知(若配置)
Resolved → Normal 自动转换(无持续时间要求) Normal 实例生命周期结束
Pending → Normal 在持续期内条件恢复 Normal 抖动过滤,不产生告警
常见误区: 很多运维人员将 for 设置为 0,导致瞬时抖动直接触发 Firing,造成告警风暴。建议至少设置 1-5 分钟的持续期,配合降噪规则中的静默窗口使用。

2.4 告警实例的标签与分组

每个告警实例在触发时会携带一组 标签(Labels),这些标签来自:

  • 规则定义标签:在规则中静态指定的标签(如 severity: critical)。
  • 数据源查询结果标签:PromQL 查询返回的时间序列标签(如 instance、job)。
  • 自动注入标签:Grafana 自动添加的 alertname、grafana_folder 等。

标签是降噪规则的核心匹配依据。在后续章节中,我们将基于标签设计静默规则、分组策略和抑制规则。

降噪前置知识: 告警状态机中的 Pending 阶段是降噪规则介入的最佳时机。通过静默规则匹配 Pending 状态的告警,可以在其进入 Firing 之前抑制通知,避免无效告警打扰。