Planowanie pojemności dysku dla Whisper / Graphite

14

Czy ktoś ma jakieś formuły, a może jakieś przykładowe dane ze swojego środowiska, które mogą pomóc mi oszacować, ile miejsca na dysku zajmie grafit na punkt danych?

Kyle Brandt
źródło
2
Upewnij się, że prawidłowo planujesz także operacje wejścia / wyjścia dysku, a nie tylko pojemność dysku. rrdtool z biegiem lat zgromadził wiele mikrooptymalizacji, które sprawiają, że jest dużo szybszy (2x szybszy?) w przypadku zapisów niż w bazie danych Graphite w formacie Whisper. Jeśli planujesz przechowywać wszystkie dane na przyzwoitym dysku SSD, dostaniesz się tam przez większość drogi, ale nie planowałbym trzymać całej tony Whisper DB na wirującym dysku. W skali, po prostu nieopłacalne jest to, że dyskowe poziomy We / Wy wyrzucane przez Grafit.
jgoldschrafe

Odpowiedzi:

7

whisper-info.py daje dużo wglądu w to, co i jak agregowany jest każdy plik, w tym jego rozmiar.

Jest to jednak przydatne tylko w przypadku istniejących plików szeptanych.

Jeśli chcesz zobaczyć predykcyjną wielkość schematu przed jego wdrożeniem, wypróbuj kalkulator szeptany, taki jak ten dostępny pod adresem https://gist.github.com/jjmaestro/5774063

EDYTOWAĆ:

Zapytany o przykład ...

schemat_pamięci:

{
    :catchall => {
      :priority   => "100",
      :pattern    => "^\.*",
      :retentions => "1m:31d,15m:1y,1h:5y"
    }
}

Patrząc na mój plik applied-in-last-hour.wsp, ls -ldaje

-rwxr-xr-x 1 root root 4415092 Sep 16 08:26 applied-in-last-hour.wsp

i whisper-info.py ./applied-in-last-hour.wspdaje

maxRetention: 157680000
xFilesFactor: 0.300000011921
aggregationMethod: average
fileSize: 4415092

Archive 0
retention: 604800
secondsPerPoint: 10
points: 60480
size: 725760
offset: 52

Archive 1
retention: 2678400
secondsPerPoint: 60
points: 44640
size: 535680
offset: 725812

Archive 2
retention: 157680000
secondsPerPoint: 600
points: 262800
size: 3153600
offset: 1261492

Zasadniczo więc łączysz swoich hostów na mecz retencji na segment okresu retencji na statystykę, mnożąc przez współczynnik systemów, które również zamierzasz zastosować, i licz liczbę nowych statystyk, które zamierzasz śledzić. Następnie bierzesz dowolną ilość miejsca i co najmniej podwajasz (ponieważ kupujemy miejsce i wiemy, że z niego skorzystamy ...)

gWaldo
źródło
Każda szansa, że ​​masz z tego kilka przykładowych numerów (w połączeniu z ustawieniami przechowywania). W tej chwili myślę o różnych magazynach danych szeregów czasowych pod względem wykorzystania dysku - więc uzyskanie grafitu na żywo jest trochę todo.
Kyle Brandt,
@KyleBrandt Odpowiedź zaktualizowana.
gWaldo,
Dzięki za to. Czy w przypadku rozmiaru pliku będzie to po godzinie zbierania danych, czy też taki będzie zawsze rozmiar pliku? Czy zatem 4415092 reprezentuje dane z 5 lat przechowywania danych, czy też reprezentuje godzinę z 1 minuty danych? Czy to bajty czy bity?
Kyle Brandt,
To nowa implementacja w tej firmie i nie mam dostępu do mojej starej. Ponieważ wynik fileSize najwyższego poziomu pasuje do ls -lwyniku, uważam, że to bajty. Kiedy dodam rozmiary archiwów w pliku .wsp (zgodnie z raportem whisper-info.py), zbliżają się one do ogólnego rozmiaru pliku .wsp (resztę zakładam, że są to metadane itp. Powinien to być rozmiar pliku dla wszystkich czas, ponieważ dane spadają do niższych rozdzielczości danych, a stare punkty danych są odrzucane
gWaldo
Okej, więc przy tych ustawieniach przechowywania. Z grubsza:ServerCount * MetricCount * 4.5MBytes
Kyle Brandt,
2

W dokumentacji statsd podają przykład zasady przechowywania danych.

Wartości retencji wynoszą 10s:6h,1min:7d,10min:5y2160 + 10080 + 262800 = 275040 punktów danych i dają rozmiar archiwum 3,2 MiB .

Zakładając liniową zależność, będzie to około 12,2 Bajtów na punkt danych .

AndreKR
źródło
pary ops-school.readthedocs.org/en/latest/monitoring_201.html (znacznik czasu, wartość) są przechowywane jako długie i podwójne wartości zajmujące 12 bajtów na parę. Różnica 0,2 prawdopodobnie z powodu narzutu informacji o metadanych pliku?
user27465,
1

Nie ma bezpośredniego doświadczenia z grafitem, ale wyobrażam sobie taką samą logikę, jak w przypadku kaktusów, czy cokolwiek innego, zastosowanie miałoby RRD lub rolowanie czasu (grafit nie używa już RRD wewnętrznie, ale logika przechowywania wydaje się porównywalna.)

Szybka odpowiedź brzmi: „Prawdopodobnie nie tyle miejsca, ile myślisz, że będziesz potrzebować”.


Długa odpowiedź dotyczy matematyki specyficznej dla witryny. W naszym systemie monitorowania (InterMapper) obliczam okresy przechowywania, rozdzielczości i rozmiar punktów danych, dokonuję mnożenia i dodajemy narzut.

Jako przykład wykorzystam miejsce na dysku - przechowujemy dane z dokładnością 5 minut przez 30 dni, 15 minut z dokładnością do kolejnych 60 dni, a następnie z dokładnością co godzinę przez kolejne 300 dni i używamy 64 -bit (8 bajtów) liczba całkowita do przechowywania:

  • Łącznie 21600 próbek, w podziale na:
    • 8640 próbek dla 30-dniowej 5-minutowej precyzji
    • 5760 próbek dla 60-dniowej 15-minutowej precyzji
    • 7200 próbek dla 300-dniowej dokładności 1-godzinnej

Przy 8 bajtach na próbkę, co stanowi około 173 KB, plus zdrowy narzut na potrzeby indeksowania pamięci i tym podobne, co daje około 200 KB na dane o użytkowaniu dysku jednej partycji (każdy błąd zmierza w kierunku przeszacowania).

Na podstawie podstawowych wskaźników mogę obliczyć średni rozmiar „na maszynę” (10 partycji dysku, przestrzeń wymiany, pamięć RAM, średnie obciążenie, transfer sieciowy i kilka innych rzeczy) - wynosi około 5 MB na maszynę.

Dodaję też zdrowe 10% na końcu i zaokrąglam w górę, więc zmieniam rozmiar na 6 MB na maszynę.

Następnie patrzę na 1 TB miejsca, które mam do przechowywania danych metryk do tworzenia wykresów, i mówię: „Tak, prawdopodobnie nie zabraknie mi miejsca w moim życiu, chyba że dużo dorośniemy!” :-)

