【发布时间】:2018-12-06 11:16:35
【问题描述】:
我有一个关于使用 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])
但这根本行不通...(即时向量与范围向量等等...)。
【问题讨论】:
标签: prometheus calculation promql