如何按标签计算量规指标的百分比?
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
【讨论】:
以上是关于如何按标签计算量规指标的百分比?的主要内容,如果未能解决你的问题,请参考以下文章
计算多个 prometheus 指标的百分比并在 Grafana 中显示
python使用numpy包编写自定义函数计算SMAPE(对称平均绝对百分比误差)指标Symmetric mean absolute percentage errorSMAPE指标解读指标使用的注
python使用numpy包编写自定义函数计算MAPE(平均绝对百分比误差)指标mean absolute percentage error (MAPE)MAPE指标解读MAPE指标使用的注意事项