代码之家  ›  专栏  ›  技术社区  ›  eventhorizon

promql“by”和“without”的区别不清楚

  •  2
  • eventhorizon  · 技术社区  · 8 年前

    我有一个关于用普罗米修斯总结指标计算响应时间的问题。

    我创建了一个摘要度量,它不仅包含服务名,还包含完整的路径和HTTP方法。

    现在我尝试计算完整服务的平均响应时间。 我读了一篇关于“比率然后求和”的文章,要么我不理解如何计算,要么计算不正确。

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

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

    我在这里理解的是为每个子集创建“每秒持续时间”(速率和/速率计数)值,然后创建每个服务的和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])
    

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

    有什么想法吗?

    THX提前!!!

    1 回复  |  直到 8 年前
        1
  •  1
  •   brian-brazil    8 年前

      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 加上其他剩余的标签。

    推荐文章