AWS S3: ฉันจะดูได้อย่างไรว่าใช้พื้นที่ดิสก์ไปเท่าใด


113

ฉันมีบัญชี AWS ฉันใช้ S3 เพื่อจัดเก็บข้อมูลสำรองจากเซิร์ฟเวอร์ที่แตกต่างกัน คำถามคือมีข้อมูลใด ๆ ในคอนโซล AWS เกี่ยวกับพื้นที่ดิสก์ที่ใช้ใน S3 cloud ของฉันหรือไม่


1
คุณต้องได้รับวัตถุทั้งหมดจากนั้นสรุปขนาดไฟล์ทั้งหมด คุณไม่สามารถทำได้ในการดำเนินการครั้งเดียว
Layke

เป็นเรื่องแปลกที่ไม่มีวิธีแก้ปัญหานี้อย่างแท้จริง การสำรวจรายการทั้งหมดและการคำนวณไม่ใช่วิธีแก้ปัญหาหากคุณมีไฟล์ 10 ล้านไฟล์! ใน s3 UI ของ AWS คุณสามารถดูการใช้งานได้อย่างง่ายดายภายใต้การจัดการ -> เมตริก เหตุใดจึงไม่มีวิธีรับสิ่งนี้จากบรรทัดคำสั่ง
Sarang

คำตอบ:


117

Yippe - การอัปเดต AWS CLI ช่วยให้คุณสามารถเรียกใช้ซ้ำผ่านที่เก็บข้อมูล ...

aws s3 ls s3://<bucketname> --recursive  | grep -v -E "(Bucket: |Prefix: |LastWriteTime|^$|--)" | awk 'BEGIN {total=0}{total+=$3}END{print total/1024/1024" MB"}'

พิมพ์ทั้งหมด / 1024/1024/1024 * .03 ให้ค่าประมาณที่ดีสำหรับการใช้งาน $ หากคุณมีน้ำหนักน้อยกว่า 1TB @cudds awesomeness - ขอบคุณตัน !!!
chrislovecnm

4
คุณไม่จำเป็นต้องใช้ส่วน grep หากคุณใช้ถังเดียว
jpbochi

7
ขณะนี้ AWS Cloudwatch มีเมตริกสำหรับขนาดที่เก็บข้อมูลและจำนวนวัตถุที่อัปเดตทุกวัน เกี่ยวกับเวลา! aws.amazon.com/blogs/aws/…
cudds

3
ตัวอย่างที่ 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 ในอาร์กิวเมนต์มิติมิฉะนั้นคุณจะไม่ได้รับผลลัพธ์
Sam Martin

@SamMartin StorageType ต้องเป็นอย่างไร? คำตอบนี้ใช้เวลานานมากในการคำนวณสำหรับที่เก็บข้อมูลที่มีขนาดใหญ่กว่า 100 GB
Vivek Katial

105

ฉันไม่แน่ใจว่าสิ่งนี้ถูกเพิ่มใน AWSCLI เมื่อใดเนื่องจากคำถามเดิมคือเมื่อ 3 ปีที่แล้ว แต่เครื่องมือบรรทัดคำสั่งให้สรุปที่ดีโดยการเรียกใช้:

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

4
คุณและคริสโตเฟอร์เป็นคำตอบที่ดีที่สุด
Michael Ahlers

2
วิธีแก้ปัญหาที่ง่ายกว่าคำตอบที่ยอมรับ ขอบคุณ!
Adrian Macneil

1
สิ่งนี้ไม่แสดงขนาดที่แท้จริงพร้อมเวอร์ชัน มีวิธีตรวจสอบขนาดรวมของ s3 bucket ทุกรุ่นหรือไม่?
Shanika Ediriweera

1
พิมพ์ขนาดรวมของแต่ละถังของคุณ:for b in $(aws s3 ls | awk '{ print $NF }'); do printf "$b "; aws s3 ls s3://$b --recursive --human-readable --summarize | tail -1; done
Matt White

70

