count_over_time 是什么
count_over_time 是 PromQL 的区间函数,接收一个区间向量(如 up[5m]),返回该窗口内实际存在的样本条数。它数的是采样点个数而不是数值大小,因此在抓取间隔固定的前提下,样本数大致等于窗口长度除以抓取间隔,常用来判断目标是否在稳定上报、rate 类查询是否还有足够样本可用。Prometheus 2.x 全系列支持,对计数器与仪表类指标一视同仁。
基本信息
| 语法 | count_over_time(<区间向量>) |
|---|---|
| 输入 | up{job="node"}[5m] 这类区间向量 |
| 返回 | 即时向量,值为窗口内样本条数 |
| 适用版本 | Prometheus 2.x 全系列 |
| 权限要求 | 只读查询,无特殊权限 |
典型使用场景
- 数据完整性核查:15s 抓取间隔下 5 分钟窗口理论约 20 个样本,明显偏少说明存在丢点
- 抓取超时排查:Targets 页显示某目标耗时贴近 timeout 时,用它量化丢点严重程度
- rate 结果可信度判断:样本太少时 rate/irate 误差放大,先确认样本密度再解读速率
- 采集链路断流检测:某指标长期零样本时用告警规则捕获,早于业务侧感知
- 参数变更验证:缩短抓取间隔后确认实际落库样本量是否随之上升
数据完整性检查
数据完整性检查
# 15s 抓取间隔下,5 分钟窗口理论样本数约 20
count_over_time(up{job="node"}[5m])
# 样本明显不足的目标(疑似抓取失败或频繁丢点)
count_over_time(up{job="node"}[5m]) < 15
# 与抓取耗时一起看:耗时贴近 timeout 的目标最容易丢点
count_over_time(up{job="node"}[5m]) < 15 and scrape_duration_seconds{job="node"} > 8
# 统计窗口内「满足条件的采样点个数」(子查询写法)
count_over_time((up{job="nginx"} == 0)[1h:1m])样本数与诊断
| 观测结果 | 含义 | 常见原因 |
|---|---|---|
| 样本数接近理论值 | 抓取稳定 | 正常状态,rate 结果可信 |
| 样本数明显偏少 | 存在丢点 | 目标超时、网络抖动、采集端过载 |
| 样本数为零 | 窗口内没有样本 | 服务停止、端口不通、目标被移除 |
| 样本数忽高忽低 | 抓取不稳定 | 同机多实例争抢、DNS 解析慢 |
想统计「窗口里有多少个采样点满足条件」要用子查询写法 count_over_time((up == 0)[1h:1m]),得到的是采样点个数,而不是故障持续秒数;两者量级不同,别混用。
样本数下降先区分两种情况:抓取失败时 up 仍存在但样本稀疏;目标被移除时序列提前结束并写入 stale 标记。前者查网络与超时,后者查配置变更。