http_request_duration_seconds_sum / http_request_duration_seconds_count 显示 2 个图表

http_request_duration_seconds_sum / http_request_duration_seconds_count shows 2 graphs

我有一个 Grafana 仪表板,我尝试在其中绘制一些普罗米修斯指标。

我正在尝试使用以下公式计算 2 个端点的平均响应时间:

http_request_duration_seconds_sum / http_request_duration_seconds_count

但是当将查询绘制到 Grafana 图形面板时,我得到了 4 个图形(每个 2 个)而不是只有 2 个,我不明白。

谁能告诉我,为什么有 4 条曲线而不是 2 条? 顶部的两个来自同一个查询,按钮中的两个也是如此。

更新

正在添加

sum(rate(http_request_duration_sum))[24h] / sum(rate(http_request_duration_count))[24h] 

答案?这给了我 2 条曲线而不是 4 条曲线,但不确定结果是否是我正在寻找的结果(是端点的平均响应时间)。

我发现以下查询:

sum(rate(http_request_duration_sum))[24h] / sum(rate(http_request_duration_count))[24h] 

是我正在寻找的答案,以秒为单位给我平均响应时间,并且只有 1 条曲线 pr 查询。

当然 scrape_interval 应该 而不是 是 24 小时,所以我将其设置为 [1m]。 <- 根据这个

是的,那些来自普罗米修斯的指标是计数器。因此,您应该添加 rate/irate。对不稳定和快速变化的指标使用 irate

http_request_duration_sumhttp_request_duration_countcounter type 的指标,因此它们通常会随着时间的推移而增加,有时可能会重置为零(例如,当公开这些指标的服务,重新启动):

  • http_request_duration_sum 指标显示自上次服务重启以来所有请求持续时间的总和。
  • http_request_duration_count 指标显示自上次服务重启以来的请求总数。

所以http_request_duration_sum / http_request_duration_count给出了自服务启动以来的平均请求持续时间。这个指标没有用,因为它平滑了可能的请求持续时间峰值,并且平滑因子会随着时间的推移而增加。通常人们希望看到过去 N 分钟内的平均请求持续时间。这可以通过将计数器包装到 increase() 函数中来计算,并在方括号中包含所需的回顾持续时间。例如,以下查询 returns 最近 5 分钟的平均请求持续时间(请参阅方括号中的 5m):

increase(http_request_duration_sum[5m]) / increase(http_request_duration_count[5m])

如果 http_request_duration 指标在多个应用程序(又名作业)或节点(又名实例或抓取目标)上公开,则此查询可能 return 多个时间序列。如果您需要获取每个作业最近 5 分钟的平均请求持续时间,则必须使用 sum 函数:

sum(increase(http_request_duration_sum[5m])) by (job)
  /
sum(increase(http_request_duration_count[5m])) by (job)

请注意,sum(...) by (job) 分别应用于 / 的左侧和右侧部分。这不等同于以下 不正确的 查询:

sum(
  increase(http_request_duration_sum[5m]) / increase(http_request_duration_count[5m])
) by (job)
avg(
  increase(http_request_duration_sum[5m]) / increase(http_request_duration_count[5m])
) by (job)

由于第一个不正确的查询计算每个 job 的平均响应时间之和,而第二个不正确的查询计算每个 job 的平均响应时间的平均值。这不是大多数用户所期望的 - 有关详细信息,请参阅 this answer