如何使用PromQL查询Prometheus中存在有效数据的天数
Prometheus 高效统计30天内有有效数据的天数方案
你目前逐天发起30次查询的方案性能损耗过高,仅需要1次PromQL查询即可实现需求:
可用查询语句
count_over_time( (exists_over_time(你的指标名{标签匹配规则}[1d]))[30d:1d] )
语句逻辑说明
- 内层
exists_over_time(你的指标名[1d]):判断单个1天窗口内是否存在该指标的有效样本,存在则返回1,不存在返回空 - 中间的
[30d:1d]是Prometheus子查询语法,代表将过去30天的时间区间按1天为步长进行切分,逐段执行内层的判断逻辑 - 外层
count_over_time统计所有返回值为1的点的数量,最终结果就是过去30天内有有效数据的总天数
适配调整方案
- 如果你需要判断的是「当日有超过N条样本才算有效」,可以将
exists_over_time替换为count_over_time(你的指标名[1d]) > N - 如果你需要对齐自然日(比如按北京时间的0点作为日期切分点,而非滚动24小时窗口),可以在指标后追加
offset 偏移量修正窗口起始位置即可 - 如果需要按指标标签分维度统计,直接在指标的标签匹配规则中增加对应过滤条件即可,无需修改整体语句结构
内容的提问来源于stack exchange,提问作者raven 97
相关产品推荐
相关产品推荐

