对记录规则使用一致的命名方案可以更容易地一眼理解规则的含义。它还可以通过突出显示不正确或无意义的计算来避免错误。
本页介绍了记录规则的正确命名约定和聚合方法。
层级:指标:操作
。层级
表示规则输出的聚合层级和标签。指标
是指标名称,除了在使用 rate()
或 irate()
时剥离计数器上的 _total
外,应保持不变。操作
是应用于指标的操作列表,最新的操作在前。保持指标名称不变可以很容易地知道指标是什么,并且便于在代码库中查找。
为了保持操作清晰,如果存在其他操作(例如 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"})
计算请求失败率并聚合到作业级别的失败率
- 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:request_latency_seconds_count:rate5m{job="myjob"})
请注意,进行聚合时,without
子句中的标签会从输出指标名称的层级中移除,这与输入指标名称的层级不同。如果没有聚合,层级始终匹配。如果情况并非如此,则规则中很可能存在错误。
本文档是开源的。请通过提交问题或拉取请求来帮助改进它。