שאלה איך אני יכול לקבל את הגודל של דלי אמזון S3?


אני רוצה גרף את גודל (בבתים, ו # פריטים) של דלי אמזון S3 ואני מחפש דרך יעילה כדי לקבל את הנתונים.

ה s3cmd כלים מספקים דרך לקבל את גודל הקובץ הכולל באמצעות s3cmd du s3://bucket_name, אבל אני מודאג לגבי היכולת שלה בקנה מידה מאז זה נראה כאילו הוא מביא נתונים על כל קובץ ומחשב סכום משלה. מאז אמזון חיובי משתמשים ב- GB חודשים נראה מוזר כי הם לא חושפים את הערך הזה ישירות.

למרות ש אמזון של REST API מחזירה את מספר הפריטים שבדלי, s3cmd לא נראה לחשוף את זה. אני יכול לעשות s3cmd ls -r s3://bucket_name | wc -l אבל זה נראה כמו גרזן.

רובי AWS :: S3 הספרייה נראה מבטיח, אבל רק מספק את # פריטים דלי, לא את גודל הדלי הכולל.

האם מישהו מודע לכל כלי שורת פקודה אחרת או ספריות (מעדיפים Perl, PHP, Python או Ruby) המספקים דרכים לקבלת נתונים אלה?


253
2017-11-15 00:40




כתבתי כלי לניתוח גודל דלי: github.com/EverythingMe/ncdu-s3 - omribahumi
אני מופתע כי האמזון תשלום עבור שטח, אבל לא מספקים את הגודל הכולל נלקח על ידי S3 S3 פשוט דרך פאנל S3. - Luke
בשבילי רוב התשובות הבאות לקח די הרבה זמן כדי לאחזר את גודל הדלי, אבל זה סקריפט פיתון היה מהיר יותר מאשר רוב התשובות - slsmk.com/getting-the-size-of-an-s3-bucket-using-boto3-for-aws - Vaulstein


תשובות:


AWS CLI תומך כעת --query פרמטר אשר לוקח JMESPath ביטויים.

זה אומר שאתה יכול לסכם את גודל הערכים שניתנו על ידי list-objects באמצעות sum(Contents[].Size) ואת לספור כמו length(Contents[]).

זה יכול להיות מופעל באמצעות הרשמי AWS CLI כמו להלן והוצג ב פברואר 2014

 aws s3api list-objects --bucket BUCKETNAME --output json --query "[sum(Contents[].Size), length(Contents[])]"

148
2017-11-16 23:00



עבור דליים גדולים (גדולים #files), זה איטי להחריד. כלי השירות Python s4cmd "du" הוא במהירות הבזק: s4cmd du s3://bucket-name - Brent Faust
זה מוזר. מהו הפרופיל הכללי של הדלי שלך (רדוד ושומן / עמוק ורזה)? זה נראה כמו s3cmd צריך את אותן תקורה כמו AWS CLI. בתוך ה קוד זה מראה  s3cmd ליצור בקשה עבור כל ספרייה בדלי. - Christopher Hackett
כדי לקבל את זה בפורמט קריא אדם: 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"}' - Sandeep
עכשיו AWS Cloudwatch מציעה "BucketSizeBytes" לכל דלי ערך זה כבר לא הפתרון הנכון. ראה תשובתו של טוקאוקאן להלן. - cce
s4cmd du הוא נפלא, תודה @ Faust בר! הערה קטנה (עבור אלה מודאגים) כי אתה צריך להוסיף -r כדי לקבל את הגדלים של תת ספריות גם כן. - Greg Sadetsky


זה יכול להיעשות טריוויאלי עם רק את שורת הפקודה הרשמי AWS:

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

תיעוד רשמי

זה גם מקבל קידומות נתיב אם אתה לא רוצה לספור את כל הדלי:

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

257
2017-09-09 14:04



זוהי התשובה הטובה ביותר ומעודכנת - Tim
מסכים, זו התשובה הטובה ביותר. - Luis Artola
זה מאוד איטי עבור דליים עם קבצים רבים כפי שהוא בעצם מפרט את כל האובייקטים בדלי לפני הצגת סיכום, ובזה זה לא מהר יותר מאשר תשובה של כריסטופר האקט - חוץ מזה זה הרבה יותר רועש. - Guss
הפעל על מופע EC2 עם אותו אזור של דלי כדי לשפר את זמן האחזור - juanmirocks
אם אתה מעוניין רק גודל סיכום, זה הפתרון המהיר ביותר עדכני ואתה יכול פשוט צינור דרך הזנב כדי למצוא את הערך. - Charlie Hileman


מסוף AWS:

החל מ 28 ביולי 2015 אתה יכול לקבל את המידע הזה באמצעות ענן. אם אתה רוצה GUI, עבור אל קונסולת: (בחר אזור>) מדדים> S3

פקודת AWS CLI:

זה הרבה יותר מהר מאשר כמה פקודות אחרות שפורסמו כאן, כפי שהוא לא שאילתה בגודל של כל קובץ בנפרד כדי לחשב את הסכום.

 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 בארגומנט המאמדים, אחרת לא תקבל תוצאות. כל מה שאתה צריך לשנות הוא --start-date, --end-time, ו Value=toukakoukan.com.


הנה סקריפט bash אתה יכול להשתמש כדי למנוע צורך לציין --start-date ו --end-time ידנית.

#!/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

106
2017-07-31 21:58



או ב את קונסולת CloudWatch: (בחר אזור>) מדדים> S3 - Halil Özgür
זהו ללא ספק הפתרון הקל ביותר והמהיר ביותר. למרבה הצער התשובה היא עדיין רק במקום הרביעי. - luk2302
זה עבד עבור דלי עם 10million + אובייקטים. אבל התסריט הבאש לא החזיר שום דבר, היה צריך ללכת ל- GUI). - Petah
כמו כן יש לציין כי תצטרך לשנות את האזור גם כן - majikman
מאי 2018: שגיאות script עם Invalid value ('1525354418') for param timestamp:StartTime of type timestamp - anneb


s3cmd יכול לעשות את זה :

s3cmd du s3://bucket-name


103
2017-07-08 13:40



תודה. הנה כמה עיתוי. על דלי המכיל מערכת קבצים כפולים s3ql עם כמיליון קבצים באמצעות כ 33 GB של נתונים undupicated, ועל 93000 s3 אובייקטים, s3cmd du לקח בערך 4 דקות כדי לחשב את התשובה. אני סקרן לדעת איך זה להשוות עם גישות אחרות כמו PHP אחד המתואר במקום אחר כאן. - nealmcb
זה איטי בגלל S3 ListObjects להתקשר מחזירה אובייקטים בדפים של 1000 אובייקטים. כפי שאני / O הוא גורם מגביל אני חושב כל פתרון יהיה איטי יחסית מעל 93000 אובייקטים. - David Snabel-Caunt
s4cmd יכול גם לעשות את אותו הדבר, עם יתרון נוסף של ריבוי השחלה את הבקשות ל- API של S3 כדי לחשב את התוצאה מהר יותר. הכלי לא עודכן לאחרונה, אבל העובר על האינטרנט עשוי למצוא אותו שימושי. - Nick Chammas
s4cmd רק מחזירה 0 בשבילי, וחוזרת BotoClientError: Bucket names cannot contain upper-case characters when using either the sub-domain or virtual hosting calling format. עבור דליים עם תווים רישיות. - Lakitu


אם אתה מוריד - דוח שימוש, אתה יכול גרף את ערכי היומיום עבור TimedStorage-ByteHrs שדה.

אם אתה רוצה את המספר הזה ב GiB, פשוט מחלקים 1024 * 1024 * 1024 * 24 (זה GiB שעות עבור מחזור 24 שעות). אם אתה רוצה את המספר בבתים, פשוט לחלק על ידי 24 וגרף משם.


22
2017-12-05 17:22





שימוש הרשמי AWS s3 שורת הפקודה כלים:

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

18
2018-04-23 11:22



ספק את הקישור למקום שבו אמזון בעצם קובע את זה בבקשה. אני לא מוצא את זה. - lobi
docs.aws.amazon.com/cli/latest/index.html - dyltini
docs.aws.amazon.com/cli/latest/reference/s3/ls.html הוא קישור טוב יותר - Ian Bamforth
תשובה זו עבדה הכי טוב ומהיר בשבילי. - Miro
הטוב ביותר ואת התשובה המהירה ביותר! - PlagTag


s4cmd היא הדרך המהירה ביותר שמצאתי (כלי שורת הפקודה שנכתב בפייתון):

pip install s4cmd

עכשיו כדי לחשב את גודל הדלי כולו באמצעות מספר נושאים:

s4cmd du -r s3://bucket-name

10
2018-03-31 22:12



לא, s4cmd du s3://123123drink לא פשוט להחזיר את גודל הדלי. כדי לקבל את הגודל של הדלי אתה מוסיף את רקורסיבית -r, כך: s4cmd du-s3: // 123123drink - George Chalhoub
כן, נקודה טובה @BukLau (נוסף -r לדוגמה לעיל, כדי למנוע בלבול כאשר אנשים משתמשים בתיקיות מדומות ב- S3). - Brent Faust


השתמשתי S3 REST / סלסל 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
2017-12-12 19:05





אז trolling דרך ה- API ולשחק כמה שאילתות אותו, S3 יהיה לייצר את כל התוכן של דלי בבקשה אחת וזה לא צריך לרדת לתוך ספריות. התוצאות ואז רק דורש סיכום באמצעות רכיבי XML שונים, ולא שיחות חוזרות ונשנות. אין לי דלי לדוגמה כי יש אלפי פריטים אז אני לא יודע איך זה יהיה בקנה מידה, אבל זה נראה פשוט למדי.


4
2017-11-15 04:00



זה נראה את האפשרות הטובה ביותר. האם יעדכן את הפוסט הזה בעתיד אם הוא ייקבע בצורה גרועה ואני צריך לעשות משהו אחר. הספרייה שהסתיימה לספק גישה קלה לתוצאות API גלם זה היה PHP אחד: undesigned.org.za/2007/10/22/amazon-s3-php-class - Garret Heaton
האם זה לא רק מוגבל ל 1000 פריטים הראשונים? - Charlie Schliesser


... קצת מאוחר אבל, הדרך הטובה ביותר שמצאתי היא באמצעות דוחות בפורטל AWS. עשיתי בכיתה PHP להורדה וניתוח של הדוחות. עם זה אתה יכול לקבל מספר כולל של אובייקטים עבור כל דלי, גודל כולל של GB או בתים שעות ועוד.

בדוק את זה ותן לי לדעת אם היה מועיל

אמזון


4
2017-12-20 22:56



זהו פתרון מעניין, אם כי קצת hackish. מודאג זה לשבור אם / כאשר אמזון שינויים באתר שלהם, אבל אני אולי צריך לנסות את זה פעם יש לי מספיק חפצים, כי הדרך האחרת הופכת איטית מדי. יתרון נוסף של גישה זו הוא שאתה לא מקבל מחויב עבור כל שיחות ה- API. - Garret Heaton
. . . ההנחה שלה, אבל אם אמזון לשנות את המראה של האתר שלהם, אני בספק אם הם היו לשנות את הקצה האחורי הרבה, כלומר הנוכחי GET ו- POST שאילתות צריך לעבוד. אני אשמור את הכיתה במקרה זה עושה הפסקה בכל מקרה אני משתמש בו לעתים קרובות.


ניתן להשתמש בכלי השירות s3cmd, למשל:

s3cmd du -H s3://Mybucket
97G      s3://Mybucket/

4
2018-03-09 15:43