【发布时间】:2021-02-22 00:35:00
【问题描述】:
在范围向量上应用avg()是什么意思,例如:
avg(meric_name[1d])
根据文档here,它只对即时向量进行操作。 metric_name[1d] 返回一个范围向量。这个查询仍然在范围向量上运行并返回一个结果,没有任何错误的抱怨。
【问题讨论】:
标签: prometheus promql victoriametrics metricsql
在范围向量上应用avg()是什么意思,例如:
avg(meric_name[1d])
根据文档here,它只对即时向量进行操作。 metric_name[1d] 返回一个范围向量。这个查询仍然在范围向量上运行并返回一个结果,没有任何错误的抱怨。
【问题讨论】:
标签: prometheus promql victoriametrics metricsql
这会正确返回解析错误:
Error executing query: invalid parameter "query": 1:5: parse error: expected type instant vector in aggregation expression, got range vector
所以我怀疑您正在运行不同的查询。
【讨论】:
正如 Brian 已经指出的那样,avg(m[d]) 查询在 Prometheus 中不起作用,因为这是有效的 MetricsQL 查询并且是无效的 PromQL 查询。
VictoriaMetrics 自动将 avg(m[d]) 查询转换为 avg(last_over_time(m[d]))。 last_over_time(m[d]) 为每个返回的数据点返回 m 超过 d 持续时间的最后一个原始值。然后avg(...) 计算结果时间序列的平均值。
last_over_time() 函数可用于覆盖时间序列数据中的间隙,如果这些间隙超过传递给 /api/v1/query_range 的 step 值。
在MetricsQL docs 上查看有关last_over_time() 功能的更多详细信息。
【讨论】: