Thanos - Scalable Prometheus

Tafsiri ya makala hiyo ilitayarishwa mahsusi kwa ajili ya wanafunzi wa kozi hiyo "Mazoea na zana za DevOps".

Fabian Reinartz ni msanidi programu, Go fanatic, na kisuluhishi cha matatizo. Yeye pia ni mtunzaji wa Prometheus na mwanzilishi mwenza wa Kubernetes SIG ala. Hapo awali, alikuwa mhandisi wa uzalishaji katika SoundCloud na aliongoza timu ya ufuatiliaji huko CoreOS. Kwa sasa anafanya kazi katika Google.

Bartek Plotka - Mhandisi wa Miundombinu katika Haiwezekani. Anavutiwa na teknolojia mpya na shida za mifumo iliyosambazwa. Ana uzoefu wa kiwango cha chini wa programu huko Intel, uzoefu wa mchangiaji huko Mesos, na uzoefu wa kiwango cha juu wa uzalishaji wa SRE huko Improbable. Imejitolea kuboresha ulimwengu wa huduma ndogo. Anapenda zake tatu: Golang, chanzo wazi na mpira wa wavu.

Ukiangalia bidhaa yetu kuu ya SpatialOS, unaweza kukisia kuwa Improbable inahitaji miundombinu ya wingu yenye nguvu, ya kiwango cha kimataifa yenye makundi kadhaa ya Kubernetes. Tulikuwa wa kwanza kutumia mfumo wa ufuatiliaji Prometheus. Prometheus ina uwezo wa kufuatilia mamilioni ya vipimo kwa wakati halisi na inakuja na lugha yenye nguvu ya kuuliza inayokuruhusu kutoa maelezo unayohitaji.

Unyenyekevu na uaminifu wa Prometheus ni moja ya faida zake kuu. Walakini, mara tu tulipopita kiwango fulani, tulikutana na mapungufu kadhaa. Ili kutatua matatizo haya tumeanzisha Thanos ni mradi wa chanzo huria ulioundwa na Haiwezekani kubadilisha kwa urahisi makundi yaliyopo ya Prometheus kuwa mfumo mmoja wa ufuatiliaji wenye hifadhi ya data ya kihistoria isiyo na kikomo. Thanos inapatikana kwenye Github hapa.

Pata habari mpya kutoka kwa Improbable.

Malengo yetu na Thanos

Kwa kiwango fulani, matatizo hutokea ambayo ni zaidi ya uwezo wa vanilla Prometheus. Jinsi ya kuhifadhi kwa uhakika na kiuchumi petabytes ya data ya kihistoria? Je, hili linaweza kufanywa bila kuathiri muda wa majibu? Je, inawezekana kufikia vipimo vyote vilivyo kwenye seva tofauti za Prometheus na ombi moja la API? Kuna njia yoyote ya kuchanganya data iliyorudiwa iliyokusanywa kwa kutumia Prometheus HA?

Ili kushughulikia masuala haya, tuliunda Thanos. Sehemu zifuatazo zinaelezea jinsi tulivyoshughulikia masuala haya na kuelezea malengo yetu.

Kuuliza data kutoka kwa matukio mengi ya Prometheus (swali la kimataifa)

Prometheus inatoa mbinu ya kazi ya kugawa. Hata seva moja ya Prometheus hutoa scalability ya kutosha kwa watumiaji huru kutoka kwa ugumu wa sharding mlalo katika karibu kesi zote za utumiaji.

Ingawa huu ni mfano mzuri wa kupeleka, mara nyingi ni muhimu kufikia data kwenye seva tofauti za Prometheus kupitia API au UI moja - mtazamo wa kimataifa. Bila shaka, inawezekana kuonyesha maswali mengi kwenye paneli moja ya Grafana, lakini kila swali linaweza tu kutekelezwa kwenye seva moja ya Prometheus. Kwa upande mwingine, ukiwa na Thanos unaweza kuuliza na kujumlisha data kutoka kwa seva nyingi za Prometheus kwani zote zinaweza kufikiwa kutoka kwa mwisho mmoja.

Hapo awali, ili kupata mtazamo wa kimataifa katika Improbable, tulipanga matukio yetu ya Prometheus katika ngazi mbalimbali. Shirikisho la Kihierarkia. Hii ilimaanisha kuunda seva moja ya meta ya Prometheus ambayo hukusanya baadhi ya vipimo kutoka kwa kila seva ya majani.

