【发布时间】:2022-09-26 01:30:24
【问题描述】:
拜托,有人可以向我解释如何在 PromQL 中获得大于 0 的值的百分比。
我知道我可以得到大于 0 的向量值:TS_VEC>0。
我想我需要像count_over_time(TS_VEC>0[24h])/{count_over_time(TS_VEC[24h])} 这样的东西,但它不起作用。
谢谢
标签: prometheus grafana promql
拜托,有人可以向我解释如何在 PromQL 中获得大于 0 的值的百分比。
我知道我可以得到大于 0 的向量值:TS_VEC>0。
我想我需要像count_over_time(TS_VEC>0[24h])/{count_over_time(TS_VEC[24h])} 这样的东西,但它不起作用。
谢谢
标签: prometheus grafana promql
你有没有尝试过
count(TS_VEC>0)/count(TS_VEC)
【讨论】:
以下查询返回每个时间序列m 在最后一天中大于 0 的原始样本的估计百分比:
avg_over_time(
(m >bool 0)[1d:10s]
) * 100
此查询按以下方式工作:
它选择最后一天名称为m 的所有时间序列。您可以使用任何需要的series selector 代替m。
此查询使用subquery feature。
它根据this algorithm 在过去 24 小时内从原始样本中为每个选定的时间序列生成24h/10s=8640 点。
它将步骤 2 中大于 0 的点值替换为 1,同时根据>bool 比较将剩余的点值替换为 0。有关详细信息,请参阅these docs。
它根据每个选定的时间序列分别计算从步骤 3 返回的点的平均值。见avg_over_time docs。 平均值 0 表示原始时间序列在过去 24 小时内没有大于 0 的值。平均值 1 表示特定时间序列的所有值在过去 24 小时内都大于 0。
它将每个匹配时间序列的平均值乘以 100,以获得过去 24 小时内大于 0 的原始样本的百分比。
附言使用 VictoriaMetrics 时,查询可以简化为以下查询 - 我正在研究的类似 Prometheus 的监控解决方案:
share_gt_over_time(m[1d], 0) * 100
【讨论】: