gpt4 book ai didi

prometheus - PromQL:rate() 函数的用途是什么?

转载 作者:行者123 更新时间:2023-12-05 00:55:04 24 4
gpt4 key购买 nike

我对 PromQL 及其查询函数 rate() 以及如何正确使用它有疑问。在我的应用程序中,我有一个线程正在运行,我使用 Micrometer 的计时器来监视线程的运行时间。使用 Timer 会为您提供一个带有后缀 _count 的计数器和另一个带有后缀 _sum 的秒数总和的计数器。例如。 my_metric_sum 和 my_metric_count。

我的原始数据是这样的(抓取间隔 30 s,范围向量 5m):

enter image description here

现在根据文档,https://prometheus.io/docs/prometheus/latest/querying/functions/#rate 计算范围向量中时间序列的每秒平均增长率(这里是5m)。

现在我的问题是:我为什么要这样?我的执行运行时的相对变化对我来说似乎毫无用处。实际上,仅使用 sum/count 看起来更有用,因为它可以为我提供每个时刻的平均绝对持续时间。同时,这让我感到困惑,在我找到的文档中

要根据名为 http_request_duration_seconds 的直方图或摘要计算过去 5 分钟内的平均请求持续时间,请使用以下表达式:

rate(http_request_duration_seconds_sum[5m])/rate(http_request_duration_seconds_count[5m])

来源:https://prometheus.io/docs/practices/histograms/

但据我了解文档,看起来这个表达式会计算请求持续时间的每秒平均增长率,即不是请求平均需要多长时间,而是请求持续时间改变了多少过去 5 分钟的平均值。

最佳答案

rate(m[d]) 函数计算 counter metric m 在方括号中的给定后 window 口 d 上的增量,然后将增量除以 d 。每个匹配的时间序列 m 独立执行计算。例如,假设有带有 http_requests_total 标签的 url 指标:

http_requests_total{url="/foo"}
http_requests_total{url="/bar"}

如果它们在 t0 时具有以下值:

http_requests_total{url="/foo"} 123
http_requests_total{url="/bar"} 456

... 以及 t0 + 5 minutes 时的以下值:

http_requests_total{url="/foo"} 345
http_requests_total{url="/bar"} 789

那么rate(http_requests_total[5m])在时间t0 + 5 minutes的计算方式如下:

  1. t0t0 + 5 minutes 之间的这些指标计算 increase:
increase(http_requests_total{url="/foo"}[5m]) = 345 - 123 = 222
increase(http_requests_total{url="/bar"}[5m]) = 789 - 456 = 333
  1. 将计算出的增量除以以秒表示的 5 minutes (5*60s = 300s):
rate(http_requests_total{url="/foo"}[5m]) = 222 / 300 = 0.74
rate(http_requests_total{url="/bar"}[5m]) = 333 / 300 = 1.11

所以 rate(http_requests_total[5m]) 的最终结果是过去 5 分钟的每秒平均 rps,它是根据每个时间序列以 http_requests_total 名称单独计算的。

几点说明:

  • rate()increase() 都能正确处理,例如counter resets ,当 counter 重置为零时。

  • 由于所选的数据模型,有时 Prometheus 可能会从 rate()increase() 返回意外结果。见 this issue 。这个问题在 VictoriaMetrics - 我工作的类似 Prometheus 的监控系统中得到解决 - 请参阅 this commentthis article

  • 当使用 rate() 函数时,一些与 PromQL 兼容的查询引擎(例如 MetricsQL)允许跳过方括号中的后 window 口,因此 rate(http_requests_total) 是有效的 MetricsQL 查询。在这种情况下,它会在查询执行之前自动添加 [$__interval] 后 window 口。有关详细信息,请参阅 these docs

关于prometheus - PromQL:rate() 函数的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65400298/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com