低成本日志存储的解决方案:在 VictoriaLogs 的基础上增加 S3 的备份和恢复功能
Posted on 2026-11-10 16:26 ahfuzhang 阅读(8) 评论(0) 收藏 举报作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!
背景
VictoriaLogs(https://github.com/VictoriaMetrics/VictoriaLogs) 是一个性能强悍的日志存储组件。
VictoriaLogs 中通过 -retention 参数来设定日志允许保存的天数。对日志保存天数设定最大值是有意义的:一方面,让系统的资源集中去处理最近 N 天的价值最大的 log;另一方面,淘汰旧日志才能减少存储成本。
为了保障对近期的日志对写入和查询又较快的响应速度,我们购买了比较昂贵的 PVC 存储。
因为 PVC 比较贵,所以 VictoriaLogs 一般只配置 7 天或者 3 天。
但有时候又会要求可以追溯到更远的日志去分析问题。
为此,衍生出了新的需求:
- 超过
-retention配置的日志,可以使用 S3 这样的高性价的对象存储 - 当需要偶尔查询过去的日志时,可以从 S3 上恢复日志,并且可以使用 logsql 来进行分析
VictoriaLogs 目前还不支持上述功能,于是我自己搓了一个出来:
VictoriaLogsS3Adapter
请看:https://github.com/ahfuzhang/VictoriaLogsS3Adapter/blob/main/README_cn.md
整体的架构如下:

部署
提供了命令行工具 victoria_logs_s3_backup,可用于把某一天的日志打包为 tar 文件,然后上传到 S3.
也可以设定在每天的某个时刻进行前一天数据的备份。
当部署环境时 k8s 时,可以在 VLSingle 这个 CRD 对象上增加 containers 的配置,以 sidecar 的方式进行定期备份。具体请看:https://github.com/ahfuzhang/VictoriaLogsS3Adapter/blob/main/docs/vlsingle_backup_cn.md
恢复
我首先实现了一个 victoria logs 的代理服务器,叫做 victoria_logs_s3_restore_svr.
每次查询 vlogs 服务器时,检查 start / end 参数的时间范围,如果对应的数据目录不存在,就从 s3 上下载备份文件,进行恢复,然后再转发请求到 vlogs 进程。
恢复过程中,使用 /tmp/ 目录作为存储即可,无需昂贵的 PVC 支持。
当然,没有免费的午餐 —— 从备份数据查询,必然带来更高的延迟。
部署的细节请见:https://github.com/ahfuzhang/VictoriaLogsS3Adapter/blob/main/docs/k8s_restore_svr_cn.md
实现原理
这个工具能够实现备份和恢复,主要取决于 vlogs 提供的以下能力:
- 日志数据的索引部分和数据部分,是严格按照 YYYYMMDD 这样格式的日期作为目录的
- vlogs 的 http 接口,提供了创建快照和删除快照的能力:
# snapshot 列表
curl http://192.168.1.2:9428/internal/partition/snapshot/list
["/data/partitions/20261104/snapshots/20261104091028-18C876EFEB03599A"]
# 删除快照
curl "http://192.168.1.2:9428/internal/partition/snapshot/delete?path=/data/partitions/20261104/snapshots/20261104091028-18C876EFEB03599A"
# 创建快照
curl "http://192.168.1.2:9428/internal/partition/snapshot/create?partition_prefix=20261104"
# 打包快照文件
cd /home/ahfu/VictoriaLogsData/partitions/20261104/snapshots
tar -cf ~/20261104.tar ./20261104091211-18C876EFEB03599B
- 直接在 vlogs 的数据目录的 partitions 目录下写入 YYYYMMDD 格式的数据文件夹,vlogs 便能够提供查询
由此,基于以上备份和恢复都可以很简单的实现出来。
希望对你有用,Have Fun. 😃

浙公网安备 33010602011771号