Gostaria de representar graficamente o tamanho (em bytes e número de itens) de um bucket do Amazon S3 e estou procurando uma maneira eficiente de obter os dados.
As ferramentas s3cmd fornecem uma maneira de obter o tamanho total do arquivo s3cmd du s3://bucket_name
, mas estou preocupado com sua capacidade de escalar, pois parece que ele busca dados sobre cada arquivo e calcula sua própria soma. Como a Amazon cobra usuários em GB-meses, parece estranho que eles não exponham esse valor diretamente.
Embora a API REST da Amazon retorne o número de itens em um bucket, o s3cmd não parece expô-lo. Eu poderia fazer, s3cmd ls -r s3://bucket_name | wc -l
mas isso parece um hack.
A biblioteca Ruby AWS :: S3 parecia promissora, mas fornece apenas o número de itens do balde, não o tamanho total do balde.
Alguém conhece outras ferramentas ou bibliotecas de linha de comando (prefere Perl, PHP, Python ou Ruby) que fornecem maneiras de obter esses dados?
fonte
Respostas:
A CLI da AWS agora suporta o
--query
parâmetro que aceita expressões JMESPath .Isso significa que você pode somar os valores de tamanho fornecidos
list-objects
usandosum(Contents[].Size)
e contar comolength(Contents[])
.Isso pode ser executado usando a CLI oficial da AWS como abaixo e foi introduzido em fevereiro de 2014
fonte
s4cmd du s3://bucket-name
s3cmd
deve ter as mesmas despesas gerais queAWS CLI
. No código mostrado,s3cmd
faça uma solicitação para cada diretório em um bucket.aws s3api --profile PROFILE_NAME list-objects --bucket BUCKET_NAME --output json --query "[sum(Contents[].Size), length(Contents[])]" | awk 'NR!=2 {print $0;next} NR==2 {print $0/1024/1024/1024" GB"}'
s4cmd du
é maravilhoso, obrigado @Brent Faust! pequena nota (para os envolvidos) que você precisa adicionar-r
para obter também o tamanho dos subdiretórios.Agora isso pode ser feito trivialmente apenas com o cliente oficial da linha de comando da AWS:
Documentação oficial
Isso também aceita prefixos de caminho se você não quiser contar todo o intervalo:
fonte
Console da AWS:
A partir de 28 de julho de 2015, você poderá obter essas informações via CloudWatch . Se você deseja uma GUI, acesse o console do CloudWatch : (Escolha Região>) Métricas> S3
Comando da CLI da AWS:
Isso é muito mais rápido que alguns dos outros comandos publicados aqui, pois não consulta o tamanho de cada arquivo individualmente para calcular a soma.
Importante : Você deve especificar StorageType e BucketName no argumento de dimensões, caso contrário você não obterá resultados. Tudo que você precisa mudar é a
--start-date
,--end-time
, eValue=toukakoukan.com
.Aqui está um script que você pode usar para evitar ter de especificar
--start-date
e--end-time
manualmente.fonte
Invalid value ('1525354418') for param timestamp:StartTime of type timestamp
O s3cmd pode fazer isso:
s3cmd du s3://bucket-name
fonte
BotoClientError: Bucket names cannot contain upper-case characters when using either the sub-domain or virtual hosting calling format.
para buckets com caracteres maiúsculos.Se você baixar um relatório de uso , poderá representar graficamente os valores diários para o
TimedStorage-ByteHrs
campo.Se você quiser esse número no GiB, apenas divida por
1024 * 1024 * 1024 * 24
(isso é GiB-horas para um ciclo de 24 horas). Se você quiser o número em bytes, apenas divida por 24 e faça um gráfico.fonte
Usando as ferramentas de linha de comando oficiais do AWS s3:
Este é um comando melhor, basta adicionar os 3 parâmetros a
--summarize --human-readable --recursive
seguiraws s3 ls
.--summarize
não é necessário, mas fornece um toque agradável no tamanho total.fonte
s4cmd é a maneira mais rápida que eu encontrei (um utilitário de linha de comando escrito em Python):
Agora, para calcular o tamanho inteiro do balde usando vários segmentos:
fonte
s4cmd du s3://123123drink
não retornará simplesmente o tamanho do balde. Para obter o tamanho do balde você adicionar o recursiva-r
, como este: s4cmd du -r s3: // 123123drink-r
ao exemplo acima para evitar confusão quando as pessoas estão usando pastas simuladas no S3).Eu usei a API REST / Curl S3 listada anteriormente neste segmento e fiz isso:
fonte
Você pode usar o utilitário s3cmd, por exemplo:
fonte
Assim, percorrendo a API e reproduzindo as mesmas consultas, o S3 produzirá todo o conteúdo de um bucket em uma solicitação e não precisará descer para diretórios. Os resultados exigem apenas a soma dos vários elementos XML, e não as chamadas repetidas. Eu não tenho um balde de amostra com milhares de itens, então não sei o quão bem ele será dimensionado, mas parece razoavelmente simples.
fonte
... Um pouco tarde, mas a melhor maneira que encontrei é usando os relatórios no portal da AWS. Fiz uma aula de PHP para baixar e analisar os relatórios. Com ele, você pode obter o número total de objetos para cada bloco, tamanho total em GB ou byte hrs e muito mais.
Confira e deixe-me saber se foi útil
AmazonTools
fonte
Eu recomendo usar o Relatório de uso do S3 para baldes grandes , consulte o meu Como fazer. Como fazer o download Basicamente, você precisa fazer o download do serviço Relatório de uso do S3 do último dia com Timed Storage - Byte Hrs e analisá-lo para obter o uso do disco.
fonte
A documentação da AWS informa como fazê-lo:
Esta é a saída que você obtém:
fonte
Para uma abordagem realmente de baixa tecnologia: use um cliente S3 que possa calcular o tamanho para você. Estou usando o Panic's Transmit, clique em um balde, faça "Obter informações" e clique no botão "Calcular". Não tenho certeza de quão rápido ou preciso é em relação a outros métodos, mas parece devolver o tamanho que eu esperava.
fonte
Como existem tantas respostas, achei que participaria da minha própria. Eu escrevi minha implementação em c # usando o LINQPad. Copie, cole e insira a chave de acesso, chave secreta, terminal da região e nome do bloco que deseja consultar. Além disso, certifique-se de adicionar o pacote de nuget do AWSSDK.
Testando contra um dos meus baldes, me deu uma contagem de 128075 e um tamanho de 70,6 GB. Eu sei que é 99,9999% exato, então estou bem com o resultado.
fonte
Se você deseja obter o tamanho do AWS Console:
Por padrão, você deve ver Métrica de Armazenamento do bucket
fonte
Sei que essa é uma pergunta mais antiga, mas aqui está um exemplo do PowerShell:
Get-S3Object -BucketName <buckename> | select key, size | foreach {$A += $_.size}
$A
contém o tamanho do bucket e existe um parâmetro keyname se você deseja apenas o tamanho de uma pasta específica em um bucket.fonte
Para verificar o tamanho de todos os buckets, tente este script bash
fonte
Você pode usar
s3cmd
:ou
Ele fornece o total de objetos e o tamanho do balde de uma forma muito legível.
fonte
du
lista percorrer todos os objetos ou recuperar os metadados? Gostaria realmente de uma versão api da versão de relatórios ou do que é exibido no console do aws ...Olá, existe uma ferramenta de pesquisa de metadados para o AWS S3 em https://s3search.p3-labs.com/ . Essa ferramenta fornece estatísticas sobre objetos em um bucket com pesquisa em metadados.
fonte
O Hanzo S3 Tools também faz isso. Depois de instalado, você pode:
Mas acredito que isso também é resumido no lado do cliente e não é recuperado pela API da AWS.
fonte
Pelo programa Cloudberry também é possível listar o tamanho do balde, a quantidade de pastas e o total de arquivos, clicando em "propriedades" logo em cima do balde.
fonte
Se você não quiser usar a linha de comando, no Windows e no OSX, existe um aplicativo de gerenciamento remoto de arquivos de uso geral chamado Cyberduck . Entre no S3 com seu par de chaves secretas / de acesso, clique com o botão direito do mouse no diretório e clique em
Calculate
.fonte
Eu escrevi um script Bash, s3-du.sh, que lista os arquivos no bucket com s3ls e imprime a contagem de arquivos e tamanhos como
Script completo:
Ele faz o tamanho do subdiretório, pois a Amazon retorna o nome do diretório e o tamanho de todo o seu conteúdo.
fonte
O CloudWatch agora possui um painel de serviço S3 padrão, que o lista em um gráfico chamado "Média de bytes de tamanho do balde". Acho que esse link funcionará para qualquer um que já esteja conectado ao AWS Console:
fonte
A maneira a seguir usa o AWS PHP SDK para obter o tamanho total do bucket.
fonte
Isso funciona para mim ..
fonte