Thanos - Scalable Prometheus

Mbinu hii imeonekana kuwa na matatizo. Hii imesababisha usanidi changamano zaidi, kuongezwa kwa uwezekano wa ziada wa kutofaulu, na matumizi ya sheria changamano ili kuhakikisha kwamba sehemu ya mwisho iliyoshirikishwa inapokea tu data inayohitaji. Kwa kuongeza, aina hii ya shirikisho haikuruhusu kupata mtazamo wa kweli wa kimataifa, kwani si data zote zinapatikana kutoka kwa ombi moja la API.

Jambo linalohusiana kwa karibu na hili ni mwonekano mmoja wa data iliyokusanywa kwenye seva za upatikanaji wa juu (HA) Prometheus. Mfano wa HA wa Prometheus hukusanya data kwa kujitegemea mara mbili, ambayo ni rahisi sana haiwezi kuwa rahisi. Walakini, kutumia mwonekano uliojumuishwa na uliotenganishwa wa mitiririko yote miwili itakuwa rahisi zaidi.

Bila shaka, kuna haja ya seva za Prometheus zinazopatikana sana. Katika hali isiyowezekana, tunachukua ufuatiliaji wa data wa dakika baada ya dakika kwa umakini sana, lakini kuwa na mfano mmoja wa Prometheus kwa kila kundi ni hatua moja ya kutofaulu. Hitilafu yoyote ya usanidi au kushindwa kwa maunzi kunaweza kusababisha upotevu wa data muhimu. Hata uwekaji rahisi unaweza kusababisha usumbufu mdogo katika ukusanyaji wa vipimo kwa sababu kuwasha upya kunaweza kuwa kwa muda mrefu zaidi kuliko muda wa kugema.

Hifadhi ya kuaminika ya data ya kihistoria

Uhifadhi wa bei nafuu, wa haraka na wa muda mrefu wa vipimo ni ndoto yetu (inayoshirikiwa na watumiaji wengi wa Prometheus). Katika Haiwezekani, tulilazimishwa kusanidi muda wa kuhifadhi vipimo hadi siku tisa (kwa Prometheus 1.8). Hii inaongeza mipaka dhahiri kwa jinsi tunavyoweza kuangalia nyuma.

Prometheus 2.0 imeboreshwa katika suala hili, kwani idadi ya safu ya wakati haiathiri tena utendaji wa jumla wa seva (tazama. Muhtasari wa KubeCon kuhusu Prometheus 2) Walakini, Prometheus huhifadhi data kwenye diski ya ndani. Ingawa mfinyazo wa data unaofaa sana unaweza kupunguza kwa kiasi kikubwa matumizi ya SSD ya ndani, hatimaye bado kuna kikomo kwa kiasi cha data ya kihistoria inayoweza kuhifadhiwa.

Zaidi ya hayo, kwa Haiwezekani tunajali kuegemea, unyenyekevu na gharama. Disks kubwa za ndani ni vigumu zaidi kufanya kazi na kuhifadhi nakala. Zinagharimu zaidi na zinahitaji zana zaidi za chelezo, na kusababisha ugumu usio wa lazima.

Kupunguza sampuli

Mara tulipoanza kufanya kazi na data ya kihistoria, tuligundua kuwa kuna matatizo ya kimsingi na big-O ambayo hufanya maswali kuwa polepole na polepole tunapofanya kazi kwa wiki, miezi na miaka ya data.

Suluhisho la kawaida la tatizo hili litakuwa sampuli za chini (downsampling) - kupunguza mzunguko wa sampuli za ishara. Kwa upunguzaji wa sampuli, tunaweza "kupunguza" hadi kiwango kikubwa zaidi cha muda na kudumisha idadi sawa ya sampuli, na kuweka maswali kujibu.

Kupunguza data ya zamani ni hitaji lisiloepukika la suluhisho lolote la uhifadhi wa muda mrefu na ni zaidi ya upeo wa vanilla Prometheus.

Malengo ya ziada

Mojawapo ya malengo ya asili ya mradi wa Thanos ilikuwa kuunganishwa bila mshono na usakinishaji wowote uliopo wa Prometheus. Lengo la pili lilikuwa urahisi wa uendeshaji na vikwazo vidogo vya kuingia. Vitegemezi vyovyote vinapaswa kutoshelezwa kwa urahisi kwa watumiaji wadogo na wakubwa, ambayo pia inamaanisha gharama ya chini.

