云存储成本失控往往不是突然发生的。一个分析任务可能连续数周读取 Archive 数据,一批临时文件可能持续增长,跨区域流量也可能在无人注意时不断累积。等这些变化出现在月底账单上,团队还要导出对象清单、关联访问日志,再追查服务账号属于哪个作业。
Google Cloud Storage 新增并正式开放了 Storage Intelligence advisor,同时扩展了 storage batch operations。两者形成了一条完整链路:Advisor 负责回答“哪里发生了变化、应该怎么处理”,批量操作则把处理决定应用到数百万乃至数十亿个对象上。
Advisor 把存储分析从数据工程项目变成日常能力
过去,要回答“这些 bucket 里究竟有什么”,通常要维护一套独立的数据管道:
- 定期导出对象清单和元数据;
- 将数据装载到可查询的系统;
- 关联访问量、错误率和账号信息;
- 构建仪表盘并持续维护数据模型。
Storage Intelligence 仍然允许团队使用每日活动数据和元数据快照构建自定义分析,但 Advisor 为不想维护这套管道的团队提供了开箱即用的发现能力。将 Storage Intelligence 启用在组织、文件夹或项目范围后,对应 bucket 的图表和分析结果会直接出现,不需要额外设计 schema 或搭建仪表盘。
Advisor 当前关注的典型变化包括:
- 针对 Coldline 或 Archive 数据的 Class A、Class B 操作突然增加;
- 429 错误率上升,说明请求模式可能正在逼近或超过限制;
- 跨区域网络出口流量异常增加;
- 总存储量高于长期趋势。
这些结果不是拿所有客户共用一条固定阈值,而是基于项目自己的活动和元数据建立基线。分析使用每日快照,因此某一天发生的异常可以在 24 小时内被发现,而不是等到账单周期结束后才暴露。
这里也有一个明确边界:每日快照适合成本、容量和访问模式治理,但它不是秒级监控系统。对于需要实时阻断的安全事件或在线服务故障,仍应配合 Cloud Monitoring、审计日志和告警策略。
一条发现如何变成可执行决策
假设某个失控的分析作业每天对 Archive 对象执行数百万次读取。传统流程通常只能在检索费用出现后开始排查。Advisor 可以将变化定位到相关 bucket、对象前缀和服务账号,并给出与问题匹配的处理方向,例如:
- 将高频访问对象批量转换为 Standard,降低后续检索和操作成本;
- 启用 Autoclass,让存储层级跟随实际访问模式变化;
- 使用 Managed Folders 收紧访问边界,避免作业读取不应接触的数据。
这类建议不能脱离业务语义直接执行。Archive 数据突然变热,可能是失控任务,也可能是一次合法的数据回填或模型训练。因此,处理前至少要确认三个问题:
- 相关服务账号对应哪个任务和负责人?
- 访问增长是临时事件,还是新的长期模式?
- 调整存储类别、权限或保留策略是否会影响合规要求?
Advisor 的价值不是替团队做所有决定,而是缩短“发现异常—定位责任对象—找到可用控制手段”的时间。
Batch operations:把修复动作扩展到海量对象
发现问题只是第一步。跨大量对象更新存储类别、保留策略、标签、元数据或加密设置时,团队还要处理限流、部分失败和重试。Storage batch operations 将这部分执行工作变成托管式、无服务器的批处理任务,并提供进度跟踪和自动重试。
扩展后的能力包括:
- 一个任务可以处理同一项目中的最多 1,000 个 bucket;
- 使用 dry-run 在修改线上对象前预览影响范围、对象数量、总大小和潜在错误;
- 使用基于 Storage Insights 数据集的 CEL 表达式,按存储类别、大小、创建日期或自定义属性筛选对象;
- 对匹配对象批量执行删除、存储类别调整、元数据、标签、保留策略或加密相关变更。
这意味着治理规则可以从“给每个 bucket 写一段脚本”,转变为“定义一次筛选条件并提交一个受管理任务”。
可复制实践:清理 analytics bucket 中的临时对象
下面的命令会创建一个批量删除任务:查找名称以 analytics- 开头的 bucket,并删除其中属于 Standard 存储类别、文件名以 .temp 结尾的对象。
运行前需要修改 PROJECT_ID、LOCATION 和 DATASET_CONFIG。该操作涉及永久删除,建议先通过 batch operations 的 dry-run 模式检查命中对象数量、总大小和潜在错误,再提交真实删除任务。
PROJECT_ID="my-project-id"
LOCATION="us-central1"
DATASET_CONFIG="my-dataset"
JOB_NAME="bulk-delete-temp-objects-$(date +%Y%m%d-%H%M%S)"
gcloud storage batch-operations jobs create "${JOB_NAME}" \
--description="Bulk delete temporary objects in analytics buckets" \
--target-project="${PROJECT_ID}" \
--insights-dataset-config="projects/${PROJECT_ID}/locations/${LOCATION}/datasetConfigs/${DATASET_CONFIG}" \
--bucket-filters="name.startsWith('analytics-')" \
--object-filters="storageClass == 'STANDARD' && name.endsWith('.temp')" \
--delete-object
这条命令把筛选拆成了两层:
--bucket-filters限定目标 bucket,避免扫描项目中的全部存储空间;--object-filters使用 CEL 表达式,只选择 Standard 类别的.temp对象。
在生产环境中,可以进一步收紧条件,例如把创建日期、自定义属性或更精确的名称规则加入对象过滤器。不要仅依靠宽泛的后缀条件删除数据,也不要把生产数据和临时数据混在无法区分的前缀中。
如果 Advisor 发现的不是临时文件增长,而是冷数据突然变热,可以采用同样思路:先按 bucket、前缀、存储类别和访问特征圈定对象,再通过批量操作调整存储类别,而不是直接对整个 bucket 做无差别变更。
落地时建立“发现—审批—执行—复核”闭环
将 Advisor 和 batch operations 引入生产环境时,可以按以下顺序推进:
- 从可见性开始:先在项目或组织范围启用 Storage Intelligence,观察基线和发现结果,不急于自动修改对象。
- 明确责任映射:维护服务账号、作业和团队之间的归属关系,避免发现异常后仍然找不到负责人。
- 把 dry-run 设为必经步骤:批量删除、保留策略和加密变更尤其需要预览影响范围。
- 保留审批边界:Advisor 的发现是决策输入,不应默认等同于可自动执行的变更单。
- 小范围验证:先使用更窄的 bucket、前缀或日期条件,再逐步扩展到多 bucket 任务。
- 执行后复核:检查任务进度、失败对象和后续活动趋势,确认修复确实降低了异常访问或容量增长。
Storage Intelligence advisor 与增强后的 batch operations 已正式可用。它们最适合对象规模巨大、访问模式变化频繁,又不希望持续维护自建清单和分析管道的团队。真正的收益不只是少写几段脚本,而是把存储治理从月底对账和事故救火,变成持续、可追踪且可批量执行的运营流程。