หากต้องการทราบขนาดของที่เก็บข้อมูล S3 โดยใช้ AWS Console:

  1. คลิกชื่อที่เก็บข้อมูล S3
  2. เลือกแท็บ "การจัดการ"
  3. คลิกปุ่มนำทาง "เมตริก"
  4. โดยค่าเริ่มต้นคุณควรเห็นเมตริกการจัดเก็บของที่เก็บข้อมูล

หวังว่านี่จะช่วยได้


3
ซึ่งจะทำงานได้เร็วขึ้นในกรณีที่ที่เก็บข้อมูลของคุณมีข้อมูลเป็น TB คำตอบที่ได้รับการยอมรับต้องใช้เวลามากในการคำนวณวัตถุทั้งหมดในมาตราส่วนนั้น
sokras

โปรดทราบว่าการดำเนินการนี้จะจับภาพการอัปโหลดที่ไม่สมบูรณ์ซึ่งไม่สามารถlsใช้โซลูชันที่เป็นพื้นฐานได้
David Moles

วิธีที่เร็วที่สุดในการทำคือคำตอบนี้
Mohammad Zekrallah

36

s3cmdสามารถแสดงสิ่งนี้ให้คุณเห็นได้โดยการเรียกใช้โดยs3cmd duเลือกที่จะส่งชื่อที่เก็บข้อมูลเป็นอาร์กิวเมนต์


1
FYI - ฉันลองแล้วและเวอร์ชัน aws cli ในคำตอบ cudds ทั้งคู่ทำงานได้ดี แต่ s3cmd ช้าลงอย่างมากในกรณีที่ฉันพยายามเมื่อปล่อย 1.5.0-rc1
DougW

@DougW: ขอบคุณข้อมูลที่เป็นประโยชน์ AWS CLI 1.0.0 เปิดตัวในเดือนกันยายน 2013ดังนั้นจึงไม่มีอยู่ในขณะที่ฉันเขียนคำตอบ
markusk

s3cmd ไม่รองรับการแฮช AWS4 จึงใช้ไม่ได้กับภูมิภาคใหม่ ๆ รวมถึงภูมิภาค EU "eu-central-1"
Koen

@Koen: ขอบคุณฉันไม่รู้เรื่องนี้ ดูเหมือนว่าผู้ดูแล s3cmd กำลังมองหาการเพิ่มการสนับสนุนสำหรับ AWS4: github.com/s3tools/s3cmd/issues/402
markusk

@Koen: ตอนนี้ s3cmd รองรับการแฮช AWS4 ตั้งแต่ 1.5.0 ซึ่งเปิดตัวเมื่อ 2015-01-12 ดูs3tools.org/news
markusk

28

ขณะนี้ 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[])]"

ฉันต้องใช้เครื่องหมายคำพูดคู่รอบสตริงการสืบค้นในบรรทัดคำสั่งของ windows ทำงานเหมือนแชมป์
Travis Steel

ระวัง: ถ้าถังล้างคำสั่งจะล้มเหลวด้วยข้อผิดพลาดต่อไปนี้: In function sum(), invalid type for value: None, expected one of: ['array-number'], received: "null"มิฉะนั้นแบบสอบถามงานได้ดี!
mechatroner

7

บนกล่อง linux ที่มีpython(พร้อมตัวpipติดตั้ง) grepและawkติดตั้ง AWS CLI (เครื่องมือบรรทัดคำสั่งสำหรับ EC2, S3 และบริการอื่น ๆ อีกมากมาย)

sudo pip install awscli

จากนั้นสร้าง.awssecretไฟล์ในโฮมโฟลเดอร์ของคุณโดยมีเนื้อหาดังต่อไปนี้ (ปรับคีย์ความลับและภูมิภาคตามต้องการ):

[default]
aws_access_key_id=<YOUR_KEY_HERE>
aws_secret_access_key=<YOUR_SECRET_KEY_HERE>
region=<AWS_REGION>

ทำให้ไฟล์นี้เป็นแบบอ่าน - เขียนสำหรับผู้ใช้ของคุณเท่านั้น:

sudo chmod 600 .awssecret

และส่งออกไปยังสภาพแวดล้อมของคุณ

 export AWS_CONFIG_FILE=/home/<your_name>/.awssecret

