Как я могу получить размер блока Amazon S3?

Путем увеличения числа шпинделей в SAN можно увеличить производительность.

Я не знаю, где математика там, но каждый диск имеет определенное число IOPS, который это может выполнить. Путем добавления большего количества дисков к массиву хранения данных Вы получаете кумулятивный эффект, увеличивающий общий IOPS SAN.

Если можно переполнить больше дисков в единственное 2-3U устройство, можно начать видеть IOPS на увеличение Единицы высоты монтируемого в стойку устройства.

Мне сказали, что можно победить (в производительности) Дисковый массив Волоконно-оптического канала с дисками SATA, если шпиндельное количество является путем в пользу дисков SATA.

XioTech использует дисковый метод виртуализации, который удостоверяется, что Ваши LUNS распространены через каждый шпиндель в массиве, таким образом, они все работают на Вас. Некоторые БЕЗ могут использовать всего несколько дисков в массиве для определенного LUN, и Вы не будете видеть увеличение производительности, возможное при помощи всех дисков сразу.

(Я провел много часов с XioTech specing SAN для крупной Больницы, и это некоторые понятия, я взял разговор с их инженерами.)

Keith

297
задан 6 November 2019 в 15:44
27 ответов

Интерфейс командной строки AWS теперь поддерживает параметр - query , который принимает выражения JMESPath .

Это означает, что вы можете суммировать значения размеров, указанные в list-объекты с использованием суммы (Contents []. Size) и подсчета как length (Contents []) .

Это можно запустить с помощью официального интерфейса командной строки AWS, как показано ниже и был представлен в феврале 2014 г.

 aws s3api list-objects --bucket BUCKETNAME --output json --query "[sum(Contents[].Size), length(Contents[])]"
171
ответ дан 28 November 2019 в 19:13

Если Вы хотите получить размер от Консоли AWS:

  1. Переходят к S3 и нажимают на имя блока
  2. Избранный Выбор вкладки

enter image description here

  1. "Management" вкладка

Metrics По умолчанию, необходимо видеть Метрика устройства хранения данных из блока

2
ответ дан 28 November 2019 в 19:13

Так посылая сообщение-розыгрыш вокруг через API и играя некоторые те же запросы, S3 произведет все содержание блока в одном запросе, и он не должен убывать в каталоги. Результаты, затем просто требующие суммирующий через различные элементы XML и не повторенные вызовы. У меня нет демонстрационного блока, который имеет тысячи объектов, таким образом, я не знаю, как хорошо он масштабируется, но это кажется довольно простым.

6
ответ дан 28 November 2019 в 19:13
  • 1
    Это, действительно кажется, наилучший вариант. Обновит это сообщение в будущем, если оно масштабируется плохо, и я должен сделать что-то еще. Библиотека, которая закончила тем, что обеспечила легкий доступ к необработанным результатам API, была этим PHP один: undesigned.org.za/2007/10/22/amazon-s3-php-class –  Garret Heaton 16 November 2009 в 17:20

... Немного поздно, но, лучший способ, которым я нашел, при помощи отчетов на портале AWS. Я сделал класс PHP для загрузки и парсинга отчетов. С ним можно получить общее количество объектов для каждого блока, общий размер в часы ГБ или байта и т.д.

Проверьте его и сообщите мне, было ли полезно

AmazonTools

4
ответ дан 28 November 2019 в 19:13
  • 1
    Это - интересное решение, хотя немного hackish. Взволнованный по поводу этого повреждение, если/когда Amazon изменяет их сайт, но мне, вероятно, придется испытать это, после того как у меня есть достаточно объектов, что другой путь становится слишком медленным. Другое преимущество этого подхода то, что Вы don' t взимается за любые вызовы API. –  Garret Heaton 21 December 2009 в 18:16
  • 2
    ... предположение, но, если бы Amazon действительно изменяет вид их сайта, я сомневаюсь, что они изменили бы бэкэнд очень, имея в виду ток, ДОБИРАЮТСЯ, и запросы POST должны работать. Я поддержу класс в конечном счете, он действительно повреждается так или иначе, поскольку я часто использую его. –   22 December 2009 в 02:26

