当前位置: 首页 > 知识库问答 >
问题:

如何按标签计算仪表指标的百分比?

阎伟志
2023-03-14

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

# 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

当从数据库中添加任务或使任务过期时,这些数字会定期更改,因此,例如,失败的任务数量将根据收集数据时数据库中的任务而增加和减少。

我没有办法获得总任务数,所以这是我所有的数据,我想通过<code>状态

百分比应该如何计算?

到目前为止我所尝试的是:

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

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

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

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

我怎样才能及时得到这个百分比?例如,在Grafana中设置时间范围时?我可以使用变量<code>$__range</code>但如何计算?

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

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

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

共有2个答案

秦凯旋
2023-03-14

当前正在运行的任务的per-status百分比可以通过以下PromQL查询来计算:

100 * (sum(tasks) by (status) / on() group_left() sum(tasks))

它使用on()group_left()修饰符用于/操作,以增强/操作左侧和右侧匹配时间序列的默认行为。有关详细信息,请参阅这些文档。

如果需要获取当前正在运行的任务的每个队列/状态百分比,则以下查询应该有效:

100 * (
  sum(tasks) by (queue, status)
    / on(queue) group_left()
  sum(tasks) by (queue)
)

如果您需要在所选时间< code > $ _ _范围内运行的任务的每< code >状态百分比,则以下查询应该有效:

100 * (
  sum(sum_over_time(tasks[$__range])) by (status)
    / on() group_left()
  sum(sum_over_time(tasks[$__range]))
)

它使用sum_over_time函数来聚合给定 $__range 的任务数。$__range 可以用任何支持的持续时间代替 - 请参阅这些文档。

祁聪
2023-03-14

我想你需要用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
 类似资料:
  • 问题内容: 我从这样的数据库中提取了数据(为简单起见,将其简化),我想添加一个称为“百分比”的列。 先感谢您 问题答案: 内部选择得到s的和。

  • 我有以下使用chart.js的折线图示例。我想展示: 图例的指针光标

  • 我想数一数这个页面链接中的一些标签 我正在尝试计算开始位置的标签,所以,我尝试使用java来计算这段代码,但我总是发现我的计数是=0; 我写这个函数是为了计数:- 每次计数为0,我搜索了一个Iframe,但我没有找到任何。那么我怎么才能得到这个元素的大小呢?

  • 我如何使用来计算JMH中的CPU时间和内存量?例如,我有:Code: 结果: 我可以看到时间请求的数量,测试的平均时间,但看不到CPU使用和内存使用的平均数量。这可以通过JMH实现吗?

  • 问题内容: 如何在显示百分比的进度条中间放置标签?问题是python不支持标签背景的透明性,所以我不知道该如何解决。 问题答案: 使用可以做到这一点。这个想法是修改样式的布局(对垂直进度条做同样的事情),在样式条中添加一个标签: 通常的布局: 带有附加标签: 然后,可以使用来更改标签的文本。 这是代码:

  • 有人可以帮我绘制x轴标签的百分比给我的水平条形图的以下代码吗? 发现很难找到,因为我想要一个没有x轴标签和刻度的更简单的图表。 [水平条形图][1] 每次我得到一个EOF错误。有人能帮忙吗?