先看现象。自建监控 Ubuntu 20.04 跑 Prometheus 2.45,remote write 到 VictoriaMetrics,某天日志开始刷 out of order sample for series,部分指标出现断点,NTP 刚做过一次对时,采集端时间往回跳了几十秒。

把日志和配置对完,能解释这个现象的基本就这几处。采集端时钟回拨,样本时间戳比已写入的最后一条还早。还有一种是同一个 series 被两套 Prometheus 同时 remote write,标签重叠。

还有一种情况,抓取间隔改短后,旧样本才开始陆续到达。

另外,目标重启后本地缓存的时间戳没有校正。

上来先确认报错涉及哪些 series

grep 'out of order' /var/log/prometheus/prometheus.log | tail -20

接着核对采集端和服务器的时间偏差

chronyc tracking && date -u

随后检查是否有重复的 remote write 配置

grep -r 'remote_write' /etc/prometheus/

末了让远端把缓存刷盘后观察队列

curl -X POST http://vm:8428/internal/force_flush

中间停过一次,把已经改的东西回滚干净,再重新来一遍。

改完先别撤,确认这几项。日志里不再出现 out of order sample,指标曲线连续,remote write 队列长度回到 0。

乱序本质是时间线冲突,改抓取间隔救不了;先把时钟统一,再排查有没有重复写入同一个 series。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189