记一次Prometheus的WAL异常,导致服务器磁盘占用过高
发布时间:2026/10/7 8:17:07 锦皓数字建站

一、问题描述国庆假期期间群里有开发联调环境服务器监控告警具体信息如下登录到服务器之后发现prometheus目目录下面有很多WAL文件总文件大小占用了接近20G,所以触发了上图的空间占用告警二、原因分析理论上prometheus应该配置了WAL日志的压缩和保留策略可以看到Prometheus的pod里面配置文件配置了15天的保留策略理论上不会出现磁盘占用问题--config.file/etc/prometheus/prometheus.yml --storage.tsdb.path/prometheus --storage.tsdb.retention.time15d --web.listen-address:9090当时查看Prometheus日志发现一些关键信息compaction failed corruption in segment /prometheus/wal/00000066 unexpected full record同时还能看到write block Head GC completed Creating checkpoint这些关键日志表明- Prometheus 仍在持续接收监控样本- Head 数据仍可能正常生成新的 block- 但在创建 checkpoint、读取 WAL 段 00000066 时遇到损坏或不完整记录- checkpoint 失败后旧 WAL 无法正常截断- 新 WAL 持续生成最终导致 /data/prometheus/dev-test/wal 占满磁盘。三、解决方案1. 停止 Prometheuskubectl -n monitoring scale deployment/prometheus --replicas0 kubectl -n monitoring get pod -l app.kubernetes.io/nameprometheus必须确认 Prometheus Pod 已终止并确认节点上没有仍在运行的 Prometheus 进程pgrep -af /bin/prometheus|prometheus --config.file || true2. 保留旧 TSDB 并创建新目录STAMP$(date %Y%m%d%H%M%S) BACKUP/data/prometheus/dev-test.corrupt.${STAMP} mv /data/prometheus/dev-test $BACKUP mkdir -p /data/prometheus/dev-test chown --reference$BACKUP /data/prometheus/dev-test chmod --reference$BACKUP /data/prometheus/dev-test ls -ld /data/prometheus/dev-test $BACKUP df -hT /3. 恢复 Prometheuskubectl -n monitoring scale deployment/prometheus --replicas1 kubectl -n monitoring rollout status deployment/prometheus --timeout180s验证kubectl -n monitoring get pod -l app.kubernetes.io/nameprometheus -o wide kubectl -n monitoring logs -l app.kubernetes.io/nameprometheus --since10m四、后续优化1. 存储优化不要把 Prometheus TSDB 放在节点根分区使用独立数据盘或 Kubernetes PVC为 Prometheus 配置明确的存储容量和扩容方案这次开发联调环境应该避免生产环境使用无容量边界的HostPath对 TSDB 目录设置独立的磁盘使用率监控。2. 数据保留和远端存储时间保留和容量保留同时配置通过--storage.tsdb.retention.time与--storage.tsdb.retention.size双重约束重要监控数据使用remote_write写入长期存储明确本地数据丢失后的恢复目标和可接受时间。示例--storage.tsdb.retention.time15d --storage.tsdb.retention.size80GB实际容量应根据磁盘大小、样本量、压缩比例和增长趋势测算不应机械套用示例值。3. 版本和升级评估从2.22.1升级到当前组织批准的稳定版本升级前备份配置、规则、告警和数据目录先在测试环境验证 WAL replay、compaction、remote_write 和规则兼容性4. 告警建议至少配置以下告警文件系统使用率超过 80%、90%、95%Prometheus TSDB WAL 目录持续增长Prometheus compaction 失败Prometheus WAL 损坏或 checkpoint 失败Prometheus readiness 失败抓取目标大量丢失Prometheus 重启次数异常远端写入失败或积压。5. 运维巡检如果是生产环境建议每日或每小时执行只读巡检df -hT / du -sxh /data/prometheus/dev-test du -sxh /data/prometheus/dev-test/wal find /data/prometheus/dev-test/wal -maxdepth 1 -type f | wc -l kubectl -n monitoring get pod -l app.kubernetes.io/nameprometheus kubectl -n monitoring logs -l app.kubernetes.io/nameprometheus --since1h \ | grep -Ei corruption|compaction failed|checkpoint|out of space|error
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。