Me gustaría graficar el tamaño (en bytes y # de elementos) de un bucket de Amazon S3 y estoy buscando una forma eficiente de obtener los datos.
Las herramientas s3cmd proporcionan una forma de obtener el tamaño total del archivo s3cmd du s3://bucket_name
, pero me preocupa su capacidad de escalar, ya que parece que obtiene datos sobre cada archivo y calcula su propia suma. Dado que Amazon cobra a los usuarios en GB-Months, parece extraño que no expongan este valor directamente.
Aunque la API REST de Amazon devuelve la cantidad de elementos en un cubo, s3cmd no parece exponerlo. Podría hacerlo, s3cmd ls -r s3://bucket_name | wc -l
pero eso parece un truco.
La biblioteca Ruby AWS :: S3 parecía prometedora, pero solo proporciona el número de elementos del depósito, no el tamaño total del depósito.
¿Alguien conoce alguna otra herramienta de línea de comandos o bibliotecas (prefiera Perl, PHP, Python o Ruby) que proporcionen formas de obtener estos datos?
fuente
Respuestas:
La AWS CLI ahora admite el
--query
parámetro que toma expresiones JMESPath .Esto significa que puede sumar los valores de tamaño dados
list-objects
usandosum(Contents[].Size)
y contar comolength(Contents[])
.Esto se puede ejecutar utilizando la AWS CLI oficial como se muestra a continuación y se introdujo en febrero de 2014
fuente
s4cmd du s3://bucket-name
s3cmd
debería tener los mismos gastos generales queAWS CLI
. En el código que muestra,s3cmd
haga una solicitud para cada directorio en un depósito.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
es maravilloso, gracias @Brent Faust! pequeña nota (para los interesados) que debe agregar-r
para obtener también los tamaños de los subdirectorios.Esto ahora se puede hacer trivialmente solo con el cliente oficial de línea de comandos de AWS:
Documentación oficial
Esto también acepta prefijos de ruta si no desea contar el depósito completo:
fuente
Consola de AWS:
A partir del 28 de julio de 2015 , puede obtener esta información a través de CloudWatch . Si desea una GUI, vaya a la consola de CloudWatch : (Elija Región>) Métricas> S3
Comando de la CLI de AWS:
Esto es mucho más rápido que algunos de los otros comandos publicados aquí, ya que no consulta el tamaño de cada archivo individualmente para calcular la suma.
Importante : debe especificar StorageType y BucketName en el argumento de dimensiones; de lo contrario, no obtendrá resultados. Todo lo que tiene que cambiar es el
--start-date
,--end-time
yValue=toukakoukan.com
.Aquí hay un script bash que puede usar para evitar tener que especificar
--start-date
y--end-time
manualmente.fuente
Invalid value ('1525354418') for param timestamp:StartTime of type timestamp
s3cmd puede hacer esto:
s3cmd du s3://bucket-name
fuente
BotoClientError: Bucket names cannot contain upper-case characters when using either the sub-domain or virtual hosting calling format.
para cubos con caracteres en mayúscula.Si descarga un informe de uso , puede representar gráficamente los valores diarios del
TimedStorage-ByteHrs
campo.Si desea ese número en GiB, simplemente divídalo entre
1024 * 1024 * 1024 * 24
(eso es GiB-horas para un ciclo de 24 horas). Si desea el número en bytes, simplemente divídalo entre 24 y grafique.fuente
Usando las herramientas oficiales de línea de comandos de AWS s3:
Este es un comando mejor, simplemente agregue los siguientes 3 parámetros
--summarize --human-readable --recursive
despuésaws s3 ls
.--summarize
aunque no es obligatorio, le da un buen toque al tamaño total.fuente
s4cmd es la forma más rápida que he encontrado (una utilidad de línea de comandos escrita en Python):
Ahora para calcular el tamaño completo del cubo con múltiples hilos:
fuente
s4cmd du s3://123123drink
no devolverá simplemente el tamaño del cubo. Para obtener el tamaño del cubo, agregue el recursivo-r
, de esta manera: s4cmd du -r s3: // 123123drink-r
al ejemplo anterior para evitar confusiones cuando las personas usan carpetas simuladas en S3).He utilizado la API S3 REST / Curl enumerados anteriormente en este hilo y hice esto:
fuente
Puede usar la utilidad s3cmd, por ejemplo:
fuente
Entonces, al navegar por la API y reproducir algunas consultas, S3 producirá todo el contenido de un depósito en una solicitud y no es necesario que descienda a los directorios. Los resultados solo requieren sumar a través de los diversos elementos XML, y no llamadas repetidas. No tengo un cubo de muestra que tenga miles de artículos, así que no sé qué tan bien se escalará, pero parece razonablemente simple.
fuente
... Un poco tarde, pero la mejor manera que encontré fue usando los informes en el portal de AWS. Hice una clase de PHP para descargar y analizar los informes. Con él, puede obtener el número total de objetos para cada depósito, el tamaño total en GB o horas de byte y más.
Compruébalo y avísame si fue útil
AmazonTools
fuente
Recomiendo usar el Informe de uso S3 para grandes depósitos , consulte mi Cómo para obtenerlo. Básicamente, debe descargar el Informe de uso para el servicio S3 durante el último día con Almacenamiento temporizado - Byte Hrs y analizarlo para obtener el uso del disco.
fuente
La documentación de AWS le dice cómo hacerlo:
Este es el resultado que obtienes:
fuente
Para un enfoque realmente de baja tecnología: use un cliente S3 que pueda calcular el tamaño por usted. Estoy usando la transmisión de pánico, haga clic en un cubo, haga "Obtener información" y haga clic en el botón "Calcular". No estoy seguro de cuán rápido o preciso es en relación con otros métodos, pero parece devolver el tamaño que esperaba que fuera.
fuente
Como hay tantas respuestas, pensé que me ayudaría con las mías. Escribí mi implementación en C # usando LINQPad. Copie, pegue e ingrese la clave de acceso, la clave secreta, el punto final de la región y el nombre del depósito que desea consultar. Además, asegúrese de agregar el paquete nuget AWSSDK.
Probando contra uno de mis cubos, me dio una cuenta de 128075 y un tamaño de 70.6GB. Sé que es 99.9999% de precisión, así que estoy bien con el resultado.
fuente
Si desea obtener el tamaño de la consola de AWS:
De forma predeterminada, debería ver Métrica de almacenamiento del depósito
fuente
Sé que esta es una pregunta anterior, pero aquí hay un ejemplo de PowerShell:
Get-S3Object -BucketName <buckename> | select key, size | foreach {$A += $_.size}
$A
contiene el tamaño del depósito, y hay un parámetro de nombre de clave si solo desea el tamaño de una carpeta específica en un depósito.fuente
Para verificar el tamaño de todos los cubos, pruebe este script bash
fuente
Puedes usar
s3cmd
:o
Da los objetos totales y el tamaño del cubo en una forma muy legible.
fuente
du
Traverse enumera todos los objetos o recupera los metadatos? Realmente me gustaría una versión api de la versión de informes o lo que se muestra en la consola aws ...Hola, hay una herramienta de búsqueda de metadatos para AWS S3 en https://s3search.p3-labs.com/ . Esta herramienta proporciona estadísticas sobre objetos en un cubo con búsqueda en metadatos.
fuente
También Hanzo S3 Tools hace esto. Una vez instalado, puede hacer:
Pero creo que esto también se resume en el lado del cliente y no se recupera a través de la API de AWS.
fuente
Mediante el programa Cloudberry también es posible enumerar el tamaño del depósito, la cantidad de carpetas y el total de archivos, haciendo clic en "propiedades" en la parte superior del depósito.
fuente
Si no desea utilizar la línea de comandos, en Windows y OSX, hay una aplicación de administración remota de archivos de propósito general llamada Cyberduck . Inicie sesión en S3 con su par de claves de acceso / secreto, haga clic derecho en el directorio, haga clic
Calculate
.fuente
Escribí un script Bash, s3-du.sh que enumerará los archivos en un cubo con s3ls, e imprimirá el recuento de archivos y tamaños como
Guión completo:
Lo hace el tamaño del subdirectorio, ya que Amazon devuelve el nombre del directorio y el tamaño de todos sus contenidos.
fuente
CloudWatch tiene ahora un panel de servicio de S3 predeterminado que lo enumera en un gráfico llamado "Promedio de bytes de tamaño de depósito". Creo que este enlace funcionará para cualquier persona que ya haya iniciado sesión en la consola de AWS:
fuente
La siguiente forma utiliza AWS PHP SDK para obtener el tamaño total del depósito.
fuente
Esto funciona para mi ...
fuente