prometheus - 如何按标签计算量规指标的百分比?
问题描述
我正在导出一些有关正在运行的任务的指标,可用数据包括按状态和队列划分的当前任务数:
# 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]))
但这些都是计数,这些计算不适用于衡量指标。
解决方案
我认为您需要使用 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
推荐阅读
- android - 重新发布的应用需要等待多长时间才能再次出现在 Google Play 上
- automated-tests - 独立测试多个模块时,赛普拉斯测试的最佳位置是什么
- linux - 如何在 Yocto 中将头文件添加到 /usr/include
- django - 我最初在我的 Django 模型中将我的默认 PK 设置为 0,现在 makemigrations 会导致此错误,即使在将默认值更改为 1 之后也是如此
- python - 用于谷歌 API 访问的 Oauth2 似乎依赖于请求 Python 任务的用户 ID
- unity3d - 如何统一实例化一个对象
- c# - 无法在 C# 中使用 PrincipalContext
- tkinter - 如何更改 tkinter 按钮上的图像 - python 3.6
- python - Pyisntaller 没有这样的文件或目录
- html - 在 MPDF 中将文本与底部对齐