如何在普罗米修斯中计算量规指标的平均值

问题描述

我有仪表(示例如下)。我想找到每小时过去 10 小时的指标平均值。不是 10 小时的组合。我可以在 sql 中按小时在 group by 子句中轻松完成。但是在prometheus查询中没有好主意

{group="PrometheusDemo",resource="FinanceServicesGo",service="analyticsA",warning="1000"} 6
{group="PrometheusDemo",service="analyticsB",warning="3000"} 9
{group="PrometheusDemo",service="analyticsC",warning="2000"} 8
...
....
...

我尝试了以下查询 -

avg({__name__="metricA"}) by (group,service)

编辑问题
问题陈述

我有一个指标 A,包含时间和价值(见下图)。在hourly avg 列中,我取了每个小时的平均值。然后在 avg over avg 列中,我取了前一个平均列的平均值。我得到了 9.12 的价值,但如果我取过去 2 小时的组合平均值,我将得到 8.1。我想要使​​用普罗米修斯查询的平均值超过平均值(9.12)。我如何使用普罗米修斯查询来做到这一点?

enter image description here

解决方法

我认为以下查询可以完成这项工作:

avg by (group,service) (avg_over_time({__name__="metricA"}[1h]))
,

您正在寻找子查询:

avg_over_time(avg by (group,service) (avg_over_time({__name__="metricA"}[1h]))[10h:1h])

最外层查询 avg_over_time(query[10h:1h]) 将评估 10h 的时间段,以 query 间隔执行 1h,然后为每个时间序列平均这 10 个结果。

内部查询 avg by (group,service) (avg_over_time({__name__="metricA"}[1h])) 将运行 10 次。 avg_over_time({__name__="metricA"}[1h]) 查询将对 1h 上的每个初始时间序列求平均值,然后按 avg by (group,service) () 按组和服务求平均值。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...