OBS 生命周期规则:让过期日志自己过期,不用再手动删

举报
茉莉风铃 发表于 2026/09/12 20:23:25 2026/09/12
【摘要】 对象存储里的日志越堆越多,手动删不现实。本文讲如何用 OBS 生命周期规则按前缀自动过期删除日志,含控制台与 KooCLI 两种方式及常见坑。

一、背景:日志堆在对象存储里为什么是个麻烦

把应用日志、访问日志往对象存储(OBS)里写,是很多团队默认的做法——便宜、稳、不占服务器磁盘。但日志的特点是只进不出:今天写一份、明天写一份,一个月下来桶里可能多出几千个对象,容量计费跟着涨,真要找某一天的日志时还得翻半天。

手动去控制台点选删除,数量少还能忍;对象一多,根本不现实,而且容易误删。其实 OBS 自带一个功能专门解决这类问题,叫生命周期规则(Lifecycle Rule):你定一条"前缀是 logs/ 的对象,超过 30 天就过期删除"的规则,平台到点自动帮你清理,完全不用人工干预。

这篇文章就把这条规则的玩法讲清楚,包含控制台配置和命令行两种方式,以及几个容易踩的坑。

二、生命周期规则到底能做什么

生命周期规则不是只能"删除"。它针对的是"对象随时间推移应该怎么处理"这件事,常见动作有四类:

动作 含义 典型用途
过期删除(Expiration) 到指定天数后直接删除对象 清理临时日志、备份
转存储类别(Transition) 到指定天数后从小桶转低频/归档存储 热数据转冷,降成本
清理碎片(AbortIncompleteMultipartUpload) 删除未完成的分片上传 避免大文件分片残留占空间
基于前缀/标签筛选 只对符合规则的子集生效 不同目录不同策略

要注意的是,"转存储类别"和"删除"是两件事。转存储类别只是把对象从标准存储挪到更便宜的归档存储,对象还在;只有"过期删除"才会真正清掉它。日志清理一般只关心删除,所以下面例子以过期删除为主。

三、在控制台配置一条清理规则

最直观的方式是控制台,步骤如下:

  1. 登录 OBS 控制台,进入目标桶的详情页。
  2. 左侧菜单找到「生命周期」并点击,再点「创建规则」。
  3. 规则名称随便填,比如 expire-logs;状态保持「启用」。
  4. 作用范围选「按前缀」,填 logs/(注意斜杠,表示只匹配这个目录下的对象)。
  5. 过期时间填 30,意思是对象最后修改时间超过 30 天后自动删除。
  6. 如果还想清理大文件的分片上传残留,把「碎片管理」也打开,设为 7 天。
  7. 确认无误点「创建」,规则立即生效(实际清理动作通常在次日统一执行)。

这里的前缀 logs/ 必须和你的对象键(Key)对得上。假如你的日志上传时 key 是 app/logs/2026-08-30.log,那前缀就得写 app/logs/ 才能命中,写成 logs/ 就匹配不到。这是最常见的配置失误。

四、用命令行配置,更适合写进自动化

图形界面点一次能解决一个桶,但如果你管着十几个桶、或者想把它写进基础设施即代码(IaC)脚本里,命令行更合适。OBS 的生命周期规则用一段 XML 描述,下面这段表示"logs/ 前缀的对象 30 天过期、分片 7 天清理":

<LifecycleConfiguration>
  <Rule>
    <ID>expire-logs</ID>
    <Prefix>logs/</Prefix>
    <Status>Enabled</Status>
    <Expiration>
      <Days>30</Days>
    </Expiration>
    <AbortIncompleteMultipartUpload>
      <DaysAfterInitiation>7</DaysAfterInitiation>
    </AbortIncompleteMultipartUpload>
  </Rule>
</LifecycleConfiguration>

把上面内容存成 lifecycle.xml,用 KooCLI 提交给指定桶:

hcloud obs lifecycle put --bucket my-log-bucket --body ./lifecycle.xml

--bucket 换成你自己的桶名即可。提交成功后,可以用 hcloud obs lifecycle get --bucket my-log-bucket 把当前规则拉回来核对。SDK 侧(Java/Python/Go 等)也是同样的 XML 结构,只是包成了对应语言的客户端方法,字段名一一对应。

五、几个容易踩的坑

第一,规则不是实时删除。OBS 的生命周期清理是批处理任务,一般每天跑一次,所以你今天设了 30 天过期,第 31 天才会被清,不是一跨过午夜立刻没。别因为"设了怎么还没删"就以为配置失败的。

第二,前缀大小写和斜杠敏感Logs/logs/ 是不同的;漏了结尾斜杠可能把同名文件也误伤。建议先用 hcloud obs lifecycle get 看实际生效的规则,或者在测试桶里放一个对象验证逻辑再上生产。

第三,转存储类别和删除别混为一谈。如果你只想要"降成本保留",用 Transition 转到归档;如果确实不要了,才用 Expiration。两者可以同一条规则里共存(先转冷、再删除),但顺序要想清楚。

第四,多规则之间是叠加的。桶里可以有多条生命周期规则,对象只要命中任意一条的删除条件就会被删。规则多了之后,建议用统一的命名规范(比如按业务前缀命名),免得自己都忘了哪条在管什么。

六、小结

日志进对象存储容易,出对象存储难,生命周期规则就是补上"出"这一环的。核心就三件事:想清楚是按前缀还是按标签筛选、想清楚是转冷还是直接删、想清楚保留多少天。配置完用命令行拉一次核对,比在控制台凭记忆点更靠谱。这种"设一次、长期自动跑"的能力,本质上就是把运维里最无聊的清理动作,交给平台按时执行,人只负责定规则。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。