CnOps 智能运维与可观测社区
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题
导航菜单
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题

CnOps 智能运维与可观测社区

愿景

CnOps 智能运维与可观测社区是一个以"智能运维与可观测"为核心的开放、包容、分享的技术社区,旨在聚集运维专家、开发者和爱好者,共同探讨、学习和分享可观测最佳实践与最新技术,与众多技术社区合作互动,共同探讨交叉领域的技术挑战,推动可观测领域的创新与进步。

内容社区

  • 实践文章
  • 视频课程
  • 开源项目
  • 常见问答
  • 开发者工具

友情链接

  • Prometheus
  • Grafana Lab
  • OpenTelemetry
  • LoongCollector

关注我们

阿里云云原生公众号阿里云云原生
阿里云可观测公众号阿里云可观测

Copyright © 2026 CnOps 社区. All rights reserved.

首页/开源项目/Prometheus/记录规则
文档目录
指标与标签命名控制台和仪表盘监控埋点Histogram 和 summary告警记录规则何时使用 PushgatewayRemote write 调优Prometheus 之禅

Prometheus

记录规则

一致的记录规则命名方案使得一眼就能理解规则的含义。它还通过使不正确或无意义的计算一目了然来避免错误。 本页记录了记录规则的正确命名约定和聚合方式。 记录规则应该遵循 level:metric:operations 的一般形式。 level 表示规则输出的聚合级别和标签。 metric 是指标名称,除了在使用 rate() 或 irate() 时去掉 counter 的 total...

一致的记录规则命名方案使得一眼就能理解规则的含义。它还通过使不正确或无意义的计算一目了然来避免错误。

本页记录了记录规则的正确命名约定和聚合方式。

命名

  • 记录规则应该遵循 level:metric:operations 的一般形式。
  • level 表示规则输出的聚合级别和标签。
  • metric 是指标名称,除了在使用 rate() 或 irate() 时去掉 counter 的 _total 后缀外,应保持不变。
  • operations 是应用于指标的操作列表,最新的操作排在最前面。

保持指标名称不变使得了解指标含义和在代码库中查找变得容易。

为了保持操作的简洁性,如果有其他操作存在,_sum 会被省略,如 sum()。结合律操作可以合并(例如 min_min 等同于 min)。

如果没有明显的操作可使用,请使用 sum。当通过除法计算比率时,使用 _per_ 分隔指标,并将操作命名为 ratio。

聚合

  • 在向上聚合比率时,分别聚合分子和分母,然后再进行除法。

  • 不要对比率求平均值或对平均值求平均值,因为这在统计上是无效的。

  • 当向上聚合 Summary 的 _count 和 _sum 并通过除法计算平均观测大小时,将其视为比率会很笨拙。相反,保持不带 _count 或 _sum 后缀的指标名称,并将操作中的 rate 替换为 mean。这表示该时间段内的平均观测大小。

  • 始终使用 without 子句指定你要聚合掉的标签。这是为了保留所有其他标签(如 job),以避免冲突并为你提供更有用的指标和告警。

示例

注意缩进风格,运算符在两个向量之间的独立行上进行缩进。为了在 Yaml 中实现这种风格,使用了带有缩进指示器的块引用(例如 |2)。

聚合带有 path 标签的每秒请求数:

- record: instance_path:requests:rate5m
  expr: rate(requests_total{job="myjob"}[5m])

- record: path:requests:rate5m
  expr: sum without (instance)(instance_path:requests:rate5m{job="myjob"})

计算请求失败率并向上聚合到 job 级别的失败率:

- record: instance_path:request_failures:rate5m
  expr: rate(request_failures_total{job="myjob"}[5m])

- record: instance_path:request_failures_per_requests:ratio_rate5m
  expr: |2
      instance_path:request_failures:rate5m{job="myjob"}
    /
      instance_path:requests:rate5m{job="myjob"}

# Aggregate up numerator and denominator, then divide to get path-level ratio.
- record: path:request_failures_per_requests:ratio_rate5m
  expr: |2
      sum without (instance)(instance_path:request_failures:rate5m{job="myjob"})
    /
      sum without (instance)(instance_path:requests:rate5m{job="myjob"})

# No labels left from instrumentation or distinguishing instances,
# so we use 'job' as the level.
- record: job:request_failures_per_requests:ratio_rate5m
  expr: |2
      sum without (instance, path)(instance_path:request_failures:rate5m{job="myjob"})
    /
      sum without (instance, path)(instance_path:requests:rate5m{job="myjob"})

从 Summary 计算一段时间内的平均延迟:

- record: instance_path:request_latency_seconds_count:rate5m
  expr: rate(request_latency_seconds_count{job="myjob"}[5m])

- record: instance_path:request_latency_seconds_sum:rate5m
  expr: rate(request_latency_seconds_sum{job="myjob"}[5m])

- record: instance_path:request_latency_seconds:mean5m
  expr: |2
      instance_path:request_latency_seconds_sum:rate5m{job="myjob"}
    /
      instance_path:request_latency_seconds_count:rate5m{job="myjob"}

# Aggregate up numerator and denominator, then divide.
- record: path:request_latency_seconds:mean5m
  expr: |2
      sum without (instance)(instance_path:request_latency_seconds_sum:rate5m{job="myjob"})
    /
      sum without (instance)(instance_path:request_latency_seconds_count:rate5m{job="myjob"})

使用 avg() 函数计算跨实例和路径的平均查询速率:

- record: job:request_latency_seconds_count:avg_rate5m
  expr: avg without (instance, path)(instance_path:request_latency_seconds_count:rate5m{job="myjob"})

请注意,在聚合时,without 子句中的标签会从输出指标名称的级别中移除(与输入指标名称相比)。当没有聚合时,级别始终匹配。如果不是这种情况,则规则中可能存在错误。

文章大纲