eve*_*zon 8 prometheus calculation promql
我有一个关于使用 Prometheus 摘要指标计算响应时间的问题。
我创建了一个汇总指标,其中不仅包含服务名称,还包含完整路径和 http 方法。
现在我尝试计算完整服务的平均响应时间。我阅读了关于“比率然后总和”的文章,要么我不明白计算是如何完成的,要么计算是恕我直言不正确。
据我所知,这应该是计算每秒响应时间的正确方法:
sum by(service_id) (
rate(request_duration_sum{status_code=~"2.*"}[5m])
/
rate(request_duration_count{status_code=~"2.*"}[5m])
)
Run Code Online (Sandbox Code Playgroud)
我在这里理解的是为每个子集创建“每秒持续时间”(速率总和/速率计数)值,然后创建每个 service_id 的总和。
这对我来说看起来完全错误 - 但我认为它不像我理解的那样工作。
获得相同外观结果的另一种方法是:
sum without (path,host) (
rate(request_duration_sum{status_code=~"2.*"}[5m])
/
rate(request_duration_count{status_code=~"2.*"}[5m])
)
Run Code Online (Sandbox Code Playgroud)
如果我忽略我阅读的所有内容,我会按以下方式尝试:
rate(sum by(service_id) request_duration_sum{status_code=~"2.*"}[5m])
/
rate(sum by(service_id) request_duration_count{status_code=~"2.*"}[5m])
Run Code Online (Sandbox Code Playgroud)
但这根本不起作用......(即时向量与范围向量等等......)。
例如,假设process_resident_memory_bytesmetric 存在于job,instance和datacenter标签中:
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
Run Code Online (Sandbox Code Playgroud)
然后sum(process_resident_memory_bytes) by (datacenter)将返回每个内存datacenter使用情况的摘要,同时sum(process_resident_memory_bytes) without (instance)将返回每个job内存datacenter使用情况的摘要。
所有这些示例都错误地聚合,因为您正在求平均值。你要:
sum without (path,host) (
rate(request_duration_sum{status_code=~"2.*"}[5m])
)
/
sum without (path,host) (
rate(request_duration_count{status_code=~"2.*"}[5m])
)
Run Code Online (Sandbox Code Playgroud)
这将返回平均延迟时间status_code加上任何其他剩余标签。
| 归档时间: |
|
| 查看次数: |
10047 次 |
| 最近记录: |