1. 水位录制规则概述

1.1 什么是水位录制规则

水位录制规则(Watermark Recording Rule)是 SRE 监控体系中一类专门用于持续记录系统资源或服务状态“水位”的 PromQL 规则。它不直接触发告警,而是将关键指标在特定时间窗口内的最大值、最小值、百分位值或变化率持久化到新的时间序列中,形成可供后续分析、容量规划与告警阈值校准的“水位历史”。

核心定义:水位录制规则 = 预定义的 PromQL 表达式 + 固定的录制频率 + 目标指标名称,将原始高基数或高频率指标降维为稳定的水位时间序列。

例如,一个典型的 CPU 使用率水位录制规则如下:

# 录制过去5分钟内CPU使用率的最大值(水位峰值)
- record: node:cpu_utilization:max_5m
  expr: max_over_time(100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[1m])) * 100)[5m:])
  labels:
    level: "critical"

该规则每 15 秒(默认评估间隔)执行一次,将过去 5 分钟的 CPU 峰值水位写入 node:cpu_utilization:max_5m 指标,供后续查询或告警使用。

1.2 水位录制规则在 SRE 监控中的价值

水位录制规则在 SRE 实践中具有不可替代的四大核心价值:

价值维度 具体说明 典型场景
容量规划 通过录制长期水位峰值与趋势,量化资源使用上限,指导扩缩容决策 集群节点数规划、数据库连接池大小调整
告警降噪 用录制的水位基线替代原始指标,避免高频波动导致的误告警 CPU 突刺过滤、内存抖动忽略
阈值校准 基于录制的水位百分位数据(P50/P90/P99)动态调整告警阈值 延迟告警阈值从固定值改为 P99 水位 + 偏移量
事后回溯 保留高精度水位历史,故障复盘时可快速定位异常水位拐点 故障时间线分析、根因定位
SRE 最佳实践:水位录制规则是“监控的监控”——它记录的是监控系统自身对服务状态的抽象理解,是构建可观测性数据湖的基础组件。
水位录制规则在 SRE 监控中的位置与价值流 原始 PromQL 指标 高基数 / 高频率 水位录制规则 max_over_time / quantile_over_time 固定评估频率 → 新时间序列 水位时间序列 低基数 / 稳定 / 可持久化 📊 容量规划 水位峰值趋势 → 扩缩容依据 🔇 告警降噪 基线过滤 → 减少误告警 🎯 阈值校准 P50/P90/P99 → 动态阈值 🔍 事后回溯 水位拐点 → 故障时间线 水位录制规则不直接产生告警事件,而是为告警、容量、分析提供高质量的水位数据基础 —— 它是 SRE 可观测性体系中的“数据中台”

1.3 水位录制规则与普通告警规则的区别

水位录制规则与普通告警规则在目的、输出、评估方式、数据生命周期四个维度存在本质差异:

对比维度 普通告警规则 水位录制规则
核心目的 检测异常状态并触发通知 持续记录系统状态水位,不直接通知
输出形式 告警事件(Alert)→ 通知渠道 新时间序列(Time Series)→ 存储后端
评估频率 通常较低(1-5分钟),避免告警风暴 通常较高(15-60秒),保证水位精度
数据保留 告警事件按需保留,通常较短 水位序列长期保留(数周至数月)
典型表达式 node_cpu_utilization > 0.9 max_over_time(node_cpu_utilization[5m])
对原始数据影响 只读不写,不产生新指标 写入新指标,增加存储但降低查询复杂度
常见误区:不要将水位录制规则当作告警规则的替代品。两者是互补关系——水位规则提供数据基础,告警规则基于水位数据做出决策。正确的做法是:先录制水位,再基于水位设置告警。
水位录制规则 vs 普通告警规则:架构对比 普通告警规则 if (expr) → Fire Alert → Notify 原始指标输入 阈值判断 告警事件 通知渠道 水位录制规则 record: expr → New Time Series → Store 原始指标输入 水位计算 水位时间序列 长期存储 触发 vs 记录 事件 vs 序列 通知 vs 存储

1.4 水位录制规则的核心设计原则

设计高质量的水位录制规则需要遵循以下五项原则:

  1. 明确水位语义:每个录制规则必须清晰定义“录制的是什么水位”——峰值、均值、P99 还是变化率,避免语义模糊。
  2. 匹配业务周期:录制窗口大小应与业务波动周期对齐,例如业务高峰期 1 小时,则录制窗口至少覆盖 1 小时。
  3. 控制基数爆炸:录制规则应尽量聚合标签,避免为每个 Pod 或实例录制独立水位,优先使用 by (cluster, service) 等高层聚合。
  4. 分层录制策略:按“基础设施层 → 平台层 → 应用层”分层录制,每层关注不同的水位指标,避免跨层混淆。
  5. 命名规范统一:采用 level:metric:aggregation_window 的命名格式,例如 critical:http_latency:p99_5m,便于自动化发现与维护。
实战经验:一个典型的微服务集群,建议录制 20-30 个核心水位指标,覆盖 CPU、内存、网络、磁盘、延迟、错误率、QPS 七个维度。过多的录制规则会导致存储成本失控,过少则无法支撑容量规划与告警校准。