为什么 Amazon S3 控制台、CloudWatch 和 S3 Storage Lens 的存储和大小指标之间存在差异?

2 分钟阅读
0

我正在比较 Amazon Simple Storage Service(Amazon S3)控制台中的“计算总大小”、Amazon CloudWatch 中的每日桶存储和 Amazon S3 Storage Lens 存储统计管理工具中的“总存储”。我发现这些指标存在差异。

简短描述

当您看到这种差异时,请验证以下情况:

  • 您已启用对象版本控制
    **注意:**Amazon S3 中的对象版本控制功能可在您的桶中保留对象的多个版本。默认情况下,桶上的 Amazon S3 对象版本控制处于关闭状态,您必须明确启用此功能
  • 存在未完成的分段上传。
    **注意:**未完成的分段上传在 Amazon S3 控制台中不可见,但在 CloudWatch 和 Storage Lens 指标中将作为存储的一部分计算。

若要确定报告差异的原因,请检查您是否已启用对象版本控制。另外,请查找您的桶中是否存在任何分段上传。这两个因素可能会导致 CloudWatch 中计算出的桶大小和 S3 Storage Lens 中的总存储量指标的值增加。当您在 Amazon S3 控制台中计算对象的总大小时,这些因素不适用。有关详细信息,请参阅 CloudWatch 中桶的 Amazon S3 每日存储指标

**提示:**如果您在 Amazon S3 中有未完成的分段上传,请考虑创建生命周期配置规则。此生命周期配置规则会自动清理所有未完成的部分,从而降低数据存储成本。请注意,生命周期规则是异步操作的,因此操作可能会延迟。但是,一旦对象被标记为删除,您就不再需要支付存储费用(即使对象尚未被删除)。

请注意,Amazon S3 监控指标每天记录一次。因此,这些指标可能不会显示最新信息。但是,CloudWatch 会实时监控您的 AWS 资源和应用程序。此外,S3 控制台和 Storage Lens 使用基数 2 数转换(/1024)来报告存储指标,而 CloudWatch 默认使用基数 10 转换(/1000)。

解决方法

CloudWatch 中的每日存储指标

在 CloudWatch 中,BucketSizeBytes 指标可捕获所有 Amazon S3 和 Amazon S3 Glacier 存储类型、对象版本以及任何未完成的分段上传。此值是通过汇总所有对象大小、桶中的元数据(当前和非当前对象)以及任何未完成的分段上传大小计算得出的。例如,BucketSizeBytes 指标计算以下所有对象存储类中存储在 Amazon S3 桶中的数据量(以字节为单位):

  • S3 Standard
  • S3 Intelligent-Tiering
  • S3 Standard-IA
  • S3 One Zone-IA
  • S3 Reduced Redundancy Storage
  • S3 Glacier Deep Archive
  • S3 Glacier Flexible Retrieval
  • S3 Glacier Instant Retrieval

CloudWatch 中的 NumberOfObjects 指标计算了您的桶中的以下值:

  • 所有存储类中的对象总数。对于具有版本控制的桶,这包括当前和非当前对象版本以及删除标记。
  • 任何未完成分段上传的分段总数

例如,如果同一对象有两个版本,那么这两个版本算作两个独立的对象。

S3 Storage Lens 控制面板中的“总存储”指标

您可以在 S3 Storage Lens 控制面板的选项卡下方查看总存储量指标。此指标捕获总存储,包括未完成的分段上传、对象元数据和删除标记。要查看非当前版本、未完成分段上传或删除标记所占用空间的确切构成,请检查各个指标:

  • 当前版本字节
  • 非当前版本字节
  • 未完成分段上传字节

这些指标在 AWS Free Tier 下可用。

此外,对象计数指标还包括有关当前和非当前版本、删除标记和未完成分段上传对象计数的信息。对于精细级别信息,请检查指标:

  • 当前版本对象计数
  • 非当前版本对象计数
  • 删除标记对象计数
  • 未完成分段上传对象计数。

有关详细信息,请参阅 Amazon S3 Storage Lens 存储统计管理工具指标词汇表

Amazon S3 控制台中的“计算总大小”

要从 Amazon S3 控制台计算桶的大小,您可以使用计算总大小操作。然后,Amazon S3 会计算您的桶的存储大小。但是,请注意,分段上传以及之前或非当前版本不是在桶总大小中计算的。Amazon S3 仅计算存储在桶中的每个对象的当前或最新版本的对象总数。例如,如果您的桶中某个对象有两个版本,那么 Amazon S3 的存储计算器会将它们仅计为一个对象。因此,Amazon S3 控制台计算的数字小于 CloudWatch 报告的数字。

未完成分段上传

要查看未完成分段上传占用的大小,请在 S3 Storage Lens 控制面板的选项卡下方查看未完成分段上传字节指标。

要查看未完成分段上传列表,请运行 list-multipart-uploads 命令:

aws s3api list-multipart-uploads --bucket BUCKET_EXAMPLE

**注意:**请将 BUCKET_EXAMPLE 替换为您的桶名称。

然后,使用 list-parts 命令和 UploadId 值列出分段上传中的所有对象:

aws s3api list-parts --bucket BUCKET_EXAMPLE --key large_test_file --upload-id EXAMPLE_VALUE

**注意:**请将 BUCKET_EXAMPLE 替换为您的桶名称,将 EXAMPLE_VALUE 替换为您的 UploadId 值。

创建生命周期规则

若要自动删除分段上传,请创建生命周期配置规则

  1. 打开 Amazon S3 控制台。
  2. 选择管理选项卡。
  3. 选择创建新策略
  4. 添加策略的名称。
  5. 选择选择 - 删除过期的删除标记或未完成的分段上传
  6. (可选)如果您的桶不受版本控制,请选择删除未完成的分段上传

对象版本控制

若要查看和审核您的 Amazon S3 桶中是否存在不同对象版本,请使用 Amazon S3 清单列表。Amazon S3 清单列表文件包含源桶中对象的列表以及每个对象的元数据。清单列表文件会捕获桶名称、对象大小、存储类和版本 ID 等元数据信息。要计算当前和非当前版本占用的大小,请分别检查 S3 Storage Lens 控制面板指标当前版本字节非当前版本字节

相关信息

示例 8: 用于放弃分段上传的生命周期配置

即将过期的对象

CloudWatch 中桶的 Amazon S3 每日存储指标

AWS 官方
AWS 官方已更新 10 个月前