PromQL如何统计指定时间窗口内时间序列样本数返回标量
问题说明
- 查询场景:在Grafana Explore选择2分钟时间窗口查询指标
instana_metrics{aggregation="max", endpoint="mutation addProduct"},共返回t1-t5五个样本点,对应值分别为3051、5347、5347、4224、4224 - 预期目标:实现等价于SQL语句
SELECT Count(*) FROM instana_metrics的查询效果,得到值为5的单个标量结果 - 现存问题:直接使用
count( instana_metrics{aggregation="max", endpoint="mutation addProduct"} )查询,仅能得到每个时间点对应值为1的时间序列,不符合预期 - 实现约束:不借助Grafana转换功能,仅使用纯PromQL实现
原因说明
PromQL 内置的 count() 聚合运算符是按每个时间戳逐点计算当前时刻匹配的时间序列数量,由于筛选后的指标本身只有1条时间序列,因此每个时间点的计算结果都是1,无法统计整个时间窗口内的总样本点数。
解决方案
使用 count_over_time() 函数统计指定时间范围内的样本点总数,该函数作用于范围向量,会统计单条时间序列在指定时间窗口内的样本点数量:
count_over_time(instana_metrics{aggregation="max", endpoint="mutation addProduct"}[2m])
注意事项
- 方括号内的时间范围需要和你在Grafana Explore选择的查询窗口长度保持一致,例如查询窗口为5分钟时,将范围参数改为
[5m]即可 - 如果指标筛选条件匹配到多条时间序列,
count_over_time()会为每条序列单独返回样本计数,需要统计所有序列总样本数时,可以在外层套一层sum()聚合:
sum(count_over_time(instana_metrics{aggregation="max", endpoint="mutation addProduct"}[2m]))
内容的提问来源于stack exchange,提问作者Marco Schmitz
相关产品推荐
相关产品推荐

