Por que há uma discrepância entre minhas métricas do CloudWatch e as métricas de armazenamento da AWS CLI para o Amazon S3?

Data da última atualização: 03/12/2021

Estou vendo uma discrepância entre as métricas do Amazon CloudWatch e as métricas de armazenamento da AWS Command Line Interface (AWS CLI) para o Amazon Simple Storage Service (Amazon S3). Por que há uma diferença tão grande no tamanho de armazenamento relatado entre as duas origens?

Breve descrição

Se houver uma discrepância entre as métricas de armazenamento do CloudWatch para o Amazon S3 e as métricas calculadas usando a AWS CLI, verifique o seguinte:

  • Versionamento de objetos.
    Observação: o recurso de versionamento de objetos no Amazon S3 mantém várias versões de um objeto no seu bucket. Por padrão, o versionamento de objetos do Amazon S3 está desabilitado em buckets, e você deve habilitar o recurso explicitamente. Além disso, os cálculos de métrica de armazenamento da AWS CLI contam apenas a versão e o tamanho mais recentes de cada objeto armazenado no bucket.
  • Carregamentos fracionados incompletos.
    Observação: carregamentos fracionados incompletos não são incluídos nos cálculos de armazenamento da AWS CLI, mas são calculados como armazenamento nas métricas do CloudWatch.

Para identificar a causa da discrepância entre os relatórios, verifique se você habilitou o versionamento de objetos e procure carregamentos fracionados no seu bucket. Esses dois fatores podem resultar em um aumento no valor do tamanho do bucket calculado no CloudWatch. Para obter mais informações, consulte Métricas de armazenamento diário do Amazon S3 CloudWatch para buckets.

Dica: se você tem carregamentos fracionados incompletos no Amazon S3, considere criar uma regra de configuração de ciclo de vida. Essa regra de configuração de ciclo de vida limpa automaticamente quaisquer partes incompletas, reduzindo os custos do armazenamento de dados. Observe que regras de ciclo de vida operam de forma assíncrona e, portanto, pode haver um atraso na operação. Porém, assim que os objetos forem marcados para exclusão, você não será mais cobrado pelo armazenamento, mesmo que o objeto ainda não tenha sido removido.

Além disso, as métricas de monitoramento do Amazon S3 são registradas uma vez por dia e, portanto, podem não exibir as informações mais atualizadas. Enquanto isso, o CloudWatch monitora seus recursos e aplicações da AWS em tempo real.

Resolução

Métricas de armazenamento diário no CloudWatch

No CloudWatch, a métrica BucketSizeBytes captura todos os tipos de armazenamento do Amazon S3 e do Amazon S3 Glacier, versões de objetos e todos os carregamentos fracionados incompletos. Esse valor é calculado somando-se todos os tamanhos de objetos, metadados no seu bucket (objetos atuais e não atuais) e todos os tamanhos de carregamentos fracionados incompletos. Por exemplo, a métrica BucketSizeBytes calculará a quantidade de dados (em bytes) armazenados em um bucket do Amazon S3 em todas essas classes de armazenamento de objetos:

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

Além disso, a métrica NumberOfObjects no CloudWatch contém o número total de objetos armazenados em um bucket para todas as classes de armazenamento. Esse valor conta todos os objetos no intervalo (atuais e não atuais), juntamente com o número total de partes para qualquer carregamento fracionado incompleto. A métrica NumberOfObjects também calcula o número total de objetos para todas as versões de objetos no seu bucket. Por exemplo, se você tiver duas versões do mesmo objeto, elas serão contadas como dois objetos separados. Para obter mais informações, consulte Métricas e dimensões.

Cálculos de armazenamento diário usando a AWS CLI

Para calcular as métricas de armazenamento do Amazon S3 usando a AWS CLI, use a seguinte sintaxe de comando:

aws s3 ls --summarize --human-readable --recursive s3://bucketname | grep -i total

Essa sintaxe de comando calcula o número total e o tamanho dos objetos no bucket do Amazon S3. No entanto, observe que somente a versão atual de cada objeto armazenado no bucket (e seu tamanho) são calculados. Carregamentos fracionados, marcadores de exclusão e versões não atuais de cada objeto não são calculados para o tamanho total do bucket ou o número total de objetos.

Carregamentos fracionados incompletos

aws s3api list-multipart-uploads --bucket <bucket-example>

Em seguida, liste todos os objetos no carregamento fracionado, usando o comando list-parts e seu valor UploadId:

aws s3api list-parts --bucket <bucket-example> --key large_test_file --upload-id <examplevalue>

Criar uma regra de ciclo de vida

Para excluir carregamentos fracionados automaticamente, crie uma regra de configuração de ciclo de vida. Siga estas etapas:

1.    Abra o console do Amazon S3.

2.    Escolha a guia Management (Gerenciamento).

3.    Escolha Create new policy (Criar nova política).

4.    Adicione o nome da política.

5.    Escolha Select - Delete expired delete markers or incomplete multipart uploads (Selecionar - excluir marcadores de exclusão ou carregamentos fracionados incompletos.

6.    (Opcional) Se o bucket não tiver versionamento, escolha Delete incomplete multipart uploads (Excluir carregamentos fracionados incompletos).

Versionamento de objetos

Para revisar e auditar seu bucket do Amazon S3 quanto a diferentes versões de objetos, use a lista de inventário do Amazon S3. Um arquivo de lista de inventário do Amazon S3 contém uma lista dos objetos no bucket de origem e metadados de cada objeto. O arquivo da lista de inventário capturará metadados, como nome do bucket, tamanho do objeto, classe de armazenamento e ID da versão.