Usanifu wa Thanos

Baada ya kuorodhesha malengo yetu katika sehemu iliyotangulia, hebu tuyafanyie kazi na tuone jinsi Thanos hutatua matatizo haya.

Mtazamo wa ulimwengu

Ili kupata mwonekano wa kimataifa juu ya matukio yaliyopo ya Prometheus, tunahitaji kuunganisha sehemu moja ya kuingilia ombi kwa seva zote. Hivi ndivyo sehemu ya Thanos hufanya. Sidecar. Huwekwa kando ya kila seva ya Prometheus na hufanya kazi kama seva mbadala, inayotoa data ya ndani ya Prometheus kupitia API ya gRPC Store, ikiruhusu data ya mfululizo wa saa kurejeshwa kwa lebo na kipindi.

Kwa upande mwingine ni sehemu ya kiwango cha nje, isiyo na uraia ya Querier, ambayo hufanya kidogo zaidi ya kujibu maswali ya PromQL kupitia API ya kawaida ya Prometheus HTTP. Querier, Sidecar na vipengele vingine vya Thanos huwasiliana kupitia itifaki ya uvumi.

Thanos - Scalable Prometheus

  1. Querier, inapopokea ombi, huunganisha kwenye seva inayolingana ya API ya Duka, yaani, kwa Sidecars zetu na hupokea data ya mfululizo wa saa kutoka kwa seva zinazolingana za Prometheus.
  2. Baada ya hapo, inachanganya majibu na kutekeleza swali la PromQL juu yao. Querier inaweza kuunganisha data iliyotenganishwa na nakala ya data kutoka kwa seva za Prometheus HA.

Hii hutatua sehemu kuu ya fumbo letu - kuchanganya data kutoka kwa seva za Prometheus zilizotengwa hadi mwonekano mmoja. Kwa kweli, Thanos inaweza kutumika tu kwa kipengele hiki. Hakuna mabadiliko yanayohitajika kufanywa kwa seva zilizopo za Prometheus!

Maisha ya rafu isiyo na kikomo!

Hata hivyo, mapema au baadaye tutataka kuhifadhi data zaidi ya muda wa kawaida wa kuhifadhi wa Prometheus. Tulichagua hifadhi ya kitu ili kuhifadhi data ya kihistoria. Inapatikana sana katika wingu lolote na pia vituo vya data vilivyo kwenye majengo na ni ya gharama nafuu sana. Kwa kuongeza, karibu hifadhi yoyote ya kitu inapatikana kupitia S3 API inayojulikana.

Prometheus huandika data kutoka kwa RAM hadi diski takriban kila masaa mawili. Kizuizi cha data kilichohifadhiwa kina data yote kwa muda uliowekwa na haiwezi kubadilika. Hii ni rahisi sana kwa sababu Thanos Sidecar inaweza kuangalia saraka ya data ya Prometheus na, kadiri vizuizi vipya vinavyopatikana, vipakie kwenye ndoo za kuhifadhi vitu.

Thanos - Scalable Prometheus

Kupakia kwenye hifadhi ya kitu mara baada ya kuandika kwenye diski pia inakuwezesha kudumisha unyenyekevu wa scraper (Prometheus na Thanos Sidecar). Ambayo hurahisisha usaidizi, gharama na muundo wa mfumo.

Kama unaweza kuona, kuhifadhi data ni rahisi sana. Lakini vipi kuhusu kuuliza data kwenye hifadhi ya kitu?

Sehemu ya Thanos Store hufanya kazi kama proksi ya kurejesha data kutoka kwa hifadhi ya kitu. Kama Thanos Sidecar, inashiriki katika kikundi cha uvumi na kutekeleza API ya Duka. Kwa njia hii, Querier iliyopo inaweza kuichukulia kama Sidecar, kama chanzo kingine cha data ya mfululizo wa saa - hakuna usanidi maalum unaohitajika.

Thanos - Scalable Prometheus

Vizuizi vya data vya mfululizo wa muda vinajumuisha faili kadhaa kubwa. Kuzipakia inapohitajika hakutakuwa na ufanisi kabisa, na kuzihifadhi kwenye eneo lako kutahitaji kiasi kikubwa cha kumbukumbu na nafasi ya diski.

