先看现象。自建监控 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。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
