我有一个关于使用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])
    

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

    最佳答案

    所有这些示例都在错误汇总,因为您是对平均值进行平均。你要:

      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的平均延迟以及其他所有剩余标签。

    关于prometheus - PromQL “by”和 “without”之间的区别不清楚,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51064821/

    10-15 20:28