Badala yake, Store Gateway inajua jinsi ya kushughulikia umbizo la uhifadhi la Prometheus. Shukrani kwa kipanga uulizaji mahiri na kuweka akiba tu sehemu muhimu za faharasa za vizuizi, inawezekana kupunguza maswali changamano hadi idadi ya chini ya maombi ya HTTP ya kupinga faili za hifadhi. Kwa njia hii, unaweza kupunguza idadi ya maombi kwa amri nne hadi sita za ukubwa na kufikia nyakati za majibu ambazo kwa ujumla ni vigumu kutofautisha kutoka kwa maombi hadi data kwenye SSD ya ndani.

Thanos - Scalable Prometheus

Kama inavyoonyeshwa kwenye mchoro hapo juu, Thanos Querier hupunguza kwa kiasi kikubwa gharama kwa kila hoja ya data ya hifadhi ya kitu kwa kutumia umbizo la hifadhi ya Prometheus na kuweka data inayohusiana kando. Kwa kutumia mbinu hii, tunaweza kuchanganya maombi mengi moja katika idadi ya chini ya utendakazi mwingi.

Kubana na kupunguza sampuli

Baada ya msururu mpya wa data ya mfululizo wa saa kupakiwa kwa ufanisi kwenye hifadhi ya kitu, tunaichukulia kama data ya "kihistoria", ambayo inapatikana mara moja kupitia Lango la Hifadhi.

Walakini, baada ya muda, vizuizi kutoka kwa chanzo kimoja (Prometheus na Sidecar) hujilimbikiza na havitumii tena uwezo kamili wa kuorodhesha. Ili kutatua tatizo hili, tulianzisha sehemu nyingine inayoitwa Compactor. Inatumika kwa urahisi injini ya ukandamizaji ya ndani ya Prometheus kwa data ya kihistoria katika uhifadhi wa kitu na inaweza kuendeshwa kama kazi rahisi ya kundi la mara kwa mara.

Thanos - Scalable Prometheus

Shukrani kwa ukandamizaji mzuri, kuuliza uhifadhi kwa muda mrefu hakuleti shida katika suala la saizi ya data. Hata hivyo, gharama inayowezekana ya kufungua thamani bilioni na kuziendesha kupitia kichakataji hoja bila shaka itasababisha ongezeko kubwa la muda wa utekelezaji wa hoja. Kwa upande mwingine, kwa kuwa kuna mamia ya pointi za data kwa pixel kwenye skrini, inakuwa vigumu hata kuibua data kwa azimio kamili. Kwa hivyo, sampuli za chini haziwezekani tu, lakini pia hazitasababisha hasara inayoonekana ya usahihi.

Thanos - Scalable Prometheus

Ili kupunguza sampuli za data, Kompakta hujumlisha data kila mara kwa msongo wa dakika tano na saa moja. Kwa kila kipande kibichi kilichosimbwa kwa kutumia mbano wa TSDB XOR, aina tofauti za data iliyojumlishwa huhifadhiwa, kama vile min, max au sum kwa block moja. Hii inaruhusu Querier kuchagua kiotomatiki mkusanyiko ambao unafaa kwa hoja fulani ya PromQL.

Hakuna usanidi maalum unaohitajika ili mtumiaji atumie data iliyopunguzwa ya usahihi. Querier hubadilisha kiotomatiki kati ya misururu tofauti na data ghafi mtumiaji anapovuta ndani na nje. Ikiwa inataka, mtumiaji anaweza kudhibiti hii moja kwa moja kupitia kigezo cha "hatua" katika ombi.

Kwa kuwa gharama ya kuhifadhi GB moja ni ya chini, kwa chaguo-msingi Thanos huhifadhi data ghafi, data ya azimio la dakika tano na saa moja. Hakuna haja ya kufuta data asili.

Sheria za kurekodi

