文章背景图

Prometheus 磁盘占满:TSDB、基数爆炸与数据保留治理

2026-08-08
2
-
- 分钟

Prometheus 磁盘占满会导致抓取失败、查询异常甚至进程退出。根因可能是保留时间过长、监控目标增加、标签基数爆炸、WAL 异常或磁盘容量规划不足。

一、确认磁盘与目录

df -hT
du -sh /prometheus/* | sort -h
du -sh /prometheus/wal /prometheus/chunks_head 2>/dev/null

先确认数据目录实际挂载点和增长速度。不要直接删除 TSDB block 或 WAL 文件,这可能破坏数据一致性并导致 Prometheus 无法启动。

二、检查保留配置

ps -ef | grep prometheus

关注 --storage.tsdb.retention.time--storage.tsdb.retention.size 和数据目录。建议同时设置合理的时间或大小边界,并为压缩、WAL 和系统保留余量。

三、定位高基数指标

PromQL 可检查序列数量:

count({__name__=~".+"})
topk(20, count by (__name__)({__name__=~".+"}))

使用 TSDB status 页面或管理工具分析 label/value 基数。用户 ID、请求 ID、完整 URL、时间戳等动态值不应作为标签。基数爆炸会同时增加内存、磁盘和查询压力。

四、检查抓取与 remote_write

目标数量、抓取间隔和样本数增长都会扩大磁盘。remote_write 阻塞时 WAL 可能持续积压,应检查远端、网络、队列容量和失败重试。

五、紧急止血

  • 临时扩容磁盘,为恢复争取时间;

  • 停止新增高基数指标或降低非核心抓取频率;

  • 修复 remote_write 阻塞;

  • 通过受支持的保留配置和管理接口处理历史数据;

  • 操作前备份并记录目录状态,避免直接删除 WAL。

六、长期治理

按团队建立指标预算;上线前评审标签设计;监控 active series、ingestion rate、WAL、磁盘增长、压缩失败和查询耗时;需要长期保存时使用 Thanos、Mimir 或其他远程存储,而不是无限扩大本地保留。

总结

Prometheus 容量由序列数、抓取频率、样本大小和保留周期共同决定。解决磁盘问题必须同时治理保留策略和标签基数,才能避免扩容后再次写满。

原创

Prometheus 磁盘占满:TSDB、基数爆炸与数据保留治理

本文链接: Prometheus 磁盘占满:TSDB、基数爆炸与数据保留治理

本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

评论交流

文章目录