Grafana中计算瞬时指标foo的日均总和平均值遇报错求助
解决方法
问题出在你对PromQL的向量类型和子查询用法不熟悉:
sum(sum_over_time(foo{bar="baz"}[1d]))输出的是瞬时向量,而avg_over_time必须接收范围向量,所以直接调用会报错。- 你尝试给聚合结果加
[30d]的写法不符合语法,PromQL里范围修饰符只能跟在原始指标选择器(比如foo{bar="baz"})后面,不能用在聚合函数的输出上。
正确的表达式
要计算某时间段(比如过去30天)内的日均总和平均值,需要用子查询生成包含每日总和的范围向量,再对其求平均:
avg_over_time(sum(sum_over_time(foo{bar="baz"}[1d]))[30d:1d])
表达式拆解
sum_over_time(foo{bar="baz"}[1d]):计算每个符合条件的时间序列在1天内的指标总和sum(...):将所有时间序列的日总和累加,得到全局的日总和[30d:1d]:子查询语法,意思是在过去30天中,每隔1天执行一次前面的聚合操作,生成一个包含30个日总和数据点的范围向量avg_over_time(...):对这个范围向量里的所有日总和取平均,最终得到你要的“时间段内日均总和的平均值”
如果需要计算其他时间段(比如过去7天),只需把30d改成对应的时长即可,步长1d保持不变,确保我们取的是每天的总和数据。
内容的提问来源于stack exchange,提问作者Dima
相关产品推荐
相关产品推荐

