使用记录规则的一致命名方案,易于解释规则含义,还可以避免错误,暴露错误的或无意义的计算。

本文档记录了如何正确地进行聚合,并提供了一种命名约定。

命名和聚合

记录规则的一般形式为 level:metric:operationslevel表示聚合级别和规则输出的标签。metric是指标名称,在使用rate()irate()函数时,除了将_total从计数器中剥离外,指标名称应该保持不变。operations是应用于指标的操作列表,最新的操作优先。

保持指标名称不变,可以很容易地知道指标是什么,并且很容易在代码库中找到它。

为了保持操作的整洁性,如果有其他操作,则省略_sum,如sum()。可以合并关联操作(例如min_minmin相同)。

如果没有明显的操作可以使用,则使用sum。当通过除法计算比率(ratio)时,使用_per_分隔指标和ratio操作调用。

当聚合比率时,分子分母分别聚合,然后相除。请不要使用比率的平均数或平均数的平均数,因为这在统计上是无效的。

当聚合摘要图的_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"})

计算请求故障率并聚合到作业级别故障率:

- 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"})