จากนั้นรันในเทอร์มินัล (นี่คือคำสั่งบรรทัดเดียวคั่นด้วย\เพื่อให้อ่านง่ายที่นี่):

aws s3 ls s3://<bucket_name>/foo/bar | \
grep -v -E "(Bucket: |Prefix: |LastWriteTime|^$|--)" | \
awk 'BEGIN {total=0}{total+=$3}END{print total/1024/1024" MB"}'
  • awsส่วนแสดงรายการถัง (หรือเลือกแบบ 'โฟลเดอร์ย่อย')
  • grepเอาส่วนหนึ่ง (ใช้-v) เส้นที่ตรงกับการแสดงออกปกติ (ใช้-E) ^$สำหรับบรรทัดว่างสำหรับบรรทัด--คั่นในเอาต์พุตของaws s3 ls
  • สุดท้ายawkเพียงแค่เพิ่มลงtotalในคอลัมน์ที่ 3 ของผลลัพธ์ที่ได้ (ขนาดเป็น KB) จากนั้นแสดงที่ส่วนท้าย

หมายเหตุคำสั่งนี้ใช้ได้กับที่เก็บข้อมูลปัจจุบันหรือ 'โฟลเดอร์' ไม่สามารถเรียกใช้ซ้ำได้


7

Cloud watch ยังช่วยให้คุณสร้างเมตริกสำหรับที่เก็บข้อมูล S3 ของคุณ จะแสดงเมตริกตามขนาดและจำนวนวัตถุ บริการ> เครื่องมือการจัดการ> นาฬิการะบบคลาวด์ เลือกภูมิภาคที่เป็นที่เก็บข้อมูล S3 ของคุณและเมตริกขนาดและจำนวนออบเจ็กต์จะอยู่ในเมตริกเหล่านั้น


6

ดู/server/84815/how-can-i-get-the-size-of-an-amazon-s3-bucket

ตอบโดย Vic ...

<?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';
?>

คุณรู้หรือไม่ว่ากิกะไบต์ในกรณีนี้คือ 1024 3 หรือ 1000 3? ฉันมีปัญหาในการค้นหาคำสั่ง S3 ที่ชัดเจน
dfrankow

@dfrankow บรรทัดecho ($totalSize / 1024 / 1024 / 1024) . ' GB';อยู่ตรงด้านล่างของซอร์สโค้ด
MJD

@MJD ฉันจำไม่ได้ว่าคิดอะไรอยู่ที่นี่ มีการถามเกี่ยวกับการใช้ s3cmd หรือ S3 ของคำว่า "กิกะไบต์" ไม่ใช่โค้ด PHP นี้
dfrankow

5

นอกจากคำตอบของคริสโตเฟอร์

หากคุณต้องการนับขนาดทั้งหมดของการใช้ที่เก็บข้อมูลเวอร์ชัน:

aws s3api list-object-versions --bucket BUCKETNAME --output json --query "[sum(Versions[].Size)]"

นับทั้งเวอร์ชันล่าสุดและเวอร์ชันที่เก็บถาวร


5

การรับขนาดที่เก็บข้อมูลขนาดใหญ่ผ่าน API (ทั้ง aws cli หรือ s4cmd) นั้นค่อนข้างช้า นี่คือHowToของฉันที่อธิบายวิธีแยกวิเคราะห์รายงานการใช้งาน S3โดยใช้ bash one liner:

cat report.csv | awk -F, '{printf "%.2f GB %s %s \n", $7/(1024**3 )/24, $4, $2}' | sort -n

1

คอนโซล AWS จะไม่แสดงสิ่งนี้ให้คุณเห็น แต่คุณสามารถใช้Bucket ExplorerหรือCloudberry Explorerเพื่อรับขนาดรวมของที่เก็บข้อมูลได้ ทั้งสองมีเวอร์ชันฟรี

หมายเหตุ: ผลิตภัณฑ์เหล่านี้ยังคงต้องได้รับขนาดของแต่ละออบเจ็กต์ดังนั้นจึงอาจใช้เวลานานสำหรับที่เก็บข้อมูลที่มีวัตถุจำนวนมาก


