Artikli tĂ”lge on ette valmistatud spetsiaalselt kursuse ĂŒliĂ”pilastele .
â tarkvaraarendaja, Go fĂ€nn ja keeruliste probleemide lahendamise entusiast. Ta on ka Prometheuse hooldaja ja Kubernetes SIG instrumentation kaasasutaja. A varem töötas ta production-insenerina SoundCloudis ja juhtis CoreOSis monitooringugruppi. Praegu töötab ta Google'is.
â infrastruktuuriinsener Improbables. Huvi uute tehnoloogiate ja jaotatud sĂŒsteemide probleemide vastu. Tal on madala taseme programmeerimise kogemus Intelis, on olnud Mesose panustaja ja omab maailmatasemel SRE kogemust Improbables. Tegeleb mikroteenuste maailma tĂ€iustamisega. Tema kolm armastust: Golang, avatud lĂ€htekood ja vĂ”rkpall.
Vaadates meie lipulaeva toodet SpatialOS, saate aimu, et Improbable vajab suure dĂŒnaamilisusega pilve infrastruktuuri, mis on maailmatasemel ja millel on kĂŒmneid Kubernetes'e klastreid. Olime ĂŒhed esimesed, kes hakkasid kasutama monitooringusĂŒsteemi . Prometheus on vĂ”imeline jĂ€lgima miljoneid mÔÔdikuid reaalajas ja kaasas on vĂ”imas pĂ€ringukeel, mis vĂ”imaldab vajalikku teavet vĂ€lja tuua.
Prometheuse lihtsus ja usaldusvÀÀrsus on ĂŒks tema kĂ”ige olulisemaid eeliseid. Siiski, teatud skaalal seisame silmitsi mitmete puudustega. Nende probleemide lahendamiseks töötasime vĂ€lja â avatud lĂ€htekoodiga projekt, mille loob Improbable, sujuvaks ĂŒleminekuks olemasolevatest Prometheuse klastritest ĂŒhte monitooringusĂŒsteemi piiramatute ajalooliste andmete salvestamiseks. Thanos on saadaval Githubis .
Meie eesmÀrgid Thanosega
Teatud skaalal tekivad probleemid, mis ĂŒletavad vanilje Prometheuse vĂ”imalused. Kuidas salvestada petabaitide ajalugu usaldusvÀÀrselt ja tĂ”husalt? Kas seda saab teha ilma pĂ€ringu vastuse ajaloo kahjustamata? Kas on vĂ”imalik saada juurdepÀÀs kĂ”ikidele mÔÔdikutega, mis asuvad erinevates Prometheuse serverites, ĂŒhe API-pĂ€ringu kaudu? Kas on vĂ”imalik kuidagi ĂŒhendada replitseeritud andmed, mis on kogutud Prometheuse HA kaudu?
Nende kĂŒsimuste lahendamiseks lĂ”ime Thanose. JĂ€rgmistes lĂ”ikudes kirjeldame, kuidas me nendega lĂ€henesime ja selgitame eesmĂ€rke, mida me taga ajasime.
Andmete pÀrimine mitmest Prometheuse eksemplarist (globaalne pÀring)
Prometheus pakub funktsionaalset lĂ€henemist shardimisele. Isegi ĂŒks Prometheuse server tagab piisava skaleeritavuse, et vabastada kasutajad horisontaalse shardimise keerukusest praktiliselt kĂ”ikides kasutusvĂ”imalustes.
Kuigi see on suurepĂ€rane juurutusmudel, on sageli vajalik ligipÀÀs andmetele erinevates Prometheuse serverites ĂŒhe API vĂ”i kasutajaliidese kaudu â globaalne vaade. Loomulikult on vĂ”imalik kuvada mitmeid pĂ€ringuid ĂŒhes Grafana paneelis, kuid iga pĂ€ringut saab teostada vaid ĂŒhe serveri Prometheus suhtes. Teiselt poolt saate Thanos'e abil kĂŒsida ja koguda andmeid mitmest Prometheuse serverist, kuna kĂ”ik need on kĂ€ttesaadavad ĂŒhe lĂ”pp-punkti kaudu.
Varem, et saada globaalset vaadet Improbable'is, korraldasime oma Prometheuse eksemplarid mitmetasandiliseks . See tĂ€hendas ĂŒhe metaserveri Prometheus loomist, mis kogub osa metrikatest igast "leht" serverist.

