Ich möchte die Größe (in Byte und Anzahl der Elemente) eines Amazon S3-Buckets grafisch darstellen und suche nach einer effizienten Möglichkeit, die Daten abzurufen.
Die s3cmd- Tools bieten eine Möglichkeit, die gesamte Dateigröße mithilfe von zu ermitteln s3cmd du s3://bucket_name
. Ich bin jedoch besorgt über die Skalierbarkeit , da anscheinend Daten zu jeder Datei abgerufen und ihre eigene Summe berechnet werden. Da Amazon Benutzer in GB-Monaten belastet, erscheint es seltsam, dass sie diesen Wert nicht direkt verfügbar machen.
Obwohl die REST-API von Amazon die Anzahl der Elemente in einem Bucket zurückgibt, scheint s3cmd sie nicht verfügbar zu machen. Ich könnte es tun, s3cmd ls -r s3://bucket_name | wc -l
aber das scheint ein Hack zu sein.
Die Ruby AWS :: S3- Bibliothek sah vielversprechend aus, bietet jedoch nur die Anzahl der Bucket-Elemente und nicht die Gesamt-Bucket-Größe.
Kennt jemand andere Befehlszeilentools oder -bibliotheken (vorzugsweise Perl, PHP, Python oder Ruby), mit denen diese Daten abgerufen werden können?
quelle
Antworten:
Die AWS-CLI unterstützt jetzt den
--query
Parameter, der JMESPath- Ausdrücke akzeptiert .Dies bedeutet, dass Sie die angegebenen Größenwerte mit summieren und wie
list-objects
folgtsum(Contents[].Size)
zählen könnenlength(Contents[])
.Dies kann mit der offiziellen AWS-CLI wie folgt ausgeführt werden und wurde im Februar 2014 eingeführt
quelle
s4cmd du s3://bucket-name
s3cmd
sollte die gleichen Gemeinkosten wie habenAWS CLI
. Im angezeigten Code wirds3cmd
für jedes Verzeichnis in einem Bucket eine Anfrage gestellt.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
ist wunderbar, danke @Brent Faust! kleine Notiz (für die Betroffenen), die Sie hinzufügen müssen-r
, um auch die Größe der Unterverzeichnisse zu ermitteln.Dies kann jetzt ganz einfach mit dem offiziellen AWS-Befehlszeilenclient durchgeführt werden:
Offizielle Dokumentation
Dies akzeptiert auch Pfadpräfixe, wenn Sie nicht den gesamten Bucket zählen möchten:
quelle
AWS Console:
Ab dem 28. Juli 2015 können Sie diese Informationen über CloudWatch erhalten . Wenn Sie eine GUI benötigen, rufen Sie die CloudWatch-Konsole auf : (Wählen Sie Region>) Metriken> S3
AWS CLI-Befehl:
Dies ist viel schneller als einige der anderen hier veröffentlichten Befehle, da nicht die Größe jeder Datei einzeln abgefragt wird, um die Summe zu berechnen.
Wichtig : Sie müssen sowohl StorageType als auch BucketName im Dimensionsargument angeben, sonst erhalten Sie keine Ergebnisse. Alles , was Sie ändern müssen , ist die
--start-date
,--end-time
, undValue=toukakoukan.com
.Hier ist ein Bash - Skript Sie verwenden können , zu vermeiden , angeben zu müssen
--start-date
und--end-time
manuell.quelle
Invalid value ('1525354418') for param timestamp:StartTime of type timestamp
s3cmd kann das:
s3cmd du s3://bucket-name
quelle
BotoClientError: Bucket names cannot contain upper-case characters when using either the sub-domain or virtual hosting calling format.
für Buckets mit Großbuchstaben.Wenn Sie einen Nutzungsbericht herunterladen , können Sie die Tageswerte für das
TimedStorage-ByteHrs
Feld grafisch darstellen .Wenn Sie diese Zahl in GiB haben möchten, teilen Sie sie einfach durch
1024 * 1024 * 1024 * 24
(das sind GiB-Stunden für einen 24-Stunden-Zyklus). Wenn Sie die Anzahl in Bytes wollen, teilen Sie sie einfach durch 24 und zeichnen Sie sie weg.quelle
Verwenden der offiziellen AWS s3-Befehlszeilentools:
Dies ist ein besserer Befehl, nur die folgenden drei Parameter hinzufügen
--summarize --human-readable --recursive
nachaws s3 ls
.--summarize
ist nicht erforderlich, gibt aber einen netten Touch auf die Gesamtgröße.quelle
s4cmd ist der schnellste Weg, den ich gefunden habe (ein in Python geschriebenes Befehlszeilenprogramm):
So berechnen Sie die gesamte Schaufelgröße mit mehreren Threads:
quelle
s4cmd du s3://123123drink
wird nicht einfach die Größe des Eimers zurückgegeben. Um die Größe des Eimers zu erhalten, fügen Sie das rekursive-r
Element wie folgt hinzu: s4cmd du -r s3: // 123123drink-r
zum obigen Beispiel hinzugefügt , um Verwirrung zu vermeiden, wenn Benutzer simulierte Ordner in S3 verwenden).Ich habe die zuvor in diesem Thread aufgeführte S3-REST / Curl-API verwendet und dies getan:
quelle
Sie können das Dienstprogramm s3cmd verwenden, z.
quelle
Wenn S3 also die API durchläuft und dieselben Abfragen abspielt, wird der gesamte Inhalt eines Buckets in einer Anforderung generiert und muss nicht in Verzeichnisse absteigen. Die Ergebnisse erfordern dann lediglich eine Summierung durch die verschiedenen XML-Elemente und keine wiederholten Aufrufe. Ich habe keinen Probenbehälter mit Tausenden von Artikeln, daher weiß ich nicht, wie gut er skaliert, aber er scheint ziemlich einfach zu sein.
quelle
... Ein bisschen spät, aber der beste Weg, den ich gefunden habe, ist die Verwendung der Berichte im AWS-Portal. Ich habe eine PHP-Klasse zum Herunterladen und Parsen der Berichte erstellt. Damit können Sie die Gesamtzahl der Objekte für jeden Bucket, die Gesamtgröße in GB oder Byte-Stunden und mehr abrufen.
Probieren Sie es aus und lassen Sie es mich wissen, wenn es hilfreich war
AmazonTools
quelle
Ich empfehle für S3 Nutzungsbericht mit großen Eimern , siehe meine Wie , wie man es bekommt Grundsätzlich müssen Sie Nutzungsbericht für S3 - Dienst für den letzten Tag mit Timed Speichern herunterladen - Byte Stunden und analysiert es Plattennutzung zu erhalten.
quelle
In der AWS-Dokumentation erfahren Sie, wie es geht:
Dies ist die Ausgabe, die Sie erhalten:
quelle
Für einen wirklich Low-Tech-Ansatz: Verwenden Sie einen S3-Client, der die Größe für Sie berechnen kann. Ich verwende Panic's Transmit, klicke auf einen Bucket, mache "Get Info" und klicke auf den "Calculate" -Button. Ich bin nicht sicher, wie schnell oder genau es in Bezug auf andere Methoden ist, aber es scheint die Größe zurückzugeben, die ich erwartet hatte.
quelle
Da es so viele Antworten gibt, nahm ich an, dass ich mich meinen eigenen anschließen würde. Ich habe meine Implementierung in C # mit LINQPad geschrieben. Kopieren Sie den abzufragenden Zugriffsschlüssel, den geheimen Schlüssel, den Regionsendpunkt und den Bucket-Namen, und fügen Sie sie ein. Stellen Sie außerdem sicher, dass Sie das AWSSDK-Nuget-Paket hinzufügen.
Beim Testen mit einem meiner Eimer erhielt ich eine Zählung von 128075 und eine Größe von 70,6 GB. Ich weiß, dass das 99,9999% genau ist, also bin ich gut mit dem Ergebnis.
quelle
Wenn Sie die Größe von AWS Console erhalten möchten:
Standardmäßig sollten Sie sehen , Lagerung Metric des Eimers
quelle
Ich weiß, dass dies eine ältere Frage ist, aber hier ist ein PowerShell-Beispiel:
Get-S3Object -BucketName <buckename> | select key, size | foreach {$A += $_.size}
$A
enthält die Größe des Buckets, und es gibt einen keyname-Parameter, wenn Sie nur die Größe eines bestimmten Ordners in einem Bucket möchten.quelle
Verwenden Sie dieses Bash-Skript, um die Größe aller Eimer zu überprüfen
quelle
Sie können verwenden
s3cmd
:oder
Es gibt die Gesamtzahl der Objekte und die Größe des Eimers in gut lesbarer Form an.
quelle
du
Traverse alle Objekte auf oder ruft es die Metadaten ab? Möchte wirklich eine API-Version der Berichtsversion oder was in der AWS-Konsole angezeigt wird ...Hey, es gibt ein Metadatensuchwerkzeug für AWS S3 unter https://s3search.p3-labs.com/. Dieses Werkzeug liefert statistische Daten zu Objekten in einem Bucket mit Suche nach Metadaten.
quelle
Dies erledigt auch Hanzo S3 Tools . Nach der Installation können Sie Folgendes tun:
Ich glaube jedoch, dass dies auch auf der Clientseite summiert und nicht über die AWS-API abgerufen wird.
quelle
Mit dem Cloudberry- Programm ist es auch möglich, die Größe des Buckets , die Anzahl der Ordner und die Gesamtzahl der Dateien aufzulisten , indem Sie auf "Eigenschaften" rechts oben im Bucket klicken.
quelle
Wenn Sie die Befehlszeile unter Windows und OSX nicht verwenden möchten, gibt es eine universelle Remote-Dateiverwaltungs-App namens Cyberduck . Melden Sie sich mit Ihrem Zugriffs- / geheimen Schlüsselpaar bei S3 an, klicken Sie mit der rechten Maustaste auf das Verzeichnis und klicken Sie auf
Calculate
.quelle
Ich habe ein Bash-Skript geschrieben, s3-du.sh, das Dateien im Eimer mit s3ls auflistet und die Anzahl der Dateien und Größen wie druckt
Vollständiges Skript:
Die Größe des Unterverzeichnisses wird angegeben, da Amazon den Verzeichnisnamen und die Größe des gesamten Inhalts zurückgibt.
quelle
CloudWatch verfügt jetzt über ein Standard-S3-Dienst-Dashboard, das es in einem Diagramm mit dem Namen "Bucket Size Bytes Average" auflistet. Ich denke, dieser Link funktioniert für alle Benutzer, die bereits bei AWS Console angemeldet sind:
quelle
Die folgende Methode verwendet AWS PHP SDK, um die Gesamtgröße des Buckets zu ermitteln.
quelle
Das funktioniert bei mir ..
quelle