Prometheus Agent模式远程写入离线时的数据持久化咨询
Prometheus Agent 离线缓存与重传机制解答
remote write端点离线时的数据存储规则
Prometheus Agent会将待发送的时序元数据、样本数据持久化到磁盘,并非仅暂存在内存中。
测试场景下仅观测到lock文件与wal目录属于完全正常的运行表现:
- Agent模式裁剪了普通Prometheus Server版本的本地时序数据库实现,不会生成常规的时序block块文件,WAL(预写日志)是其唯一的待发送数据持久化载体。
- 所有采集到的、未收到remote write端点写入成功确认的样本,都会实时写入WAL目录下的二进制日志段文件,即使Agent进程重启、端点长时间离线,这部分持久化的数据也不会丢失。
- WAL留存有默认阈值:默认最少保留2小时的待发送数据,可通过启动参数
--storage.agent.retention.min-time调整最小留存时长、--storage.agent.retention.max-bytes调整WAL最大磁盘占用空间。如果端点离线时长超过配置阈值,最早的未发送数据会被主动清理,避免磁盘空间耗尽。
remote write端点恢复后的重传逻辑
Prometheus Agent的remote write模块基于WAL偏移量实现可靠重传,核心流程如下:
- 每个remote write写入分片会独立维护已提交偏移量,标记WAL中已经被远端确认接收的最新数据位置。
- 端点离线时,发送失败的批次不会更新已提交偏移量,客户端会按指数退避规则持续重试(初始重试间隔1s,最大重试间隔30s)。
- 端点恢复连通后,客户端会直接从最后一次记录的已提交偏移量位置开始,顺序读取WAL中积压的所有未发送样本,按配置的批次大小打包推送到远端,直到所有积压数据全部发送完成、偏移量推进到最新采集位置,才会恢复正常的实时发送节奏,同时清理已经完成发送的旧WAL段文件。
补充说明:WAL文件为snappy压缩的二进制格式,直接查看文件内容无法识别明文时序数据,不要通过文件内容可读性判断是否写入了待发送数据。
内容的提问来源于stack exchange,提问作者TonyChopper
相关产品推荐
相关产品推荐

