首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PromQL "by“与”and“的区别不清

PromQL "by“与”and“的区别不清
EN

Stack Overflow用户
提问于 2018-06-27 14:01:34
回答 3查看 16.8K关注 0票数 11

关于使用Prometheus摘要度量计算响应时间,我有一个问题。

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

现在,我尝试计算整个服务的平均响应时间。我阅读了这篇关于“费率然后和”的文章,要么我不明白如何计算,要么是IMHO的计算不正确。

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

代码语言:javascript
复制
sum by(service_id) (
    rate(request_duration_sum{status_code=~"2.*"}[5m])
    /
    rate(request_duration_count{status_code=~"2.*"}[5m])
)

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

这对我来说绝对是不对的--但我认为这并不是我所理解的那样有效。

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

代码语言:javascript
复制
sum without (path,host) (
    rate(request_duration_sum{status_code=~"2.*"}[5m])
    /
    rate(request_duration_count{status_code=~"2.*"}[5m])
)
  • 但有什么不同呢?
  • 这里到底发生了什么?
  • 为什么我真的只有当我用"max“而不是"sum”时才能得到可测量的值?

如果我忽略我所读到的每一件事,我会用以下的方式来尝试:

代码语言:javascript
复制
rate(sum by(service_id) request_duration_sum{status_code=~"2.*"}[5m])
/
rate(sum by(service_id) request_duration_count{status_code=~"2.*"}[5m])

但这根本行不通..。(即时向量与距离向量等)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-27 14:22:45

所有这些例子都是不正确的聚合,因为平均是一个平均值。你想:

代码语言:javascript
复制
  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的平均延迟时间加上任何其他剩余的标签。

票数 11
EN

Stack Overflow用户

发布于 2022-04-06 17:11:02

  • by修饰符通过聚合函数中枚举的标签对by(...)进行分组。
  • without修饰符将聚合函数分组为所有标签( without(...)中枚举的标签除外)。

例如,假设process_resident_memory_bytes度量与jobinstancedatacenter标签一起存在:

代码语言:javascript
复制
process_resident_memory_bytes{job="job1",instance="host1",datacenter="dc1"} N1
process_resident_memory_bytes{job="job1",instance="host2",datacenter="dc1"} N2
process_resident_memory_bytes{job="job1",instance="host1",datacenter="dc2"} N3
process_resident_memory_bytes{job="job2",instance="host1",datacenter="dc1"} N4

然后,sum(process_resident_memory_bytes) by (datacenter)将返回每个datacenter内存使用情况的摘要,而sum(process_resident_memory_bytes) without (instance)将返回每个-job的每个datacenter内存使用情况摘要。

票数 2
EN

Stack Overflow用户

发布于 2019-12-02 13:56:46

在Grafana中使用Prometheus度量标准时,without关键字对我不起作用(至少与我预期的一样)。我在by上得到了满意的结果

代码语言:javascript
复制
  sum by (status_code)(
    rate(request_duration_sum{status_code=~"2.*"}[5m])
  )
/
  sum by (status_code)(
    rate(request_duration_sum{status_code=~"2.*"}[5m])
  )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51064821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档