voretaq7
źródło
1
Aby rzucić liczbę z rzeczywistej praktyki tam, z moimi zasadami przechowywania produkcji (9 miesięcy po 5 minutach; 1 rok co godzinę; 5 lat dziennie) i około 20 maszyn z ~ 20 8-bajtowymi danymi, plus ostrzeżenie / alarm / krytyczne / zdarzenia awarii od 5 lat Używam 1,5G miejsca na dysku. Tak jest w przypadku InterMapper wstawiającego wszystko do bazy danych Postgres. Więc znowu - szybka odpowiedź brzmi: „Prawdopodobnie nie tyle miejsca, ile myślisz, że będziesz potrzebować” :-)
voretaq7
Tak, ta matematyka jest prosta, tak naprawdę po prostu szukam więcej informacji na temat tego, w jaki sposób Grafit przechowuje dane - może mieć duże różnice w skali. Jedyne, co znalazłem, to to, że według doktryn nie jest on bardzo wydajny przestrzennie (prawdopodobnie dlatego, że liczy na dość agresywne rollupy).
Kyle Brandt
Whisper (zaplecze magazynowe, z którego korzysta grafit) ma wbudowane elementy do żucia przestrzeni - prawdopodobnie już widziałeś tę stronę. Wyróżnia mnie sekcja o „Czasach nakładania się archiwów”, ponieważ oznacza to, że archiwa są większe niż moje powyższe przykłady, ponieważ wszystkie sięgają do początku czasu (archiwum 60-dniowe to tak naprawdę 90 dni; archiwum 300-dniowe to 390 dni). Whisper przechowuje także znacznik czasu (4 lub 8 bajtów) wraz z każdym punktem danych, który również należy dodać. Nie wygląda to jednak na skomplikowane, po prostu wzdęty :)
voretaq7 17.09.13
0

Mam 70 węzłów, które generują dużo danych. Za pomocą Carbon / Whisper jeden węzeł sam utworzył 91k plików (węzeł generuje wiele schematów, z których każdy ma wiele liczników i pól zmiennych, które należy wybrać, np. (Nazwa_węzła). (Schemat). (Licznik). (Podlicznik). Itp. )....i tak dalej).

Zapewniło to szczegółowość potrzebną do wykreślenia dowolnego wykresu, jaki chcę. Po uruchomieniu skryptu w celu wypełnienia pozostałych 69 węzłów miałem 1,3 TB danych na dysku. A to tylko 6 godzin danych / węzła. Co mnie dostaje to faktyczny płaski plik csv dla danych o wartości 6 godzin to około 230 Mb / węzeł. 70 węzłów to ~ 16 Gb danych. Mój schemat przechowywania wynosił 120s: 365d.

Jestem stosunkowo nowy w bazach danych, więc może robię coś złego, ale przypuszczam, że to wszystko narzut dla każdej próbki.

Był to więc zabawny eksperyment, ale nie sądzę, aby szept był uzasadniony dla danych, które przechowuję. MongoDB wydaje się lepszym rozwiązaniem, ale muszę wymyślić, jak używać go jako backendu do Grafany.

musca999
źródło