Prometheus TSDB保留时间从1y调整为100d后未释放磁盘空间问题咨询
Prometheus TSDB保留时间修改后不释放磁盘空间问题解答
修改保留时间配置后Prometheus不会立刻自动清理过期数据释放磁盘,需要符合其内部的块清理逻辑才会执行删除操作,未生效通常有以下几种原因:
- 数据块清理规则限制
Prometheus TSDB采用块存储结构,默认每2小时生成一个新的实时写入块,运行超过15天的块会被合并为更大的持久化块。清理逻辑只会删除整个块的所有数据都超出保留时长的封闭块,不会单独清理块内的部分过期数据。你之前设置的1年保留周期会生成大量时间跨度远大于100天的大块,只有当整个大块的最新数据也超过100天阈值时,才会被整体删除释放空间。 - 配置未正确生效
首先确认你的配置修改已经被Prometheus加载:- 如果是通过启动参数
--storage.tsdb.retention.time设置的保留时间,修改后必须重启Prometheus进程才会生效 - 可以通过Prometheus内置的
/status页面查看Storage Retention字段,确认当前生效的保留时间是否为100d
- 如果是通过启动参数
- 保留规则优先级冲突
如果你同时配置了磁盘容量保留参数--storage.tsdb.retention.size,Prometheus会采用「时间保留阈值/容量保留阈值」哪个先触发就执行哪个的规则,需要确认该参数没有设置的比100d对应存储容量更大,导致优先触发容量保留规则。
如果需要手动触发立即清理,可以执行以下操作:
- 启动Prometheus时添加
--web.enable-admin-api参数开启管理API权限 - 调用清理接口执行过期数据清理:
curl -XPOST http://<你的Prometheus访问地址>:9090/api/v1/admin/tsdb/clean_tombstones
注:该接口只会清理已经标记为待删除的块,不会修改TSDB的块结构,不会影响正常写入
排查小提示:如果等待超过24小时仍然没有数据清理动作,可以查看Prometheus运行日志,确认是否存在块文件损坏、磁盘读写权限不足等报错,此类异常会导致清理流程中断。
内容的提问来源于stack exchange,提问作者howhornyareyou
相关产品推荐
相关产品推荐

