{"id":81888,"date":"2020-05-17T13:42:23","date_gmt":"2020-05-17T11:42:23","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/thanos-masshtabiruemyj-prometheus"},"modified":"2020-05-17T13:42:23","modified_gmt":"2020-05-17T11:42:23","slug":"thanos-masshtabiruemyj-prometheus","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/thanos-masshtabiruemyj-prometheus","title":{"rendered":"Thanos \u2014 skalowalny Prometheus","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><b><i>T\u0142umaczenie artyku\u0142u przygotowano specjalnie dla student\u00f3w kursu <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/jYQP\/\">\u201ePraktyki i narz\u0119dzia DevOps\u201c<\/a><\/noindex>.<\/i><\/b><\/p>\n<p>\n<i><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/fabxc\">Fabian Reinartz<\/a><\/noindex> jest programist\u0105, entuzjast\u0105 Go i mi\u0142o\u015bnikiem rozwi\u0105zywania skomplikowanych problem\u00f3w. Jest r\u00f3wnie\u017c konserwatorem Prometheus i wsp\u00f3\u0142za\u0142o\u017cycielem Kubernetes SIG instrumentation. W przesz\u0142o\u015bci by\u0142 in\u017cynierem produkcji w SoundCloud i kierowa\u0142 zespo\u0142em monitorowania w CoreOS. Obecnie pracuje w Google.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Bplotka\">Bartek Plotka<\/a><\/noindex> jest in\u017cynierem infrastruktury w Improbable. Interesuje si\u0119 nowymi technologiami i problemami system\u00f3w rozproszonych. Ma do\u015bwiadczenie w programowaniu niskopoziomowym w Intel, do\u015bwiadczenie w roli kontrybutora w Mesos oraz globalne do\u015bwiadczenie SRE w Improbable. Pracuje nad popraw\u0105 \u015bwiata mikroserwis\u00f3w. Jego trzy pasje to: Golang, open source i siatk\u00f3wka.<\/i><\/p>\n<p>Patrz\u0105c na nasz flagowy produkt SpatialOS, mo\u017cna si\u0119 domy\u015bli\u0107, \u017ce Improbable potrzebuje wysokowydajnej, globalnej infrastruktury chmurowej z dziesi\u0105tkami klastr\u00f3w Kubernetes. Byli\u015bmy jednymi z pierwszych, kt\u00f3rzy zacz\u0119li korzysta\u0107 z systemu monitorowania <noindex><a rel=\"nofollow\" href=\"https:\/\/prometheus.io\/\">Prometheus<\/a><\/noindex>. Prometheus jest w stanie \u015bledzi\u0107 miliony metryk w czasie rzeczywistym i dostarczany jest z pot\u0119\u017cnym j\u0119zykiem zapyta\u0144, umo\u017cliwiaj\u0105cym wydobycie potrzebnych informacji.<\/p>\n<p>Prostota i niezawodno\u015b\u0107 Prometheus jest jednym z jego g\u0142\u00f3wnych atut\u00f3w. Jednak po osi\u0105gni\u0119ciu okre\u015blonego rozmiaru napotkali\u015bmy kilka niedoci\u0105gni\u0119\u0107. Aby rozwi\u0105za\u0107 te problemy, opracowali\u015bmy <noindex><a rel=\"nofollow\" href=\"https:\/\/thanos.io\/\">Thanos<\/a><\/noindex> projekt open source stworzony przez firm\u0119 Improbable, maj\u0105cy na celu bezproblemow\u0105 transformacj\u0119 istniej\u0105cych klastr\u00f3w Prometheus w jedn\u0105, zintegrowan\u0105 system monitorowania z nieograniczonym przechowywaniem danych historycznych. Thanos jest dost\u0119pny na Github <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/improbable-eng\/thanos\">tutaj<\/a><\/noindex>.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/gdk.improbable.io\/l\/169082\/2020-01-10\/2j9yxq\">B\u0105d\u017a na bie\u017c\u0105co z najnowszymi wiadomo\u015bciami od Improbable.<\/a><\/noindex><\/p>\n<h2>Nasze cele z Thanos<\/h2>\n<p>\nW miar\u0119 rozwoju pojawiaj\u0105 si\u0119 problemy wykraczaj\u0105ce poza mo\u017cliwo\u015bci standardowego Prometheus. Jak pewnie i ekononomicznie przechowywa\u0107 petabajty danych historycznych? Czy mo\u017cna to zrobi\u0107 bez uszczerbku dla czasu odpowiedzi na zapytania? Czy mo\u017cna uzyska\u0107 dost\u0119p do wszystkich metryk znajduj\u0105cych si\u0119 na r\u00f3\u017cnych serwerach Prometheus za pomoc\u0105 jednego zapytania API? Czy mo\u017cna jako\u015b po\u0142\u0105czy\u0107 zreplikowane dane zebrane przy u\u017cyciu Prometheus HA?<\/p>\n<p>Aby odpowiedzie\u0107 na te pytania, stworzyli\u015bmy Thanos. W kolejnych sekcjach opisujemy, jak podeszli\u015bmy do rozwi\u0105zywania tych problem\u00f3w oraz wyja\u015bniamy cele, kt\u00f3re mieli\u015bmy na my\u015bli.<\/p>\n<h4>Zg\u0142aszanie danych z kilku instancji Prometheus (globalne zapytanie)<\/h4>\n<p>\nPrometheus oferuje funkcjonalne podej\u015bcie do shardingu. Nawet jeden serwer Prometheus zapewnia wystarczaj\u0105c\u0105 skalowalno\u015b\u0107, aby uwolni\u0107 u\u017cytkownik\u00f3w od z\u0142o\u017cono\u015bci poziomego shardingu w praktycznie wszystkich zastosowaniach.<\/p>\n<p>Chocia\u017c to doskona\u0142y model wdro\u017cenia, cz\u0119sto konieczny jest dost\u0119p do danych z r\u00f3\u017cnych serwer\u00f3w Prometheus za po\u015brednictwem jednego API lub UI \u2014 globalny widok. Oczywi\u015bcie istnieje mo\u017cliwo\u015b\u0107 przedstawienia wielu zapyta\u0144 w jednym panelu Grafana, ale ka\u017cde zapytanie mo\u017ce by\u0107 wykonane tylko na jednym serwerze Prometheus. Z drugiej strony, u\u017cywaj\u0105c Thanos, mo\u017cesz zapytywa\u0107 i agregowa\u0107 dane z kilku serwer\u00f3w Prometheus, poniewa\u017c wszystkie s\u0105 dost\u0119pne z jednego punktu ko\u0144cowego.<\/p>\n<p>Wcze\u015bniej, aby uzyska\u0107 globalny widok w Improbable, zorganizowali\u015bmy nasze instancje Prometheus w wielopoziomow\u0105 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/prometheus\/prometheus\/blob\/master\/docs\/federation.md#hierarchical-federation\">Hierarchiczn\u0105 Federacj\u0119<\/a><\/noindex>Oznacza\u0142o to stworzenie jednego meta-serwera Prometheus, kt\u00f3ry zbiera cz\u0119\u015b\u0107 metryk z ka\u017cdego 'li\u015bciowego' serwera.<\/p>\n<p><img decoding=\"async\" alt=\"Thanos \u2014 skalowalny Prometheus\" src=\"\/wp-content\/uploads\/2020\/05\/82590f017734f5dc1038a0e13f772d2a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTo podej\u015bcie okaza\u0142o si\u0119 problematyczne. Doprowadzi\u0142o do skomplikowania konfiguracji, dodania dodatkowego potencjalnego punktu awarii oraz zastosowania skomplikowanych zasad do udost\u0119pnienia federacyjnego punktu ko\u0144cowego tylko potrzebnych danych. Ponadto, federacja tego rodzaju nie pozwala na uzyskanie rzeczywistego globalnego widoku, poniewa\u017c nie wszystkie dane s\u0105 dost\u0119pne z jednego zapytania API.<\/p>\n<p>Niezwykle zwi\u0105zane z tym jest jednolite przedstawienie danych, zbieranych na wysoko dost\u0119pnych (high-availability, HA) serwerach Prometheus. Model HA Prometheus zbiera dane niezale\u017cnie dwukrotnie, co jest na tyle proste, \u017ce prostsze by\u0107 nie mo\u017ce. Jednak\u017ce korzystanie ze zintegrowanego i deduplikowanego widoku obu strumieni by\u0142oby znacznie wygodniejsze.<\/p>\n<p>Oczywi\u015bcie, w wysoko dost\u0119pnych serwerach Prometheus istnieje potrzeba. W Improbable powa\u017cnie traktujemy monitorowanie danych w czasie rzeczywistym, ale posiadanie jednego egzemplarza Prometheus w klastrze jest jedynym punktem awarii. Ka\u017cdy b\u0142\u0105d konfiguracji lub awaria sprz\u0119tu mog\u0105 potencjalnie prowadzi\u0107 do utraty wa\u017cnych danych. Nawet proste wdro\u017cenie mo\u017ce prowadzi\u0107 do ma\u0142ych problem\u00f3w w zbieraniu metryk, poniewa\u017c ponowne uruchomienie mo\u017ce zaj\u0105\u0107 znacznie wi\u0119cej czasu ni\u017c interwa\u0142 skanowania.<\/p>\n<h4>Niezawodne przechowywanie danych historycznych<\/h4>\n<p>\nTanie, szybkie i d\u0142ugoterminowe przechowywanie metryk to nasz wsp\u00f3lny cel (dzielony przez wi\u0119kszo\u015b\u0107 u\u017cytkownik\u00f3w Prometheus). W Improbable musieli\u015bmy ustawi\u0107 czas przechowywania metryk na dziewi\u0119\u0107 dni (dla Prometheus 1.8). To wprowadza oczywiste ograniczenia w zakresie tego, jak daleko mo\u017cemy spojrze\u0107 wstecz.<\/p>\n<p>Prometheus 2.0 w tym zakresie sta\u0142 si\u0119 lepszy, poniewa\u017c liczba serii czasowych nie wp\u0142ywa ju\u017c na og\u00f3ln\u0105 wydajno\u015b\u0107 serwera (zob. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=nDalewt4BOw\">kluczowe wyst\u0105pienie KubeCon na temat Prometheus 2<\/a><\/noindex>). Niemniej jednak Prometheus przechowuje dane na lokalnym dysku. Chocia\u017c wysokoefektywne kompresowanie danych mo\u017ce znacznie zmniejszy\u0107 zu\u017cycie lokalnego SSD, ostatecznie wci\u0105\u017c istnieje ograniczenie na ilo\u015b\u0107 przechowywanych danych historycznych.<\/p>\n<p>Ponadto, w Improbable dbamy o niezawodno\u015b\u0107, prostot\u0119 i koszt. Du\u017ce lokalne dyski s\u0105 trudniejsze w eksploatacji i tworzeniu kopii zapasowych. S\u0105 dro\u017csze i wymagaj\u0105 wi\u0119cej narz\u0119dzi do tworzenia kopii zapasowych, co prowadzi do zb\u0119dnej z\u0142o\u017cono\u015bci.<\/p>\n<h4>Pr\u00f3bkowanie w d\u00f3\u0142<\/h4>\n<p>\nGdy zacz\u0119li\u015bmy pracowa\u0107 z danymi historycznymi, zrozumieli\u015bmy, \u017ce istniej\u0105 fundamentalne trudno\u015bci zwi\u0105zane z O-wielko\u015bci\u0105, kt\u00f3re sprawiaj\u0105, \u017ce zapytania staj\u0105 si\u0119 coraz wolniejsze, je\u015bli pracujemy z danymi z tygodni, miesi\u0119cy i lat.<\/p>\n<p>Standardowym rozwi\u0105zaniem tego problemu b\u0119dzie <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Decimation_(signal_processing)\">pr\u00f3bkowanie w d\u00f3\u0142<\/a><\/noindex> \u2014 zmniejszanie cz\u0119stotliwo\u015bci pr\u00f3bkowania sygna\u0142u. Dzi\u0119ki obni\u017ceniu pr\u00f3bkowania mo\u017cemy \"zmniejszy\u0107 skal\u0119\" do wi\u0119kszego zakresu czasowego i zachowa\u0107 tak\u0105 sam\u0105 liczb\u0119 pr\u00f3bek, co pozwoli na utrzymanie responsywno\u015bci zapyta\u0144.<\/p>\n<p>Pr\u00f3bkowanie w d\u00f3\u0142 starych danych jest nieuniknionym wymaganiem ka\u017cdego rozwi\u0105zania do d\u0142ugoterminowego przechowywania i wykracza poza standardowy Prometheus.<\/p>\n<h4>Dodatkowe cele<\/h4>\n<p>\nJednym z pocz\u0105tkowych cel\u00f3w projektu Thanos by\u0142a bezproblemowa integracja z dowolnymi istniej\u0105cymi instalacjami Prometheus. Drugim celem by\u0142a \u0142atwa eksploatacja z minimaln\u0105 barier\u0105 wej\u015bcia. Wszystkie zale\u017cno\u015bci powinny by\u0107 \u0142atwe do zaspokojenia zar\u00f3wno dla ma\u0142ych, jak i du\u017cych u\u017cytkownik\u00f3w, co r\u00f3wnie\u017c wi\u0105\u017ce si\u0119 z nieznacznymi kosztami podstawowymi.<\/p>\n<h2>Architektura Thanos<\/h2>\n<p>\nPo wymienieniu naszych cel\u00f3w w poprzedniej sekcji, przyjrzyjmy si\u0119, jak Thanos rozwi\u0105zuje te problemy.<\/p>\n<h4>Globalny widok<\/h4>\n<p>\nAby uzyska\u0107 widok globalny na istniej\u0105ce instancje Prometheusa, musimy po\u0142\u0105czy\u0107 jednolit\u0105 bram\u0119 zapyta\u0144 ze wszystkimi serwerami. To w\u0142a\u015bnie robi komponent Thanos. <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/blog\/2015\/06\/the-distributed-system-toolkit-patterns#example-1-sidecar-containers\">Sidecar<\/a><\/noindex>. Jest wdra\u017cany obok ka\u017cdego serwera Prometheus i dzia\u0142a jako proxy, obs\u0142uguj\u0105c lokalne dane Prometheusa przez interfejs gRPC Store API, kt\u00f3ry pozwala na wybieranie danych szereg\u00f3w czasowych wed\u0142ug etykiet i zakresu czasowego.<\/p>\n<p>Z drugiej strony znajduje si\u0119 komponent Querier, kt\u00f3ry jest skalowalny horyzontalnie i nie przechowuje stanu, kt\u00f3ry robi nieco wi\u0119cej ni\u017c tylko odpowiada na zapytania PromQL przez standardowe API HTTP Prometheusa. Komponenty Querier, Sidecar i inne elementy Thanos komunikuj\u0105 si\u0119 za pomoc\u0105 <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Gossip_protocol\">protoko\u0142u gossip.<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"Thanos \u2014 skalowalny Prometheus\" src=\"\/wp-content\/uploads\/2020\/05\/fbcf1e756f5da4e8529f17abd4cedd00.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ol>\n<li>Querier, odbieraj\u0105c zapytanie, \u0142\u0105czy si\u0119 z odpowiednim serwerem Store API, czyli z naszymi Sidecar'ami, i uzyskuje dane szereg\u00f3w czasowych z odpowiednich serwer\u00f3w Prometheus.<\/li>\n<li>Nast\u0119pnie \u0142\u0105czy odpowiedzi i wykonuje zapytanie PromQL. Querier mo\u017ce \u0142\u0105czy\u0107 zar\u00f3wno nieprzechodz\u0105ce dane, jak i dane zduplikowane z serwer\u00f3w HA Prometheusa.<\/li>\n<\/ol>\n<p>\nTo rozwi\u0105zuje g\u0142\u00f3wn\u0105 cz\u0119\u015b\u0107 naszej zagadki \u2014 scalenie danych z izolowanych serwer\u00f3w Prometheusa w jednolite przedstawienie. W rzeczywisto\u015bci Thanos mo\u017cna u\u017cywa\u0107 tylko dla tej funkcji. Nie wymaga si\u0119 \u017cadnych zmian w istniej\u0105cych serwerach Prometheusa!<\/p>\n<h4>Nielimitowany czas przechowywania!<\/h4>\n<p>\nJednak pr\u0119dzej czy p\u00f3\u017aniej b\u0119dziemy chcieli zachowa\u0107 dane, kt\u00f3re przekraczaj\u0105 standardowy czas przechowywania Prometheusa. Do przechowywania danych historycznych wybrali\u015bmy magazyn obiektowy. Jest on szeroko dost\u0119pny w ka\u017cdej chmurze, a tak\u017ce w lokalnych centrach danych i jest bardzo ekonomiczny. Co wi\u0119cej, niemal ka\u017cdy magazyn obiektowy jest dost\u0119pny przez dobrze znany interfejs API S3.<\/p>\n<p>Prometheus zapisuje dane z pami\u0119ci operacyjnej na dysk co oko\u0142o dwie godziny. Blok zapisywanych danych zawiera wszystkie dane za okre\u015blony przedzia\u0142 czasu i jest niezmienny. To bardzo wygodne, poniewa\u017c Thanos Sidecar mo\u017ce po prostu przegl\u0105da\u0107 katalog danych Prometheusa i, w miar\u0119 pojawiania si\u0119 nowych blok\u00f3w, \u0142adowa\u0107 je do koszyk\u00f3w magazynu obiektowego.<\/p>\n<p><img decoding=\"async\" alt=\"Thanos \u2014 skalowalny Prometheus\" src=\"\/wp-content\/uploads\/2020\/05\/2be803d8d7e0ce9a5ffa441b7778a40b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u0141adowanie do magazynu obiektowego bezpo\u015brednio po zapisaniu na dysk pozwala r\u00f3wnie\u017c zachowa\u0107 prostot\u0119 'skrapera' (Prometheus i Thanos Sidecar). Co upraszcza utrzymanie, koszty i projektowanie systemu.<\/p>\n<p>Jak wida\u0107, kopia zapasowa danych jest realizowana bardzo prosto. A co z zapytaniami do danych w obiektowej pami\u0119ci masowej?<\/p>\n<p>Komponent Thanos Store dzia\u0142a jako proxy do pozyskiwania danych z obiektowej pami\u0119ci masowej. Tak jak Thanos Sidecar, uczestniczy w gossip-klastrze i implementuje Store API. W ten spos\u00f3b istniej\u0105ce Querier mog\u0105 traktowa\u0107 go jak Sidecar, jako dodatkowe \u017ar\u00f3d\u0142o danych czasowych \u2014 nie jest wymagane \u017cadne specjalne ustawienie.<\/p>\n<p><img decoding=\"async\" alt=\"Thanos \u2014 skalowalny Prometheus\" src=\"\/wp-content\/uploads\/2020\/05\/5a437ae1bf8a6f79b8d24aeb9dde2d17.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBloki danych czasowych sk\u0142adaj\u0105 si\u0119 z kilku du\u017cych plik\u00f3w. Pobieranie ich na \u017c\u0105danie by\u0142oby do\u015b\u0107 nieefektywne, a lokalne buforowanie wymaga\u0142oby ogromnej pami\u0119ci i przestrzeni dyskowej.<\/p>\n<p>Zamiast tego Store Gateway wie, jak obs\u0142ugiwa\u0107 format przechowywania Prometheus. Dzi\u0119ki inteligentnemu planowaniu zapyta\u0144 i buforowaniu tylko niezb\u0119dnych cz\u0119\u015bci indeksu blok\u00f3w, mo\u017cliwe sta\u0142o si\u0119 skr\u00f3cenie z\u0142o\u017conych zapyta\u0144 do minimalnej liczby zapyta\u0144 HTTP do plik\u00f3w obiektowej pami\u0119ci masowej. W ten spos\u00f3b mo\u017cna zredukowa\u0107 liczb\u0119 zapyta\u0144 o cztery do sze\u015bciu rz\u0119d\u00f3w i osi\u0105gn\u0105\u0107 czas odpowiedzi, kt\u00f3ry jest og\u00f3lnie trudny do odr\u00f3\u017cnienia od zapyta\u0144 do danych na lokalnym SSD.<\/p>\n<p><img decoding=\"async\" alt=\"Thanos \u2014 skalowalny Prometheus\" src=\"\/wp-content\/uploads\/2020\/05\/ebcbe1ee16dbac18daa474e7cb4b12b2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJak pokazano na powy\u017cszym diagramie, Thanos Querier znacznie obni\u017ca koszty jednego zapytania do danych w obiektowej pami\u0119ci masowej, korzystaj\u0105c z formatu przechowywania Prometheus i umieszczaj\u0105c powi\u0105zane dane blisko siebie. U\u017cywaj\u0105c tego podej\u015bcia, mo\u017cemy po\u0142\u0105czy\u0107 wiele pojedynczych zapyta\u0144 w minimaln\u0105 liczb\u0119 operacji zbiorczych.<\/p>\n<h4>Dekompozycja i downsampling<\/h4>\n<p>\nPo tym, jak nowy blok danych czasowych zostanie pomy\u015blnie za\u0142adowany do obiektowej pami\u0119ci masowej, traktujemy go jako \u201edane historyczne\u201d, kt\u00f3re natychmiast staj\u0105 si\u0119 dost\u0119pne za po\u015brednictwem Store Gateway.<\/p>\n<p>Jednak po pewnym czasie bloki z jednego \u017ar\u00f3d\u0142a (Prometheus z Sidecar) gromadz\u0105 si\u0119 i ju\u017c nie wykorzystuj\u0105 ca\u0142ego potencja\u0142u indeksacji. Aby rozwi\u0105za\u0107 ten problem, wprowadzili\u015bmy kolejny komponent o nazwie Compactor. Po prostu stosuje lokalny mechanizm kompaktowania Prometheus do danych historycznych w obiektowej pami\u0119ci masowej i mo\u017ce by\u0107 uruchamiany jako prosty okresowy zada\u0144 wsadowe.<\/p>\n<p><img decoding=\"async\" alt=\"Thanos \u2014 skalowalny Prometheus\" src=\"\/wp-content\/uploads\/2020\/05\/c7dd83dab074a4c5f93069a4bc152342.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDzi\u0119ki efektywnemu kompresowaniu, zapytanie do magazynu przez d\u0142ugi czas nie stwarza problem\u00f3w z perspektywy rozmiaru danych. Jednak potencjalny koszt dekompresji miliarda warto\u015bci i przetwarzania ich przez silnik zapyta\u0144 nieuchronnie prowadzi do znacznego wyd\u0142u\u017cenia czasu wykonania zapytania. Z drugiej strony, poniewa\u017c na ka\u017cdy piksel ekranu przypada setki punkt\u00f3w danych, staje si\u0119 niemo\u017cliwe nawet wizualizowanie danych w pe\u0142nej rozdzielczo\u015bci. Tak wi\u0119c, downsampling nie tylko jest mo\u017cliwy, ale r\u00f3wnie\u017c nie prowadzi do zauwa\u017calnej utraty dok\u0142adno\u015bci. <\/p>\n<p><img decoding=\"async\" alt=\"Thanos \u2014 skalowalny Prometheus\" src=\"\/wp-content\/uploads\/2020\/05\/5f36a05aba3fbffa905b6a8da482ab3d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDo downsample'ingu danych Compactor ci\u0105gle agreguje dane o rozdzielczo\u015bci pi\u0119ciu minut i jednej godziny. Dla ka\u017cdego nieprzetworzonego fragmentu, zakodowanego przy u\u017cyciu kompresji TSDB XOR, przechowywane s\u0105 r\u00f3\u017cne typy zagregowanych danych, takie jak min, max lub sum dla jednego bloku. Umo\u017cliwia to Querierowi automatyczne wybieranie agregatu, kt\u00f3ry pasuje do danego zapytania PromQL. <\/p>\n<p>Aby korzysta\u0107 z danych o obni\u017conej precyzji, u\u017cytkownik nie potrzebuje \u017cadnej specjalnej konfiguracji. Querier automatycznie prze\u0142\u0105cza si\u0119 mi\u0119dzy r\u00f3\u017cnymi rozdzielczo\u015bciami a danymi surowymi w miar\u0119 powi\u0119kszania i zmniejszania skali przez u\u017cytkownika. W razie potrzeby u\u017cytkownik mo\u017ce zarz\u0105dza\u0107 tym bezpo\u015brednio poprzez parametr \u201estep\u201d w zapytaniu. <\/p>\n<p>Poniewa\u017c koszt przechowywania jednego GB jest niewielki, domy\u015blnie Thanos przechowuje dane surowe, dane o rozdzielczo\u015bci pi\u0119ciu minut i jednej godziny. Nie ma potrzeby usuwania danych surowych.<\/p>\n<h2>Regu\u0142y rejestracji<\/h2>\n<p>\nNawet z Thanos, regu\u0142y rejestracji s\u0105 istotn\u0105 cz\u0119\u015bci\u0105 stosu monitorowania. Zmniejszaj\u0105 z\u0142o\u017cono\u015b\u0107, op\u00f3\u017anienie i koszt zapyta\u0144. S\u0105 r\u00f3wnie\u017c wygodne dla u\u017cytkownik\u00f3w do uzyskiwania zagregowanych danych na podstawie metryk. Thanos opiera si\u0119 na standardowych instancjach Prometheus, wi\u0119c jak najbardziej dozwolone jest przechowywanie regu\u0142 rejestracji i regu\u0142 alertowania na istniej\u0105cym serwerze Prometheus. Jednak w niekt\u00f3rych przypadkach mo\u017ce to by\u0107 niewystarczaj\u0105ce:<\/p>\n<ul>\n<li>Globalne alerty i regu\u0142y (np. powiadomienia, gdy us\u0142uga nie dzia\u0142a w wi\u0119cej ni\u017c dw\u00f3ch z trzech klastr\u00f3w).<\/li>\n<li>Regu\u0142a dla danych poza lokalnym magazynem.<\/li>\n<li>D\u0105\u017cenie do przechowywania wszystkich regu\u0142 i alert\u00f3w w jednym miejscu.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Thanos \u2014 skalowalny Prometheus\" src=\"\/wp-content\/uploads\/2020\/05\/ab48e044b952bd891932b99e248120fa.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWszystkie te przypadki Thanos obejmuj\u0105 osobny komponent zwany Ruler, kt\u00f3ry oblicza regu\u0142y i alerty za pomoc\u0105 zapyta\u0144 Thanos. Umo\u017cliwiaj\u0105c znany StoreAPI, w\u0119ze\u0142 zapyta\u0144 mo\u017ce uzyska\u0107 dost\u0119p do \u015bwie\u017co obliczonych metryk. P\u00f3\u017aniej s\u0105 one r\u00f3wnie\u017c przechowywane w obiektowej pami\u0119ci masowej i staj\u0105 si\u0119 dost\u0119pne przez Store Gateway.<\/p>\n<h2>Moc Thanos<\/h2>\n<p>\nThanos jest na tyle elastyczny, \u017ce mo\u017cna go dostosowa\u0107 do swoich wymaga\u0144. To szczeg\u00f3lnie przydatne podczas migracji z prostego Prometheusa. Przypomnijmy sobie szybko na ma\u0142ym przyk\u0142adzie, co dowiedzieli\u015bmy si\u0119 o komponentach Thanos. Oto jak przenie\u015b\u0107 swojego waniliowego Prometheusa do \u015bwiata \u201enieograniczonego przechowywania metryk\u201d:<\/p>\n<p><img decoding=\"async\" alt=\"Thanos \u2014 skalowalny Prometheus\" src=\"\/wp-content\/uploads\/2020\/05\/f6ee4185af57d2a1869890014e6a0062.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ol>\n<li>Dodaj Thanos Sidecar do swoich serwer\u00f3w Prometheus \u2014 na przyk\u0142ad s\u0105siaduj\u0105cy kontener w podzie Kubernetes.<\/li>\n<li>Rozmie\u015b\u0107 kilka replik Thanos Querier, aby umo\u017cliwi\u0107 przegl\u0105danie danych. Na tym etapie \u0142atwo jest skonfigurowa\u0107 gossip mi\u0119dzy Scraperem a Querierem. Do sprawdzenia interakcji komponentu u\u017cyj metryki 'thanos_cluster_members'.<\/li>\n<\/ol>\n<p>\nTe dwa kroki s\u0105 wystarczaj\u0105ce, aby zapewni\u0107 globalny widok i p\u0142ynne deduplikowanie danych z potencjalnych replik HA Prometheusa! Po prostu pod\u0142\u0105cz swoje pulpitowe widoki do ko\u0144cowego punktu HTTP Querier lub u\u017cyj interfejsu Thanos UI bezpo\u015brednio.<\/p>\n<p>Je\u015bli potrzebujesz jednak kopii zapasowych metryk i d\u0142ugoterminowego przechowywania, b\u0119dziesz musia\u0142 wykona\u0107 jeszcze trzy kroki:<\/p>\n<ol>\n<li>Utw\u00f3rz koszyk AWS S3 lub GCS. Skonfiguruj Sidecar do kopiowania danych do tych koszyk\u00f3w. Teraz mo\u017cna zminimalizowa\u0107 lokalne przechowywanie danych.<\/li>\n<li>Rozmie\u015b\u0107 Store Gateway i pod\u0142\u0105cz go do istniej\u0105cego klastra gossip. Teraz mo\u017cesz wysy\u0142a\u0107 zapytania do danych w kopiach zapasowych!<\/li>\n<li>Rozmie\u015b\u0107 Compactor, aby zwi\u0119kszy\u0107 efektywno\u015b\u0107 zapyta\u0144 dotycz\u0105cych d\u0142ugich okres\u00f3w czasu, wykorzystuj\u0105c kompresj\u0119 i downsampling.<\/li>\n<\/ol>\n<p>\nJe\u015bli chcesz dowiedzie\u0107 si\u0119 wi\u0119cej, nie wahaj si\u0119, zapoznaj si\u0119 z naszymi <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/improbable-eng\/thanos\/tree\/master\/kube\">przyk\u0142adami manifestu kubernetes<\/a><\/noindex> i <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/improbable-eng\/thanos\/blob\/master\/docs\/getting-started.md\">jak zacz\u0105\u0107<\/a><\/noindex>!<\/p>\n<p>W pi\u0119ciu krokach przekszta\u0142cili\u015bmy Prometheusa w niezawodny system monitorowania z globalnym widokiem, nieograniczonym czasem przechowywania i potencjalnie wysok\u0105 dost\u0119pno\u015bci\u0105 metryk.<\/p>\n<h3>Pull request: potrzebujemy ci\u0119!<\/h3>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/improbable-eng\/thanos\">Thanos<\/a><\/noindex> od samego pocz\u0105tku by\u0142 projektem open source. Bezproblemowa integracja z Prometheusem i mo\u017cliwo\u015b\u0107 korzystania tylko z cz\u0119\u015bci Thanos czyni go doskona\u0142ym wyborem do skalowania systemu monitorowania bez zb\u0119dnego wysi\u0142ku.<\/p>\n<p>Zawsze ch\u0119tnie przyjmujemy Pull Requesty i Issues z GitHub. W razie potrzeby nie wahaj si\u0119 z nami skontaktowa\u0107 przez Github Issues lub Slack.<noindex><a rel=\"nofollow\" href=\"https:\/\/join.slack.com\/t\/improbable-eng\/shared_invite\/enQtMzQ1ODcyMzQ5MjM4LWY5ZWZmNGM2ODc5MmViNmQ3ZTA3ZTY3NzQwOTBlMTkzZmIxZTIxODk0OWU3YjZhNWVlNDU3MDlkZGViZjhkMjc\"> Improbable-eng #thanos<\/a><\/noindex>, je\u015bli masz pytania lub uwagi, lub chcesz podzieli\u0107 si\u0119 swoim do\u015bwiadczeniem! Je\u015bli podoba Ci si\u0119 to, co robimy w Improbable, nie wahaj si\u0119 z nami skontaktowa\u0107 \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/improbable.io\/careers\/\">zawsze mamy otwarte rekrutacje.<\/a><\/noindex>!<\/p>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/jYQP\/\">Dowiedz si\u0119 wi\u0119cej o kursie.<br \/>\n<\/a><\/noindex><\/p>\n<p>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/502122\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432 \u043a\u0443\u0440\u0441\u0430 \u00abDevOps \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b\u00bb. \u0424\u0430\u0431\u0438\u0430\u043d \u0420\u0435\u0439\u043d\u0430\u0440\u0446 (Fabian Reinartz) \u2014 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f, \u0444\u0430\u043d\u0430\u0442 Go \u0438 \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c \u0440\u0435\u0448\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438. \u0422\u0430\u043a\u0436\u0435 \u043e\u043d \u043c\u044d\u0439\u043d\u0442\u0435\u0439\u043d\u0435\u0440 Prometheus \u0438 \u0441\u043e\u0443\u0447\u0440\u0435\u0434\u0438\u0442\u0435\u043b\u044c Kubernetes SIG instrumentation. \u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u043e\u043d \u0431\u044b\u043b production-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u043c \u0432 SoundCloud \u0438 \u0432\u043e\u0437\u0433\u043b\u0430\u0432\u043b\u044f\u043b \u0433\u0440\u0443\u043f\u043f\u0443 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0432 CoreOS. \u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 Google. \u0411\u0430\u0440\u0442\u0435\u043a [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":81889,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-81888","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432 \u043a\u0443\u0440\u0441\u0430 \u00abDevOps \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b\u00bb.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/thanos-masshtabiruemyj-prometheus\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Thanos \u2014 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u044b\u0439 Prometheus | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432 \u043a\u0443\u0440\u0441\u0430 \u00abDevOps \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b\u00bb.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/thanos-masshtabiruemyj-prometheus\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-05-17T11:42:23+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-17T11:42:23+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Thanos \u2014 skalowalny Prometheus | ProHoster","description":"T\u0142umaczenie artyku\u0142u zosta\u0142o przygotowane specjalnie dla student\u00f3w kursu \u201eDevOps praktyki i narz\u0119dzia\u201d.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/thanos-masshtabiruemyj-prometheus","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Thanos \u2014 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u044b\u0439 Prometheus | ProHoster","og:description":"\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432 \u043a\u0443\u0440\u0441\u0430 \u00abDevOps \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b\u00bb.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/thanos-masshtabiruemyj-prometheus","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-05-17T11:42:23+00:00","article:modified_time":"2020-05-17T11:42:23+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"81888","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 15:48:24","updated":"2022-09-30 01:06:17","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/81888","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=81888"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/81888\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/81889"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=81888"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=81888"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=81888"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}