9

我有一个关于使用 Prometheus 摘要指标计算响应时间的问题。

我创建了一个摘要指标,它不仅包含服务名称,还包含完整路径和 http 方法。

现在我尝试计算完整服务的平均响应时间。我阅读了有关“率然后求和”的文章,要么我不明白计算是如何完成的,要么计算是恕我直言不正确。

据我所知,这应该是计算每秒响应时间的正确方法:

sum by(service_id) (
    rate(request_duration_sum{status_code=~"2.*"}[5m])
    /
    rate(request_duration_count{status_code=~"2.*"}[5m])
)

我在这里理解的是为每个子集创建“每秒持续时间”(速率总和/速率计数)值,然后为每个 service_id 创建总和。

这对我来说看起来绝对是错误的——但我认为它不像我理解的那样起作用。

获得相同外观结果的另一种方法是:

sum without (path,host) (
    rate(request_duration_sum{status_code=~"2.*"}[5m])
    /
    rate(request_duration_count{status_code=~"2.*"}[5m])
)
  • 但是有什么区别呢?
  • 这里到底发生了什么?
  • 如果我使用“max”而不是“sum”,为什么老实说我只能得到可测量的值?

如果我会忽略我阅读的所有内容,我会通过以下方式尝试:

rate(sum by(service_id) request_duration_sum{status_code=~"2.*"}[5m])
/
rate(sum by(service_id) request_duration_count{status_code=~"2.*"}[5m])

但这根本不起作用......(即时向量与范围向量等等......)。

4

2 回答 2

9

所有这些示例都错误地汇总,因为您正在平均平均值。你要:

  sum without (path,host) (
    rate(request_duration_sum{status_code=~"2.*"}[5m])
  )
/
  sum without (path,host) (
    rate(request_duration_count{status_code=~"2.*"}[5m])
  )

status_code这将返回每个加上任何其他剩余标签的平均延迟。

于 2018-06-27T14:22:45.177 回答
0

在 Grafana 中使用 Prometheus 指标,该without关键字对我不起作用(至少正如我预期的那样)。我得到了令人满意的结果by

  sum by (status_code)(
    rate(request_duration_sum{status_code=~"2.*"}[5m])
  )
/
  sum by (status_code)(
    rate(request_duration_sum{status_code=~"2.*"}[5m])
  )
于 2019-12-02T13:56:46.510 回答