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 自身数据库中管理,适合统一监控面板与告警策略的场景。
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 告警实例遵循严格的状态机转换逻辑。理解状态机是配置降噪规则(如静默、分组、抑制)的前提。
状态转换的详细说明:
| 当前状态 | 触发条件 | 下一状态 | 说明 |
|---|---|---|---|
| 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 之前抑制通知,避免无效告警打扰。