4. 指标聚合基础概念:聚合(Aggregation)的定义、时间聚合与空间聚合、聚合窗口(Window)的选择
4.1 聚合(Aggregation)的定义
在可观测性工程中,聚合(Aggregation) 是将一组原始数据点通过某种数学函数合并为一个代表值的过程。聚合的核心目的是在保留信号特征的前提下,压缩数据量、消除噪声、提取趋势。
聚合操作通常包含三个要素:
- 输入集合:待聚合的原始数据点(如每秒的 CPU 使用率)。
- 聚合函数:如
avg、sum、max、min、count、p99、rate等。 - 输出值:一个或多个代表整个集合的标量或时间序列。
关键认知: 聚合不是简单的数据丢弃,而是信息的有损压缩。选择错误的聚合函数或窗口,会导致信号失真或告警盲区。
4.2 时间聚合与空间聚合
根据聚合的维度不同,指标聚合分为两大类:时间聚合(Temporal Aggregation) 和 空间聚合(Spatial Aggregation)。两者在告警降噪和指标设计中扮演不同角色。
| 维度 | 时间聚合 | 空间聚合 |
|---|---|---|
| 定义 | 对同一指标在时间轴上的连续数据点进行聚合 | 对同一指标在不同实体(实例、主机、服务)上的数据点进行聚合 |
| 典型函数 | avg_over_time、max_over_time、rate、increase |
avg by (service)、sum by (region)、max without (instance) |
| 降噪效果 | 平滑短期抖动,暴露长期趋势 | 消除单点异常,聚焦群体行为 |
| 告警场景 | 避免毛刺告警,适合慢速指标 | 避免单机故障误报,适合集群健康 |
| 风险 | 窗口过大导致响应延迟 | 聚合过度掩盖真实故障 |
实战建议: 在告警规则中,通常先做空间聚合(如
avg by (service))消除单点噪声,再做时间聚合(如 avg_over_time(..., 5m))平滑短期波动。顺序不可颠倒。
4.3 聚合窗口(Window)的选择
聚合窗口决定了每次聚合操作覆盖的时间范围。窗口选择直接影响告警的灵敏度、延迟和稳定性。
4.3.1 窗口类型与适用场景
| 窗口类型 | 说明 | 适用场景 | 典型值 |
|---|---|---|---|
| 短窗口 | 1m ~ 3m | 高频交易、实时流量、容器 OOM | 1m, 2m |
| 中窗口 | 5m ~ 15m | 服务延迟、错误率、CPU 使用率 | 5m, 10m |
| 长窗口 | 30m ~ 1h | 磁盘空间、内存泄漏、慢速增长趋势 | 30m, 1h |
4.3.2 窗口选择的权衡原则
- 信号 vs 噪声:窗口越大,噪声抑制越强,但信号延迟越高。
- 告警响应时间:窗口长度直接决定从故障发生到告警触发的最小延迟。
- 数据粒度:窗口至少应包含 3~5 个原始数据点,否则聚合结果不稳定。
- 业务容忍度:核心支付链路使用短窗口(1m~3m),后台批处理任务使用长窗口(15m+)。
常见陷阱: 不要对所有指标使用统一的聚合窗口。例如,P99 延迟使用 5m 窗口,而磁盘使用率使用 30m 窗口。统一窗口会导致部分指标过度平滑或过度敏感。
4.4 时间聚合与空间聚合的协同关系
下图展示了在典型告警链路中,时间聚合与空间聚合如何协同工作:
4.5 聚合窗口选择的量化方法
在实际工程中,可以通过以下步骤量化选择聚合窗口:
- 确定指标采集间隔:例如 Prometheus 每 15s 采集一次。
- 确定最小稳定样本数:建议窗口内至少包含 4 个样本点,即窗口 ≥ 4 × 采集间隔。
- 确定业务容忍延迟:例如核心交易链路容忍 3 分钟告警延迟,则窗口 ≤ 3m。
- 计算窗口范围:窗口 ∈ [4 × 采集间隔, 业务容忍延迟]。
示例: 采集间隔 15s,业务容忍延迟 5 分钟。窗口下限 = 4 × 15s = 1m,窗口上限 = 5m。推荐窗口 = 3m(取中间值)。若使用 5m 窗口,则告警延迟可能超过业务容忍度。
4.6 常见聚合函数与窗口组合
| 聚合函数 | 推荐窗口 | 典型场景 | 告警示例 |
|---|---|---|---|
avg_over_time |
5m ~ 15m | CPU、内存、延迟均值 | CPU > 80% for 5m |
max_over_time |
1m ~ 5m | 峰值检测、OOM 风险 | 内存 > 90% for 1m |
rate |
1m ~ 5m | QPS、错误率、请求速率 | error_rate > 5% for 3m |
increase |
5m ~ 30m | 累计增长、磁盘使用量 | disk_usage increase > 10GB in 30m |
quantile_over_time |
10m ~ 30m | P99 延迟、长尾分布 | p99_latency > 500ms for 10m |
注意:
rate 和 increase 函数本身已包含时间窗口概念,不要对它们的结果再做一次 avg_over_time,否则会造成双重平滑,严重延迟告警响应。
4.7 聚合窗口与告警降噪的关系
聚合窗口是告警降噪的第一道防线。合理的窗口选择可以过滤掉以下噪声:
- 采集抖动:单次采集失败或延迟导致的瞬时异常值。
- 突发毛刺:GC 暂停、网络重连等秒级波动。
- 周期性波动:分钟级负载变化(如定时任务)。
但窗口过大也会引入新的问题:
- 告警延迟:故障发生 10 分钟后才触发告警。
- 信号稀释:持续高负载被长窗口平均后低于阈值。
- 恢复滞后:故障已恢复,但窗口内仍残留历史高值。
最佳实践: 对于同一指标,可以设置多组不同窗口的告警规则。例如:短窗口(1m)用于快速发现严重故障,长窗口(15m)用于检测慢速趋势。两者互补,避免单一窗口的盲区。