如何按标签计算量规指标的百分比?

Posted

技术标签:

【中文标题】如何按标签计算量规指标的百分比?【英文标题】:How to calculate the percentage by label for gauge metrics? 【发布时间】:2020-08-10 00:41:27 【问题描述】:

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

# TYPE gauge
tasksqueue="high", status="queued" 2.0
tasksqueue="high", status="started" 1.0
tasksqueue="high", status="successful" 5.0
tasksqueue="high", status="failed" 1.0

tasksqueue="low", status="queued" 1.0
tasksqueue="low", status="started" 2.0
tasksqueue="low", status="successful" 3.0
tasksqueue="low", status="failed" 2.0

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

我没有办法获得总任务数,所以这就是我拥有的所有数据,我想通过它们的status 标签计算任务的百分比,并使用 格拉法纳。

应该如何计算百分比?

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

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

( sum(tasksstatus="successful") / sum(tasks) ) * 100

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

( sum(tasksstatus="finished") by (queue) / sum(tasks) by (queue) ) * 100

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

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

sum(increase(tasks_totalstatus="success"[$__range])) /
sum(increase(tasks_totalstatus="started"[$__range]))

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

【问题讨论】:

看起来像 sum_over_time() 和 [$__interval] 是你需要的。 【参考方案1】:

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

在你的情况下:

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

【讨论】:

以上是关于如何按标签计算量规指标的百分比?的主要内容,如果未能解决你的问题,请参考以下文章

在 Grafana 中与 groupBy 一起计算百分比

计算多个 prometheus 指标的百分比并在 Grafana 中显示

python使用numpy包编写自定义函数计算SMAPE(对称平均绝对百分比误差)指标Symmetric mean absolute percentage errorSMAPE指标解读指标使用的注

python使用numpy包编写自定义函数计算MAPE(平均绝对百分比误差)指标mean absolute percentage error (MAPE)MAPE指标解读MAPE指标使用的注意事项

如何按行计算百分比并注释 100% 堆叠条

格式化,大十进制,请按百分比计算