See lĂ€henemine osutus probleemseks. See tĂ”i kaasa konfiguratsiooni keerukuse, potentsiaalselt uue tĂ”rke esindaja lisamise ning keeruliste reeglite rakendamise, et anda liidetud lĂ”pp-punktile ainult vajalikud andmed. Lisaks ei luba selline föderatsioon saada tĂ”elist globaalset vaadet, kuna mitte kĂ”ik andmed ei ole kĂ€ttesaadavad ĂŒhe API pĂ€ringu kaudu.
Sellega on tihedalt seotud andmete ĂŒhtne esitamine, mis on kogutud kĂ”rge kĂ€ttesaadavusega (high-availability, HA) Prometheuse serverites. Prometheuse HA mudel kogub andmeid sĂ”ltumatult kaks korda, mis on nii lihtne, et ei saaks olla lihtsam. Siiski oleks palju mugavam kasutada liidetud ja dedupeeritud suurte voogude esitamist.
Muidugi on kĂ”rge kĂ€ttesaadavuse serverites Prometheus vajadus. Improbable'is vĂ”tame andmete minutipĂ”hise jĂ€lgimise tĂ”siselt, kuid ĂŒks Prometheuse eksemplar klastris on ainus tĂ”rke koht. Iga konfiguratsiooniviga vĂ”i riistvararike vĂ”ivad potentsiaalselt viia oluliste andmete kadumiseni. Isegi lihtne juurutamine vĂ”ib pĂ”hjustada pisikesi tĂ”rkeid metrikate kogumises, kuna taaskĂ€ivitamine vĂ”ib vĂ”tta oluliselt kauem kui kraapimise intervall.
UsaldusvÀÀrne ajalooliste andmete sÀilitamine
Odavaru, kiire ja pikaajaline mÔÔdikute salvestamine on meie unistus (mida jagavad enamik Prometheuse kasutajaid). Improbables olime sunnitud seadistama mÔÔdikute sĂ€ilitamise aja ĂŒheks pĂ€evaks (Prometheus 1.8 jaoks). See seab ilmsed piirangud sellele, kui kaugele me tagasi vaadata saame.
Prometheus 2.0 on selles osas parem, kuna ajasarjade arv ei mĂ”juta enam serveri ĂŒldist jĂ”udlust (vt. ). Sellegipoolest salvestab Prometheus andmeid kohalikule kettale. Kuigi tĂ”hus andmete kokkusurumine vĂ”ib mĂ€rkimisvÀÀrselt vĂ€hendada kohaliku SSD kasutamist, on lĂ”puks ikkagi piirang salvestatavate ajalooliste andmete mahule.
Lisaks hoolime Improbables usaldusvÀÀrsusest, lihtsusest ja kuludest. Suured kohalikud kettad on keerulisemad hallata ja varundada. Need maksavad rohkem ja vajavad rohkem tööriistu varundamiseks, mis toob kaasa liigset keerukust.
Allapoole proovimine
Kui me hakkasime töötama ajalooliste andmetega, sai selgeks, et on olemas fundamentaalsed raskused O-suurega, mis muudab pÀringud aina aeglasemaks, kui töötame andmetega nÀdalate, kuude ja aastate jooksul.
Selle probleemi standardlahenduseks on (downsampling) â signaali sageduse vĂ€hendamine. Alandades diskreetimist, saame âskaala alandadaâ pikema ajavahemiku jaoks ja sĂ€ilitada endise valimite arvu, mis tagab pĂ€ringute vastupidavuse.
Ajalooliste andmete allapoole proovimine on igasuguste pikaajaliste salvestuslahenduste vĂ€ltimatu nĂ”ue ja ĂŒletab vanilje Prometheuse raames.
Lisaks eesmÀrgid
Ăks projekti Thanos algseid eesmĂ€rke oli sujuv integreerimine olemasolevate Prometheuse installatsioonidega. Teine eesmĂ€rk oli lihtne haldamine minimaalsete sissepÀÀsupiirangutega. KĂ”ik sĂ”ltuvused peavad olema kergesti rahuldatud nii vĂ€ikeste kui suurte kasutajate jaoks, mis eeldab ka vĂ€ikeseid algkulusid.
Thanos arhitektuur
PÀrast seda, kui oleme eelnevas jaotises loetletud meie eesmÀrgid, katsetame neid ja vaatame, kuidas Thanos need probleemid lahendab.
Globaalne vaade
Ette saada global view olemasolevate Prometheuse instantside ĂŒle, peame siduma ĂŒhtse sisenemispunkti kĂ”igi serveritega. Just sellega tegeleb Thanos komponent. . See paigaldatakse iga Prometheuse serveri kĂ”rvale ja töötab kui pöördus, teenindades kohalikke Prometheuse andmeid gRPC-API kaudu, mis vĂ”imaldab valida jĂ€rjendi andmeid siltide ja ajavahemiku pĂ”hjal.
Teiselt poolt on horisontaalselt skaleeritav komponent Querier, mis ei sÀilita olekuandmeid ja tegutseb veidi rohkem kui lihtsalt vastab PromQL pÀringutele standardse Prometheuse HTTP API kaudu. Komponendid Querier, Sidecar ja teised Thanos suhtlevad lÀbi .

