问题描述
我有仪表(示例如下)。我想找到每小时过去 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)。我如何使用普罗米修斯查询来做到这一点?
解决方法
我认为以下查询可以完成这项工作:
avg by (group,service) (avg_over_time({__name__="metricA"}[1h]))
,
您正在寻找子查询:
- https://prometheus.io/blog/2019/01/28/subquery-support/
- https://prometheus.io/docs/prometheus/latest/querying/examples/#subquery
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) ()
按组和服务求平均值。