Prometheus

55708
下载
Prometheus 是一个开源的监控和告警系统,专注于时间序列数据的采集与存储。由 SoundCloud 开发,配备高级查询语言PromQL,便于数据挖掘与分析,并无缝对接多种可视化平台。

记录规则


使用记录规则(recording rules)的一致性命名方案可以让你一眼就能理解规则的意义,并避免错误或无意义的计算。

本页面记录了记录规则的适当命名规范和聚合方法。

命名

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

保持指标名称不变,使了解指标是什么以及在代码库中查找它们变得容易。

为了保持操作的清晰,如果存在其他操作,则在使用sum()时应该省略_sum,因为这可以合并关联操作(例如,min_minmin相同)。

如果没有明显的操作可用,则使用sum。 当通过除法进行比率计算时,使用_per_分离指标,并调用操作ratio

聚合

  • 当向上聚合比率时,分别向上聚合分子和分母,然后进行除法。
  • 不要对比率取平均值或对平均值取平均值,因为这是统计上是无效的。
  • 当向上聚合 Summary 的_count_sum并进行除法以计算平均观察值大小时,将其视为比率会变得难以处理。相反,应该保留指标名称而不带_count_sum后缀,并将操作中的rate替换为mean。这代表了该时间段内的平均观察值大小。
  • 总是要指定without子句来聚合标签。这样可以保留如job之类的其他标签,从而避免冲突并为你提供更有用的指标和告警。

示例

请注意,使用在两个向量(vector)之间插入独立行的缩进样式。为了在 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"}
# 向上聚合分子和分母,然后进行除法以获取路径级别的比率。
- 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"})
# 我们使用'job'作为聚合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"}
# 向上聚合分子和分母,然后进行除法。
- 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子句中的标签级别与输入指标名称中的级别相比有所不同。如果没有聚合,则输出输入的级别应该是一样的。如果不是这样的话,你很有可能在编写规则时出错了。

该文档基于 Prometheus 官方文档翻译而成。


observability.cn Authors 2024 | Documentation Distributed under CC-BY-4.0
Copyright © 2017-2024, Alibaba. All rights reserved. Alibaba has registered trademarks and uses trademarks.
浙ICP备2021005855号-32