Chciałbym wykreślić wykres wielkości (w bajtach i # elementów) segmentu Amazon S3 i szukam wydajnego sposobu na uzyskanie danych.
W s3cmd narzędzia zapewniają sposób, aby uzyskać całkowity rozmiar plików przy użyciu s3cmd du s3://bucket_name
, ale martwię się o jego zdolność do skalowania, ponieważ wygląda na to, że pobiera dane o każdym pliku i oblicza własną sumę. Ponieważ Amazon pobiera opłaty od użytkowników w GB-miesięcznie, wydaje się dziwne, że nie ujawniają tej wartości bezpośrednio.
Chociaż interfejs API REST firmy Amazon zwraca liczbę elementów w segmencie, s3cmd nie wydaje się go ujawniać. Mógłbym to zrobić, s3cmd ls -r s3://bucket_name | wc -l
ale to wygląda na włamanie.
Biblioteka Ruby AWS :: S3 wyglądała obiecująco, ale zapewnia tylko liczbę elementów segmentu, a nie całkowity rozmiar segmentu.
Czy ktoś wie o innych narzędziach lub bibliotekach wiersza poleceń (preferuje Perl, PHP, Python lub Ruby), które zapewniają sposoby uzyskiwania tych danych?
źródło
Odpowiedzi:
Interfejs AWS CLI obsługuje teraz
--query
parametr, który przyjmuje wyrażenia JMESPath .Oznacza to, że możesz zsumować wartości wielkości podane za
list-objects
pomocąsum(Contents[].Size)
i policzyć jaklength(Contents[])
.Można to uruchomić przy użyciu oficjalnego interfejsu AWS CLI, jak pokazano poniżej, i wprowadzono go w lutym 2014 r
źródło
s4cmd du s3://bucket-name
s3cmd
powinien mieć takie same koszty ogólne jakAWS CLI
. W kodzie pokazujes3cmd
żądanie dla każdego katalogu w segmencie.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
jest cudowne, dziękuję @Brent Faust! mała uwaga (dla zainteresowanych), którą należy dodać,-r
aby uzyskać również rozmiary podkatalogów.Można to teraz zrobić w trywialny sposób za pomocą tylko oficjalnego klienta wiersza poleceń AWS:
Oficjalna dokumentacja
To akceptuje również prefiksy ścieżek, jeśli nie chcesz liczyć całego segmentu:
źródło
Konsola AWS:
Od 28 lipca 2015 r. Możesz uzyskać te informacje za pośrednictwem CloudWatch . Jeśli chcesz mieć GUI, przejdź do konsoli CloudWatch : (Wybierz Region>) Metryki> S3
Polecenie AWS CLI:
Jest to o wiele szybsze niż niektóre inne polecenia zamieszczone tutaj, ponieważ nie sprawdza wielkości każdego pliku indywidualnie w celu obliczenia sumy.
Ważne : Musisz podać zarówno StorageType, jak i BucketName w argumencie Dimensions, w przeciwnym razie nie otrzymasz żadnych wyników. Wszystko, czego potrzebujesz, aby zmienić to
--start-date
,--end-time
iValue=toukakoukan.com
.Oto skrypt bash można użyć, aby uniknąć konieczności określania
--start-date
i--end-time
ręcznie.źródło
Invalid value ('1525354418') for param timestamp:StartTime of type timestamp
s3cmd może to zrobić:
s3cmd du s3://bucket-name
źródło
BotoClientError: Bucket names cannot contain upper-case characters when using either the sub-domain or virtual hosting calling format.
wiaderka z dużymi literami.Jeśli pobierzesz raport użytkowania , możesz sporządzić wykres wartości dziennych dla
TimedStorage-ByteHrs
pola.Jeśli chcesz tę liczbę w GiB, po prostu podziel przez
1024 * 1024 * 1024 * 24
(to GiB-godziny dla cyklu 24-godzinnego). Jeśli chcesz liczbę w bajtach, po prostu podziel przez 24 i odsuń.źródło
Korzystanie z oficjalnych narzędzi wiersza polecenia AWS s3:
To jest lepsze poleceń, wystarczy dodać następujące 3 parametry
--summarize --human-readable --recursive
poaws s3 ls
.--summarize
nie jest wymagane, ale daje miły akcent w całkowitym rozmiarze.źródło
s4cmd to najszybszy sposób, jaki znalazłem (narzędzie wiersza polecenia napisane w Pythonie):
Teraz obliczyć cały rozmiar wiadra przy użyciu wielu wątków:
źródło
s4cmd du s3://123123drink
nie zwróci po prostu rozmiaru wiadra. Aby uzyskać rozmiar wiadra, dodajesz rekurencję-r
, w ten sposób: s4cmd du -r s3: // 123123drink-r
do powyższego przykładu, aby uniknąć zamieszania, gdy ludzie używają symulowanych folderów na S3).Użyłem interfejsu API REST / Curl S3 wymienionego wcześniej w tym wątku i zrobiłem to:
źródło
Możesz użyć narzędzia s3cmd, np .:
źródło
Przeszukując interfejs API i odtwarzając te same zapytania, S3 utworzy całą zawartość segmentu w jednym żądaniu i nie musi schodzić do katalogów. Wyniki wymagają jedynie zsumowania różnych elementów XML, a nie powtarzanych wywołań. Nie mam próbnego wiadra, które zawiera tysiące przedmiotów, więc nie wiem, jak dobrze będzie skalować, ale wydaje się dość proste.
źródło
... Trochę za późno, ale najlepszym sposobem, jaki znalazłem, jest skorzystanie z raportów w portalu AWS. Zrobiłem klasę PHP do pobierania i analizowania raportów. Dzięki niemu możesz uzyskać całkowitą liczbę obiektów dla każdego segmentu, całkowity rozmiar w GB lub bajt godz. I więcej.
Sprawdź to i daj mi znać, czy było to pomocne
AmazonTools
źródło
Polecam korzystanie z raportu użytkowania S3 w przypadku dużych segmentów , zobacz moje instrukcje na temat tego, jak go uzyskać. Zasadniczo musisz pobrać raport użytkowania usługi S3 dla ostatniego dnia z Timed Storage - Bajt godz. I przeanalizować, aby uzyskać użycie dysku.
źródło
Dokumentacja AWS mówi, jak to zrobić:
To jest wynik, który otrzymujesz:
źródło
Dla naprawdę niskiego poziomu technologii: użyj klienta S3, który może obliczyć rozmiar dla Ciebie. Używam Panic's Transmit, kliknij wiadro, zrób „Uzyskaj informacje” i kliknij przycisk „Oblicz”. Nie jestem pewien, jak szybki lub dokładny jest w stosunku do innych metod, ale wydaje się, że oddaje rozmiar, którego się spodziewałem.
źródło
Ponieważ jest tak wiele odpowiedzi, pomyślałem, że wrócę z własnymi. Swoją implementację napisałem w języku C # przy użyciu LINQPad. Skopiuj, wklej i wprowadź klucz dostępu, klucz tajny, punkt końcowy regionu i nazwę segmentu, do którego chcesz wysłać zapytanie. Pamiętaj też, aby dodać pakiet nuget AWSSDK.
Testowałem na jednym z moich wiader, co dało mi liczbę 128075 i rozmiar 70,6 GB. Wiem, że jest to 99,9999% dokładności, więc jestem dobry z wynikiem.
źródło
Jeśli chcesz uzyskać rozmiar z konsoli AWS:
Domyślnie powinna zostać wyświetlona Metryka przechowywania wiadra
źródło
Wiem, że to starsze pytanie, ale oto przykład PowerShell:
Get-S3Object -BucketName <buckename> | select key, size | foreach {$A += $_.size}
$A
zawiera rozmiar segmentu i istnieje parametr keyname, jeśli chcesz tylko rozmiar określonego folderu w segmencie.źródło
Aby sprawdzić rozmiar wszystkich segmentów, wypróbuj ten skrypt bash
źródło
Możesz użyć
s3cmd
:lub
Daje całkowitą liczbę obiektów i rozmiar wiadra w bardzo czytelnej formie.
źródło
du
trawers wyświetla listę wszystkich obiektów, czy pobiera metadane? Naprawdę chciałbym wersję api wersji raportów lub to, co jest wyświetlane w konsoli aws ...Hej, istnieje narzędzie wyszukiwania metdanych dla AWS S3 na https://s3search.p3-labs.com/. To narzędzie podaje statystyki dotyczące obiektów w wiadrze z wyszukiwaniem metadanych.
źródło
Robi to również Hanzo S3 Tools . Po zainstalowaniu możesz:
Ale wierzę, że jest to również sumowane po stronie klienta i nie jest pobierane przez API AWS.
źródło
W programie Cloudberry można również wymienić rozmiar segmentu, liczbę folderów i całkowitą liczbę plików, klikając „właściwości” tuż nad segmentem.
źródło
Jeśli nie chcesz używać wiersza polecenia, w systemach Windows i OSX, istnieje aplikacja do zdalnego zarządzania plikami ogólnego przeznaczenia o nazwie Cyberduck . Zaloguj się do S3 za pomocą pary klucz dostępu / klucz tajny, kliknij katalog prawym przyciskiem myszy, kliknij
Calculate
.źródło
Napisałem skrypt Bash, s3-du.sh, który wyświetli listę plików w wiadrze z s3ls oraz wyświetli liczbę plików i rozmiary, takie jak
Pełny skrypt:
Robi rozmiar podkatalogu, ponieważ Amazon zwraca nazwę katalogu i rozmiar całej jego zawartości.
źródło
CloudWatch ma teraz domyślny pulpit nawigacyjny usługi S3, który wyświetla go na wykresie o nazwie „Średnia wielkość bajtu wielkości”. Myślę, że ten link będzie działał dla każdego, kto jest już zalogowany do konsoli AWS:
źródło
Poniższy sposób wykorzystuje AWS PHP SDK, aby uzyskać całkowity rozmiar segmentu.
źródło
To działa dla mnie ..
źródło