Я использовал S3 REST/Curl API, перечисленный ранее в этом потоке, и сделал это:

<?php
if (!class_exists('S3')) require_once 'S3.php';

// Instantiate the class
$s3 = new S3('accessKeyId', 'secretAccessKey');
S3::$useSSL = false;

// List your buckets:
echo "S3::listBuckets(): ";
echo '<pre>' . print_r($s3->listBuckets(), 1). '</pre>';

$totalSize = 0;
$objects = $s3->getBucket('name-of-your-bucket');
foreach ($objects as $name => $val) {
    // If you want to get the size of a particular directory, you can do
    // only that.
    // if (strpos($name, 'directory/sub-directory') !== false)
    $totalSize += $val['size'];
}

echo ($totalSize / 1024 / 1024 / 1024) . ' GB';
?>
6
ответ дан 28 November 2019 в 19:13

s3cmd может сделать это:

s3cmd du s3://bucket-name

107
ответ дан 28 November 2019 в 19:13

Я написал сценарий Bash, s3-du.sh, который будет перечислять файлы в корзине с s3ls и печатать количество файлов и размеры, такие как

s3-du.sh testbucket.jonzobrist.com
149 files in bucket testbucket.jonzobrist.com
11760850920 B
11485205 KB
11216 MB
10 GB

Полный сценарий:

#!/bin/bash

if [ “${1}” ]
then
NUM=0
COUNT=0
for N in `s3ls ${1} | awk ‘{print $11}’ | grep [0-9]`
do
NUM=`expr $NUM + $N`
((COUNT++))
done
KB=`expr ${NUM} / 1024`
MB=`expr ${NUM} / 1048576`
GB=`expr ${NUM} / 1073741824`
echo “${COUNT} files in bucket ${1}”
echo “${NUM} B”
echo “${KB} KB”
echo “${MB} MB”
echo “${GB} GB”
else
echo “Usage : ${0} s3-bucket”
exit 1
fi    

Он делает do размер подкаталога, так как Amazon возвращает имя каталога и размер всего его содержимого.

0
ответ дан 28 November 2019 в 19:13

Также Hanzo S3 Tools делает это. После установки вы можете:

s3ls -s -H bucketname

Но я считаю, что это также суммируется на стороне клиента и не извлекается через API AWS.

0
ответ дан 28 November 2019 в 19:13

Если вы загрузите отчет об использовании , вы можете построить график ежедневных значений для поля TimedStorage-ByteHrs .

Если вам нужно это число в ГиБ, просто разделите на 1024 * 1024 * 1024 * 24 (это ГиБ-часы для 24-часового цикла). Если вам нужно число в байтах, просто разделите на 24 и выйдите на график.

22
ответ дан 28 November 2019 в 19:13

Привет, есть инструмент поиска метданных для AWS S3 по адресу https://s3search.p3-labs.com/ . Этот инструмент дает статистику об объектах в корзине с поиск по метаданным.

0
ответ дан 28 November 2019 в 19:13

By Cloudberry program is also possible to list the size of the bucket, amount of folders and total files, clicking "properties" right on top of the bucket.

0
ответ дан 28 November 2019 в 19:13

