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 时间聚合与空间聚合的协同关系

下图展示了在典型告警链路中,时间聚合与空间聚合如何协同工作:

时间聚合与空间聚合协同链路 原始指标 instance:host1 原始指标 instance:host2 原始指标 instance:host3 空间聚合 avg by (service) 消除单点噪声 时间聚合 avg_over_time(5m) 平滑短期波动 告警评估 阈值比较 说明: 先做空间聚合(按服务平均)消除单机异常,再做时间聚合(5分钟窗口)平滑短期抖动,最后进行告警评估。

4.5 聚合窗口选择的量化方法

在实际工程中,可以通过以下步骤量化选择聚合窗口:

  1. 确定指标采集间隔:例如 Prometheus 每 15s 采集一次。
  2. 确定最小稳定样本数:建议窗口内至少包含 4 个样本点,即窗口 ≥ 4 × 采集间隔。
  3. 确定业务容忍延迟:例如核心交易链路容忍 3 分钟告警延迟,则窗口 ≤ 3m。
  4. 计算窗口范围:窗口 ∈ [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)用于检测慢速趋势。两者互补,避免单一窗口的盲区。