- Querier, kui ta saab pĂ€ringu, ĂŒhendub vastava Store API serveriga, st meie Sidecar'iga, ja saadab ajajĂ€rgu andmed vastavatelt Prometheuse serveritelt.
- PĂ€rast seda ĂŒhendab ta vastused ja teostab PromQL pĂ€ringu nende pĂ”hjal. Querier vĂ”ib ĂŒhendada nii mittesobivaid andmeid kui ka dubleeritud andmeid HA-Prometheuse serveritest.
See lahendab suure osa meie mĂ”istatustest â andmete ĂŒhendamine isoleeritud Prometheuse serveritest ĂŒhtsesse vaatesse. Tegelikult vĂ”ib Thanost kasutada ainult selle vĂ”imaluse tĂ”ttu. Olemasolevatesse Prometheuse serveritesse ei pea tegema mingeid muudatusi!
Piiramatu sÀilitusaeg!
Kuid varem vĂ”i hiljem tahame sĂ€ilitada andmeid, mis ĂŒletavad tavalise Prometheuse sĂ€ilituse aega. Ajalooliste andmete sĂ€ilitamiseks valisime objektse salvestuse. See on laialdaselt saadaval igas pilves ning ka kohalikus andmekeskustes ja on vĂ€ga ökonoomne. Lisaks on praktiliselt iga objektne salvestus saadaval lĂ€bi hĂ€sti tuntud S3 API.
Prometheus salvestab andmeid mÀlust kettale umbes iga kahe tunni jÀrel. Salvestatava andmete plokk sisaldab kÔiki andmeid kindlaksmÀÀratud ajavahemiku jooksul ja on muutumatud. See on vÀga mugav, kuna Thanos Sidecar saab lihtsalt vaadata Prometheuse andme katalooge ja uute plokkide ilmumisel laadida need objektse salvestuse anumatesse.

Laadimine objektse salvestusse kohe pĂ€rast ketasessimist hoiab ka âscraperiâ (Prometheus ja Thanos Sidecar) lihtsana. Mis lihtsustab sĂŒsteemi hooldust, kulusid ja kujundust.
Nagu nÀete, toimub andmete varundamine vÀga lihtsalt. Kuid mis saab andmete pÀringust objektihoidlas?
Thanos Store komponent toimib vaheproses andmete saamiseks objektihoidlast. Nagu Thanos Sidecar, osaleb see gossip-klusteris ja rakendab Store API-d. Seega vĂ”ivad olemasolevad Querierid seda kĂ€sitleda kui Sidecar'i, kui veel ĂŒhte ajasari andmete allikat â spetsiaalset seadistamist ei ole vaja.

