记录规则是什么
记录规则(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 应不小于被引用指标的抓取间隔。