Вы можете использовать утилиту s3cmd, например :[1272 impression

6
ответ дан 28 November 2019 в 19:13

s4cmd - это самый быстрый способ, который я нашел (утилита командной строки, написанная на Python):

pip install s4cmd

Теперь, чтобы вычислить весь размер корзины с использованием нескольких потоков:

s4cmd du -r s3://bucket-name
11
ответ дан 28 November 2019 в 19:13

Следующий способ использует AWS PHP SDK для получения общего размера сегмента.

// make sure that you are using correct region (where the bucket is) to get new Amazon S3 client
$client = \Aws\S3\S3Client::factory(array('region' => $region));

// check if bucket exists
if (!$client->doesBucketExist($bucket, $accept403 = true)) {
    return false;
}
// get bucket objects
$objects = $client->getBucket(array('Bucket' => $bucket));

$total_size_bytes = 0;
$contents = $objects['Contents'];

// iterate through all contents to get total size
foreach ($contents as $key => $value) {
   $total_bytes += $value['Size'];
}
$total_size_gb = $total_size_bytes / 1024 / 1024 / 1024;
-1
ответ дан 28 November 2019 в 19:13

Я знаю, что это старый вопрос, но вот пример PowerShell:

Get-S3Object -BucketName | выберите ключ, размер | foreach {$ A + = $ _. size}

$ A содержит размер корзины, и есть параметр имени ключа, если вам просто нужен размер определенной папки в корзине.

1
ответ дан 28 November 2019 в 19:13

Если вы не хотите использовать командную строку в Windows и OSX, есть универсальное приложение для удаленного управления файлами, которое называется Cyberduck . Войдите в S3, используя пару ключей доступа / секретного ключа, щелкните каталог правой кнопкой мыши, выберите Рассчитать .

0
ответ дан 28 November 2019 в 19:13

Использование официальных инструментов командной строки AWS s3:

aws s3 ls s3://bucket/folder --recursive | awk 'BEGIN {total=0}{total+=$3}END{print total/1024/1024" MB"}'

Это лучшая команда, просто добавьте следующие 3 параметра - резюмируйте --человечески читаемый --recursive после aws s3 ls . - суммировать не требуется, хотя дает приятный штрих к общему размеру.

aws s3 ls s3://bucket/folder --summarize --human-readable --recursive
19
ответ дан 28 November 2019 в 19:13

Я рекомендую использовать отчет об использовании S3 для больших сегментов , см. my How To о том, как его получить. Обычно вам нужно загрузить отчет об использовании службы S3 за последний день с Timed Storage - Byte Hrs и проанализировать его, чтобы узнать использование диска.

cat report.csv | awk -F, '{printf "%.2f GB %s %s \n", $7/(1024**3 )/24, $4, $2}' | sort -n
3
ответ дан 28 November 2019 в 19:13

Для действительно низкотехнологичного подхода: используйте клиент S3, который может рассчитать размер за вас. Я использую Panic's Transmit, нажимаю на ведро, делаю «Получить информацию» и нажимаю кнопку «Рассчитать». Я не уверен, насколько он быстр или точен по сравнению с другими методами, но, похоже, возвращает тот размер, который я ожидал.

2
ответ дан 28 November 2019 в 19:13

Консоль AWS:

По состоянию на 28 июля 2015 года вы можете получить эту информацию через CloudWatch . Если вам нужен графический интерфейс, перейдите в консоль CloudWatch : (Выберите Регион>) Метрики> S3

Команда интерфейса командной строки AWS:

Это намного быстрее, чем некоторые другие команды, размещенные здесь, так как он не запрашивает размер каждого файла в отдельности для вычисления суммы.

 aws cloudwatch get-metric-statistics --namespace AWS/S3 --start-time 2015-07-15T10:00:00 --end-time 2015-07-31T01:00:00 --period 86400 --statistics Average --region eu-west-1 --metric-name BucketSizeBytes --dimensions Name=BucketName,Value=toukakoukan.com Name=StorageType,Value=StandardStorage

Важно : Вы должны указать StorageType и BucketName в аргументе измерений, иначе вы не получите результатов. Все, что вам нужно изменить, это - дата начала , - время окончания и Value = toukakoukan.com .


Вот вам вздор сценарий, который можно использовать, чтобы не указывать - дату начала и - время окончания вручную.

#!/bin/bash
bucket=$1
region=$2
now=$(date +%s)
aws cloudwatch get-metric-statistics --namespace AWS/S3 --start-time "$(echo "$now - 86400" | bc)" --end-time "$now" --period 86400 --statistics Average --region $region --metric-name BucketSizeBytes --dimensions Name=BucketName,Value="$bucket" Name=StorageType,Value=StandardStorage
134
ответ дан 28 November 2019 в 19:13

Теперь это можно сделать тривиально с помощью только официального клиента командной строки AWS:

aws s3 ls --summarize --human-readable --recursive s3://bucket-name/

Официальная документация

Это также принимает префиксы пути, если вы не хотите подсчитывать всю корзину:

aws s3 ls --summarize --human-readable --recursive s3://bucket-name/directory
343
ответ дан 28 November 2019 в 19:13

В документации AWS рассказывается, как это сделать:

aws s3 ls s3://bucketnanme --recursive --human-readable --summarize

Это результат, который вы получите:

2016-05-17 00:28:14    0 Bytes folder/
2016-05-17 00:30:57    4.7 KiB folder/file.jpg
2016-05-17 00:31:00  108.9 KiB folder/file.png
2016-05-17 00:31:03   43.2 KiB folder/file.jpg
2016-05-17 00:31:08  158.6 KiB folder/file.jpg
2016-05-17 00:31:12   70.6 KiB folder/file.png
2016-05-17 00:43:50   64.1 KiB folder/folder/folder/folder/file.jpg

Total Objects: 7

   Total Size: 450.1 KiB
3
ответ дан 28 November 2019 в 19:13

Поскольку ответов так много, я решил, что попробую свой собственный. Я написал свою реализацию на C # с помощью LINQPad. Скопируйте, вставьте и введите ключ доступа, секретный ключ, конечную точку региона и имя сегмента, который вы хотите запросить. Кроме того, не забудьте добавить пакет AWSSDK nuget.

При тестировании одного из моих сегментов он дал мне количество 128075 и размер 70,6 ГБ. Я знаю, что точность 99,9999%, так что у меня хороший результат.

void Main() {
    var s3Client = new AmazonS3Client("accessKey", "secretKey", RegionEndpoint.???);
    var stop = false;
    var objectsCount = 0;
    var objectsSize = 0L;
    var nextMarker = string.Empty;

    while (!stop) {
        var response = s3Client.ListObjects(new ListObjectsRequest {
            BucketName = "",
            Marker = nextMarker
        });

        objectsCount += response.S3Objects.Count;
        objectsSize += response.S3Objects.Sum(
            o =>
                o.Size);
        nextMarker = response.NextMarker;
        stop = response.S3Objects.Count < 1000;
    }

    new {
        Count = objectsCount,
        Size = objectsSize.BytesToString()
    }.Dump();
}

static class Int64Extensions {
    public static string BytesToString(
        this long byteCount) {
        if (byteCount == 0) {
            return "0B";
        }

        var suffix = new string[] { "B", "KB", "MB", "GB", "TB", "PB", "EB" };
        var longBytes = Math.Abs(byteCount);
        var place = Convert.ToInt32(Math.Floor(Math.Log(longBytes, 1024)));
        var number = Math.Round(longBytes / Math.Pow(1024, place), 1);

        return string.Format("{0}{1}", Math.Sign(byteCount) * number, suffix[place]);
    }
}
2
ответ дан 28 November 2019 в 19:13

Чтобы проверить размер всех сегментов, попробуйте этот сценарий bash

s3list=`aws s3 ls | awk  '{print $3}'`
for s3dir in $s3list
do
    echo $s3dir
    aws s3 ls "s3://$s3dir"  --recursive --human-readable --summarize | grep "Total Size"
done
1
ответ дан 28 November 2019 в 19:13

Вы можете использовать s3cmd :

s3cmd du s3://Mybucket -H

или

s3cmd du s3://Mybucket --human-readable

Он дает общее объекты и размер ведра в очень удобочитаемой форме.

1
ответ дан 28 November 2019 в 19:13

Это работает на меня...

aws s3 ls s3://bucket/folder/ --recursive | awk '{sz+=$3} END {print sz/1024/1024 "MB"}'
-1
ответ дан 28 November 2019 в 19:13

CloudWatch теперь имеет панель мониторинга службы S3 по умолчанию, которая отображает ее в виде графика «Средний размер сегмента в байтах». Я думаю эта ссылка будет работать для всех, кто уже вошел в консоль AWS:

0
ответ дан 28 November 2019 в 19:13

Теги

Похожие вопросы