如何设置 Loki 保留 30 天并自动清理?
解读
面试官把“CouchDB 岗位”与“Loki 保留策略”放在一起,并不是在考 Loki 本身,而是在验证候选人是否具备“跨系统日志生命周期治理”的实战能力。国内互联网、金融、政企场景下,CouchDB 集群往往以容器或裸金属形态部署在阿里云、腾讯云、华为云或私有 KVM 池,日志统一接入 Loki + Grafana 做可观测性。能否用最小权限、最小资源、最小风险完成“30 天自动清理”,直接体现你对存储成本、合规审计、集群稳定性的平衡能力。回答时务必把“配置项—验证手段—回滚方案”三步讲全,让面试官听到你可落地的 SRE 思维。
知识点
- Loki 存储模型:Index(BoltDB/Shipper、TSDB)+ Chunk(对象存储或文件系统),保留策略必须两端同步。
- compactor 组件:唯一具备“全局删除”能力的单实例角色,必须启用 retention_enabled=true,否则无论配置多久都不会物理删除。
- 保留粒度:table_manager 模式(老版本)与 compactor 模式(2.9+ 推荐)二选一;国内云原生团队 2024 年后基本统一后者。
- 时间单位:Loki 内部全部按小时维度截断,30 天需写成 720h,写 30d 会被直接拒绝。
- 合规红线:金融、证券、医疗客户常要求“删除前 24 h 只读镜像”,需要额外设置 retention_delete_delay=24h。
- 验证命令:logcli query ‘{job=“couchdb”}’ –since=720h –limit=1 若返回空且对象存储 720h 之前前缀消失,证明清理成功。
- 回滚手段:一旦误删,CouchDB 业务日志无法再生,必须提前对 compactor 做快照盘级备份或对象存储版本控制。
答案
生产级落地分三步,全部配置放在单独 ConfigMap 并走 GitOps 审批流,确保可审计。
第一步:启用 compactor 保留
在 loki.yaml 的 compactor 段写入
compactor:
retention_enabled: true # 物理删除开关,**默认 false**
retention_delete_delay: 2h # 国内常规 2 小时缓冲
retention_table_timeout: 600s # 大表删除超时
working_directory: /loki/compactor
并保证 compactor 以单副本 Deployment 运行,反亲和性避开其他组件。
第二步:设置全局保留 30 天
同一配置文件续写
limits_config:
retention_period: 720h # **必须带 h 单位,30d 非法**
max_query_lookback: 720h # 防止用户查到已删数据
max_query_length: 720h
若按租户划分,可在 runtime-config.yaml 里对 CouchDB namespace 单独写
overrides:
couchdb:
retention_period: 720h
第三步:验证与监控
- 上线后立刻执行
logcli query ‘{job=“couchdb”}’ –since=720h –limit=1
预期返回空;若有结果,说明保留未生效。 - 在 Grafana 增加告警:
increase(loki_compactor_deleted_chunks_total[5m]) < 1连续 1 h 为 0 即触发,防止 compactor 僵死。 - 每周抽样核对对象存储 720h 之前前缀是否归零,零则合规。
完成以上三步即可实现30 天自动清理,且满足国内等保、ISO27001 对日志生命周期的审查要求。
拓展思考
- 成本优化:CouchDB 日志量大但价值密度低,可再降采样:Loki 2.9 支持多租户 + 不同 retention_period,把 trace 级日志保留 7 天,错误日志保留 30 天,预计存储费用下降 55%。
- 多云容灾:若使用阿里云 OSS+华为云 OBS 双写,compactor 只能删一方,需自建幂等删除队列(Kafka topic),保证两边最终一致。
- 法律冻结:国内法院调查令常要求指定 instance 日志延长保留 90 天,可在 runtime-config 对该 instance 临时写 retention_period: 2160h,秒级热更新无需重启。
- 与 CouchDB 自身 purge 联动:CouchDB 的 _purge 操作也会生成审计日志,可给这类日志打标 {audit=“purge”},单独保留 180 天,实现数据库与日志系统生命周期对齐。