首页 > 解决方案 > 如何按标签计算量规指标的百分比?

问题描述

我正在导出一些有关正在运行的任务的指标,可用数据包括按状态和队列划分的当前任务数:

# TYPE gauge
tasks{queue="high", status="queued"} 2.0
tasks{queue="high", status="started"} 1.0
tasks{queue="high", status="successful"} 5.0
tasks{queue="high", status="failed"} 1.0

tasks{queue="low", status="queued"} 1.0
tasks{queue="low", status="started"} 2.0
tasks{queue="low", status="successful"} 3.0
tasks{queue="low", status="failed"} 2.0

当任务从数据库中添加或过期时,这些数字会定期更改,例如,failed任务数会根据收集数据时数据库中的任务而上下浮动。

我没有办法获得总任务数,所以这就是我拥有的所有数据,我想通过标签计算任务的百分比,并使用Grafanastatus创建该值的图表。

百分比应该如何计算?

到目前为止我已经尝试过:

获取所有成功任务的百分比:

( sum(tasks{status="successful"}) / sum(tasks) ) * 100

按队列获取成功任务的百分比:

( sum(tasks{status="finished"}) by (queue) / sum(tasks) by (queue) ) * 100

我怎样才能按时间得到这个百分比?例如在Grafana中设置时间范围时?我可以使用变量$__range,但我应该如何进行计算?

我有其他数据,其中我有计数指标,我正在执行以下操作:

sum(increase(tasks_total{status="success"}[$__range])) /
sum(increase(tasks_total{status="started"}[$__range]))

但这些都是计数,这些计算不适用于衡量指标。

标签: prometheusgrafanametricspromql

解决方案


我认为您需要使用 group_left。看一个例子:https ://www.robustperception.io/using-group_left-to-calculate-label-proportions

在你的情况下:

sum without (queue) tasks{status="successful"}
/ ignoring(status) group_left
sum without (queue, status) tasks

推荐阅读