ฉันสามารถดูได้เฉพาะซอฟต์แวร์ทดลองเท่านั้น ข้อเสนอนั้นถูกลบไปแล้วหรือ
Trefex

1

อ้างอิงจากคำตอบของ @ cudds:

function s3size()
{
    for path in $*; do
        size=$(aws s3 ls "s3://$path" --recursive | grep -v -E "(Bucket: |Prefix: |LastWriteTime|^$|--)" | awk 'BEGIN {total=0}{total+=$3}END{printf "%.2fGb\n", (total/1024/1024/1024)}')
        echo "[s3://$path]=[$size]"
    done
}

...

$ s3size bucket-a bucket-b/dir
[s3://bucket-a]=[24.04Gb]
[s3://bucket-b/dir]=[26.69Gb]

นอกจากนี้Cyberduckยังช่วยให้คำนวณขนาดของที่เก็บข้อมูลหรือโฟลเดอร์ได้อย่างสะดวก


1

คำตอบของMini Johnเหมาะกับฉันโดยสิ้นเชิง! ยอดเยี่ยม ... ต้องเพิ่ม

--region eu-west-1 

จากยุโรปแม้ว่า


1

นี่เป็นคำถามเก่า แต่เนื่องจากฉันกำลังมองหาคำตอบฉันจึงวิ่งข้ามมัน คำตอบบางคำทำให้ฉันจำได้ว่าฉันใช้ S3 Browser เพื่อจัดการข้อมูล คุณสามารถคลิกที่ถังและคุณสมบัติการตีและจะแสดงผลรวม ค่อนข้างเรียบง่าย ฉันขอแนะนำเบราว์เซอร์: https://s3browser.com/default.aspx?v=6-1-1&fam=x64


0

คุณสามารถทำได้ผ่านไคลเอนต์ S3 หากคุณต้องการ UI ที่เป็นมิตรกับมนุษย์

ฉันใช้CrossFTPซึ่งฟรีและข้ามแพลตฟอร์มและที่นั่นคุณสามารถคลิกขวาที่ไดเรกทอรีโฟลเดอร์ -> เลือก "คุณสมบัติ ... " -> คลิกที่ปุ่ม "คำนวณ" ถัดจาก Size และ voila


0

s3adminเป็นแอปโอเพนซอร์ส (UI) ที่ให้คุณเรียกดูที่เก็บข้อมูลคำนวณขนาดรวมแสดงไฟล์ที่ใหญ่ที่สุด / เล็กที่สุด ได้รับการออกแบบมาเพื่อให้มีภาพรวมอย่างรวดเร็วของที่เก็บข้อมูลของคุณและการใช้งาน


0

คุณถาม: ข้อมูลในคอนโซล AWS เกี่ยวกับพื้นที่ดิสก์ที่ใช้บนคลาวด์ S3 ของฉัน ?

ผมจึงไปเรียกเก็บเงินแผงควบคุมและตรวจสอบการใช้ S3 ในการเรียกเก็บเงินในปัจจุบัน

พวกเขาให้ข้อมูลแก่คุณ - MTD - ใน Gb ถึง 6 จุดทศนิยม IOW ถึงระดับ Kb

แยกย่อยตามภูมิภาค แต่การเพิ่ม (สมมติว่าคุณใช้มากกว่าหนึ่งภูมิภาค) นั้นง่ายพอ

BTW: คุณอาจต้องการสิทธิ์เฉพาะ IAM เพื่อเข้าถึงข้อมูลการเรียกเก็บเงิน


-2

ฉันใช้Cloud Turtleเพื่อรับขนาดของถังแต่ละตัว หากขนาดที่เก็บข้อมูลเกิน> 100 Gb จะต้องใช้เวลาสักพักในการแสดงขนาด Cloud Turtle เป็นฟรีแวร์


8
โปรดระวังซอฟต์แวร์นี้ ติดตั้งส่วนขยาย Chrome เพิ่มเติมและดูเหมือนว่าจะค่อนข้างเป็นสแปม
สไตล์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.