Aja seeria andmeplokid koosnevad mitmest suurest failist. Nende nĂ”udmisel allalaadimine oleks ĂŒsna ebaefektiivne ja kohalik vahemĂ€lu vajaks tohutult mĂ€lu ja kettaruumi.
Selle asemel teab Store Gateway, kuidas kĂ€sitleda Promethee hoidmisvormingut. TĂ€nu nutikale pĂ€ringu planeerijale ja ainult vajalike indeksiosade plokkide vahemĂ€llu salvestamisele on vĂ”imalik keerulisi pĂ€ringuid vĂ€hendada minimaalsete HTTP-pĂ€ringute arvu objektihoidla failidele. Niisiis, saame vĂ€hendada pĂ€ringute arvu neli kuni kuus korda ja saavutada reageerimisaega, mida on ĂŒldiselt raske eristada kohalike SSD-de andmete pĂ€ringutest.

Nagu on nĂ€idatud ĂŒlaltoodud diagrammil, vĂ€hendab Thanos Querier objektihoidlas andmete pĂ€ringute kulu oluliselt, kasutades Promethee hoidmisvormingut ja paigutades seotud andmed lĂ€hedale. Kasutades seda lĂ€henemist, saame koondada palju ĂŒksikpĂ€ringute minimaalsete hulgi-operatsioonideni.
Kompaktsioon ja allasampleerimine
PĂ€rast seda, kui uus aja seeria andmeplokk on edukalt ĂŒles laaditud objektihoidlasse, kĂ€sitleme seda kui "ajaloolisi" andmeid, mis on kohe kergesti kĂ€ttevĂ”etavad Store Gateway kaudu.
Kuid mĂ”ne aja pĂ€rast koguneb sama allika (Prometheus koos Sidecar'iga) plokke ja nad ei kasuta enam kogu indekseerimise potentsiaali. Selle probleemi lahendamiseks tutvustasime veel ĂŒhte komponenti nimega Compactor. See rakendab lihtsalt kohalikke Promethee kompaktsiooni mehhanisme ajalooliste andmete objektihoidlas ja seda saab kĂ€ivitada nagu lihtsat perioodilist paketitööd.

TĂ€nu efektiivsele kokkusurumisele ei tekita andmehoidla pĂ€ring suures andmemahus probleeme. Siiski vĂ”ib miljoni vÀÀrtuse vĂ€ljapakkimise ja nende töötlusse suunamise hind viia pĂ€ringuaegade jĂ€rsu suurenemiseni. Teisest kĂŒljest, kuna iga ekraani pikseli kohta on sadu andmepunkte, ei ole isegi kogu mÀÀratlemine andmete visuaaliseerimine enam vĂ”imalik. Seega ei ole allahindlus mitte ainult vĂ”imalik, vaid see ei too kaasa mĂ€rkimisvÀÀrset tĂ€psuse kaotust.

Andmete allahindlemiseks kogub Compactor pidevalt andmeid viie minuti ja ĂŒhe tunni resolutsiooniga. Iga toorandmefragment, mis on kodeeritud TSDB XOR-kompressiooniga, salvestab erinevat tĂŒĂŒpi kogumande, nagu min, max vĂ”i sum ĂŒhe bloki kohta. See vĂ”imaldab Querieril automaatselt valida selle PromQL-pĂ€ringu jaoks sobiva kogumi.
Kasutajalt ei ole andmete madalama tÀpsuse kasutamiseks vajalik mingeid erilisi seadistusi. Querier vahetab automaatselt eri resolutsioonide ja toorandmete vahel kasutaja suumimise ja kÀrpimise korral. Soovi korral saab kasutaja seda kasutada otse pÀringu 'step' parameeter kaudu.
Kuna ĂŒhe GB salvestamise kulud on vĂ€ikesed, salvestab Thanos vaikimisi toorandmed, andmed viie minuti ja ĂŒhe tunni resolutsiooniga. Toorandmete kustutamine ei ole vajalik.
Salvestamise reeglid
Isegi Thanosel on salvestamise reeglid olulised osad jÀlgimise virnast. Need vÀhendavad pÀringute keerukust, viivitust ja kulusid. Need on ka kasutajatele mugavad, et saada kokkuvÔtteid meetmete kohta. Thanos pÔhineb puhaste Prometheuse instantsidel, seega on vÔimalik salvestada salvestamise reegleid ja hÀire reegleid olemasoleval Prometheuse serveril. Siiski vÔib mÔnel juhul sellest jÀÀda vÀheks:
- Globaalne hÀire ja reegel (nÀiteks teavitamine, kui teenus ei tööta enam kui kahel kolmest klastrist).
- Reegel andmete kohta, mis ei ole kohalikus ladustamises.
- Soov hoida kĂ”ik reeglid ja hĂ€ired ĂŒhes kohas.

KÀesolevate olukordade jaoks sisaldab Thanos eraldi komponenti nimega Ruler, mis arvutab rule ja alert Thanos Queries abil. Andes hÀsti tuntud StoreAPI, saavad Query-sÔlmed juurdepÀÀsu vÀrskelt arvutatud mÔÔdikutele. Hiljem salvestatakse need ka objektide salvestusse ja need on kergesti kÀttesaadavad Store Gateway kaudu.
Thanos jÔud
Thanos on piisavalt paindlik, et seda saaks kohandada vastavalt teie nÔudmistele. See on eriti kasulik, kui migreerida lihtsast Prometheusest. Korraks meenutame vÀikese nÀite abil, mida oleme Thanos komponentide kohta Ôppinud. Nii saate oma tavalise Prometheuse viia "piiramatu mÔÔdiku salvestamise" maailma:

- Lisage Thanos Sidecar oma Prometheuse serveritele â nĂ€iteks naaber konteiner Kubernetes podis.
- KÀitage mitmeid Thanos Querier koopiaid, et andmeid vaadata. Sel hetkel on lihtne seadistada gossip Scraperi ja Querier vahel. Komponentide omavahelise suhtluse kontrollimiseks kasutage mÔÔdikut 'thanos_cluster_members'.
Nendest kahest sammust piisab, et tagada globaalne ĂŒlevaade ja sujuv andmete dedupe potentsiaalsetest HA-replikatest Prometheuses! Lihtsalt ĂŒhendage oma armatuurlaud HTTP Querier lĂ”pp-punktiga vĂ”i kasutage Thanos UI otse.
Kui aga vajate mÔÔdikute varundamist ja pikaajalist salvestamist, peate tÀitma veel kolm sammu:
- Looge AWS S3 vĂ”i GCS konteiner. Seadistage Sidecar, et kopeerida andmeid nendesse konteineritesse. NĂŒĂŒd saate minimeerida kohalikku andmete salvestamist.
- KĂ€itage Store Gateway ja ĂŒhendage see olemasoleva gossip-klastriga. NĂŒĂŒd saab andmevarunduse jĂ€rele pĂ€ringute tegemiseks saata!
- KÀitage Compactor, et suurendada pÀringute efektiivsust pikaajaliste ajavahemike jooksul, kasutades tihendamist ja allasamaltingut.
Kui soovite rohkem teada saada, tutvuge meiega. ja !
KĂ”igest viie sammuga muutisime Prometheuse usaldusvÀÀrseks jĂ€lgimissĂŒsteemiks globaalsete vaatamisvĂ”imalustega, piiramatute salvestusajaga ja potentsiaalselt kĂ”rgema saadavuse mÔÔdikute osas.
Pull request: te olete meile vajalik!
oli algusest peale avatud lĂ€htekoodiga projekt. Sujuv integratsioon Prometheusega ja vĂ”imalus kasutada ainult osa Thanost teeb sellest suurepĂ€rase valiku jĂ€lgimissĂŒsteemi skaleerimiseks ilma liigsete pingutusteta.
Me oleme alati rÔÔmsad GitHubi Pull Requestide ja Issueside ĂŒle. Samuti Ă€rge kartke meiega ĂŒhendust vĂ”tta lĂ€bi Github Issues vĂ”i slacki., kui teil on kĂŒsimusi vĂ”i tagasisidet, vĂ”i soovite jagada oma kogemusi! Kui teile meeldib, mida me Improbable'is teeme, Ă€rge kartke meiega ĂŒhendust vĂ”tta â !
Allikas: habr.com
