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),观察启动日志并恢复。