首页/云/可观测性速查/记录规则:把高频查询预先算好
Prometheus 与采集64 条

记录规则:把高频查询预先算好

recording rules 周期性计算表达式并写成新指标(惯例命名 level:metric:operations),让看板与告警查询预计算结果,降低查询成本与复杂度。

可观测性速查云更新于 2026-10-13

记录规则是什么

记录规则(recording rules)按固定间隔计算一段 PromQL 表达式,把结果写成一个新的时间序列存入 TSDB。看板与告警随后查询这个预计算指标,而不是每次重复计算复杂表达式。社区惯用命名是 level:metric:operations,例如 job:http_requests:rate5m,一眼能看出聚合层级、指标与运算。

基本信息

配置位置独立规则文件,由 rule_files 引入
评估频率group 的 interval 决定
命名惯例level:metric:operations
结果去向写入 TSDB 成为普通序列
生效方式重载配置或重启后生效
校验工具promtool check rules / test rules

典型使用场景

  • 被多个看板与告警复用的复杂表达式,预计算后各处直接引用
  • 跨实例的高基数聚合,避免每次查询都做全量聚合
  • 长窗口(如 30 天)统计预先算好,绕开查询点数与超时限制
  • 把业务口径(成功率、错误率)固化成命名指标,统一团队口径
  • 降低 Prometheus 查询压力,把重活留给规则评估

规则文件示例

规则文件示例
groups:
  - name: http_rules
    interval: 30s                 # 每 30 秒评估一次
    rules:
      - record: job:http_requests:rate5m
        expr: sum by (job) (rate(http_requests_total[5m]))
      - record: job:http_errors:ratio5m
        expr: sum by (job) (rate(http_requests_total{code=~"5.."}[5m]))
              / sum by (job) (rate(http_requests_total[5m]))

规则文件字段

字段作用说明
groups[].name规则组名同名组需在文件内唯一
interval评估间隔不填则继承全局 evaluation_interval
record新指标名建议按 level:metric:operations
expr表达式被周期计算的 PromQL
labels附加标签给结果补维度
评估频率由 group 的 interval 控制;结果作为普通序列入库,可以被继续聚合,也能被告警与看板直接查询。
记录规则不是越多越好:优先覆盖被多处复用的复杂表达式,只在一处使用的简单查询交给即时查询即可。
规则组之间有依赖时应拆分到不同 group 或按 order 排列,避免同一轮评估里引用到本轮尚未写出的结果。
预计算指标一旦上线就成为下游依赖:改表达式等于改口径,需要像改接口一样通知使用方并保留旧指标过渡。
评估间隔小于原始采集间隔时,会算出多份重复样本;interval 应不小于被引用指标的抓取间隔。

易错点

  • 记录规则过多会加重评估负担,优先覆盖被多个看板与告警复用的复杂表达式
  • 规则评估产生的序列同样占用存储,命名与保留策略要一起规划
  • 命名不统一(少了 level 前缀)会让使用者分不清预计算指标与原始指标
  • 规则组内存在依赖时,同轮评估可能读到上一轮的旧值,造成短暂的数据台阶
  • 表达式写错在评估时才暴露:上线前用 promtool check rules 与 test rules 兜底
  • 记录规则引用的原始指标改名或消失后,规则会静默产出空结果,下游看板变空图却无人报警

数据来源与参考

  • Prometheus 文档 · Recording rules 与命名惯例
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