17.2.5 数据存储路径与保留策略
Prometheus 的时序数据默认存放在本地 TSDB,合理规划数据目录与保留策略是稳定运行的关键。本节通过原理草图、配置示例、命令解释、排错与练习,确保可落地实施。
原理草图:TSDB 数据写入与保留清理流程
数据存储路径配置(示例与命令)
- 规划独立目录并赋权:
# 规划独立数据盘路径
sudo mkdir -p /data/prometheus
sudo chown -R prometheus:prometheus /data/prometheus
# 解释:prometheus 用户需要写入 WAL/blocks
- 启动参数示例(systemd):
# /etc/systemd/system/prometheus.service
[Service]
ExecStart=/usr/local/bin/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/data/prometheus \
--web.listen-address=0.0.0.0:9090
- 预期效果:启动后生成目录结构
ls -l /data/prometheus
# 预期出现:blocks/ wal/ chunks_head/
保留策略配置(时间+容量)
# /etc/systemd/system/prometheus.service(追加)
ExecStart=/usr/local/bin/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/data/prometheus \
--storage.tsdb.retention.time=30d \
--storage.tsdb.retention.size=50GB
- 解释:任一条件满足即清理最旧块;生产环境务必显式配置。
容量与磁盘规划(示例计算)
假设:
- 采样 5000 series
- 15s 采样间隔
- 粗略估算 1~2 字节/样本压缩后
粗估容量 ≈ 5000 * (86400/15) * 2 * 30 ≈ 1.7GB/月
建议预留 2~3 倍:至少 5GB+(实际以压测为准)
常用核查与排错
- 检查 Prometheus 启动参数是否生效:
ps -ef | grep prometheus | grep -- '--storage.tsdb'
- 查看数据目录 I/O 与空间:
df -h /data/prometheus
iostat -x 1 3
- 常见问题与处理:
1) 目录权限不足
# 报错:permission denied
sudo chown -R prometheus:prometheus /data/prometheus
2) 磁盘满导致 WAL 写入失败
# 处理:临时扩容或缩短保留时间
sudo systemctl stop prometheus
# 调整 retention 后再启动
sudo systemctl daemon-reload
sudo systemctl start prometheus
3) 误删 blocks 导致数据丢失
- 只能从备份恢复或重建,不要手工删除子目录。
备份与迁移示例(停机一致性)
# 停机迁移,保证 WAL 与 blocks 一致
sudo systemctl stop prometheus
# 迁移数据目录
rsync -aH /data/prometheus/ /backup/prometheus/
# 恢复后重新指定路径并启动
sudo systemctl start prometheus
练习
1) 配置 Prometheus 使用 /var/lib/prometheus 作为数据目录,并设置保留时间为 7d。验证目录结构是否生成。
2) 人为将保留大小设置为 200MB,观察旧块是否被清理(可查看 blocks 目录下时间范围变化)。
3) 模拟权限错误(临时改权限为 700),观察启动日志并恢复。