Hata kwa Thanos, sheria za kurekodi ni sehemu muhimu ya safu ya ufuatiliaji. Wanapunguza ugumu, muda wa kusubiri, na gharama ya maswali. Pia ni rahisi kwa watumiaji kupata data iliyojumlishwa kulingana na vipimo. Thanos inategemea hali ya vanilla Prometheus, kwa hivyo inakubalika kabisa kuhifadhi sheria za kurekodi na sheria za arifa kwenye seva iliyopo ya Prometheus. Walakini, katika hali zingine hii inaweza kuwa haitoshi:

  • Tahadhari na sheria ya kimataifa (kwa mfano, tahadhari wakati huduma haifanyi kazi kwa zaidi ya vishada viwili kati ya vitatu).
  • Sheria ya data nje ya hifadhi ya ndani.
  • Tamaa ya kuhifadhi sheria zote na arifa katika sehemu moja.

Thanos - Scalable Prometheus

Kwa visa hivi vyote, Thanos inajumuisha sehemu tofauti inayoitwa Ruler, ambayo hujumuisha sheria na tahadhari kupitia Maswali ya Thanos. Kwa kutoa StoreAPI inayojulikana, nodi ya Hoji inaweza kufikia metriki mpya zilizokokotwa. Baadaye pia huhifadhiwa kwenye hifadhi ya kitu na kupatikana kupitia Lango la Hifadhi.

Nguvu ya Thanos

Thanos inaweza kunyumbulika vya kutosha kubinafsishwa ili kuendana na mahitaji yako. Hii ni muhimu sana wakati wa kuhama kutoka Prometheus wazi. Wacha turudie haraka kile tumejifunza kuhusu vijenzi vya Thanos kwa mfano wa haraka. Hivi ndivyo jinsi ya kupeleka vanilla Prometheus yako kwenye ulimwengu wa "hifadhi ya vipimo bila kikomo":

Thanos - Scalable Prometheus

  1. Ongeza Thanos Sidecar kwenye seva zako za Prometheus - kwa mfano, kontena la kando kwenye ganda la Kubernetes.
  2. Tumia nakala nyingi za Thanos Querier ili kuweza kutazama data. Katika hatua hii ni rahisi kuanzisha uvumi kati ya Scraper na Querier. Ili kuangalia mwingiliano wa vijenzi, tumia kipimo cha 'thanos_cluster_members'.

Hatua hizi mbili pekee zinatosha kutoa mwonekano wa kimataifa na upunguzaji wa data bila mshono kutoka kwa nakala zinazowezekana za Prometheus HA! Unganisha tu dashibodi zako kwenye sehemu ya mwisho ya Querier HTTP au utumie Thanos UI moja kwa moja.

Hata hivyo, ikiwa unahitaji chelezo ya vipimo na hifadhi ya muda mrefu, utahitaji kukamilisha hatua tatu zaidi:

  1. Unda ndoo ya AWS S3 au GCS. Sanidi Sidecar ili kunakili data kwenye ndoo hizi. Hifadhi ya data ya ndani sasa inaweza kupunguzwa.
  2. Tumia Lango la Hifadhi na uiunganishe kwenye kundi lako la udaku lililopo. Sasa unaweza kuuliza data iliyochelezwa!
  3. Tumia Kompakta ili kuboresha ufanisi wa hoja kwa muda mrefu kwa kutumia kubana na kupunguza sampuli.

Ikiwa unataka kujua zaidi, usisite kuangalia yetu kubernetes mifano ya wazi ΠΈ Kuanza!

Kwa hatua tano pekee, tuligeuza Prometheus kuwa mfumo unaotegemewa wa ufuatiliaji wenye mwonekano wa kimataifa, muda wa kuhifadhi bila kikomo na uwezekano wa upatikanaji wa juu wa vipimo.

Vuta ombi: tunakuhitaji!

Thanos imekuwa mradi wa chanzo huria tangu mwanzo. Ujumuishaji usio na mshono na Prometheus na uwezo wa kutumia sehemu ya Thanos hufanya iwe chaguo bora kwa kuongeza mfumo wako wa ufuatiliaji kwa urahisi.

Daima tunakaribisha Maombi ya Kuvuta ya GitHub na Masuala. Kwa sasa, jisikie huru kuwasiliana nasi kupitia Github Issues au slack Haiwezekani-eng #thanosikiwa una maswali au maoni, au unataka kushiriki uzoefu wako kuitumia! Iwapo unapenda tunachofanya kwa Improbable, usisite kuwasiliana nasi - daima tuna nafasi za kazi!

Jifunze zaidi kuhusu kozi.

Chanzo: mapenzi.com

Kuongeza maoni