指标聚合与降采样
指标数据的一个核心特性是时序衰减:最近的数据需要高分辨率(秒级)用于实时告警,历史数据则可以降低分辨率(分钟级、小时级)用于趋势分析和容量规划。指标聚合与降采样,正是管理这种「时序分辨率」差异的技术手段。
Prometheus 的数据保留策略(默认 15 天)决定了短期数据的精度。对于超过保留期的数据,需要通过 Recording Rules 预计算聚合指标,并通过 Thanos、VictoriaMetrics 等工具实现长期存储和降采样查询。
Recording Rules 的聚合价值
Recording Rules 的核心价值不是「缓存查询结果」(这是副作用),而是封装业务逻辑和优化查询性能。一个精心设计的 Recording Rules 体系,应该包含三个层级:
基础设施层:将原始 Exporter 指标转换为标准格式,如 node_memory_MemAvailable_bytes → host:memory_available:bytes。这层规则通常由平台团队维护,所有服务统一消费。
服务层:聚合单个服务的核心指标,如 service:http_requests:rate5m、service:http_request_duration:p99。这层规则按服务维度定义,便于横向对比。
业务层:聚合业务相关的复合指标,如 business:order:count:rate1h、business:payment:success_rate。这层规则需要业务团队参与定义。
降采样的实现策略
降采样的目的是在长期存储中保留「足够分析趋势」的数据精度,同时大幅降低存储成本。典型的降采样策略:
Thanos 的 Recording Rules 配合 Compactor 组件,可以自动完成这个降采样过程。配置降采样规则时,需要明确「哪些指标需要降采样、哪些指标不能降采样」——高频告警依赖的指标应该保持高精度。
查询层面的聚合
对于不需要预计算的 ad-hoc 查询,可以在查询时进行实时聚合。PromQL 支持 rate()、irate()(瞬时速率)、increase() 等聚合函数,结合 group_left()、group_right() 可以实现多指标联合查询。
但要注意实时聚合的性能开销:一条复杂的 PromQL 查询(涉及多个 join 和 group)可能需要扫描数百万个数据点,响应时间可能达到数秒甚至超时。对于常用的查询模式,应该用 Recording Rules 预计算结果。