Artikli tĂ”lge on ette valmistatud spetsiaalselt kursuse ĂŒliĂ”pilastele .
â tarkvaraarendaja, Go fĂ€nn ja keeruliste probleemide lahendamise entusiast. Samuti on ta Prometheuse hooldaja ja Kubernetes SIG instrumentation kaasasĂŒttija. Varem töötas ta SoundCloudis tootmisinsenerina ja juhtis CoreOSis jĂ€lgimisrĂŒhma. Praegu töötab ta Google'is.
â infrastruktuuriinsener Improbable'is. Uurib uusi tehnoloogiaid ja jaotatud sĂŒsteemide vĂ€ljakutseid. Tal on madala taseme programmeerimise kogemus Intelis, Mesos'e kaastöötaja kogemus ja maailmanĂ€gline SRE tootmispraktika Improbable'is. TĂ”ukab edasi mikroteenuste maailma. Tema kolm armastust: Golang, avatud lĂ€htekood ja vĂ”rkpall.
Vaadates meie lipulaeva toodet SpatialOS, saate hinnata, et Improbable vajab kĂ”rgdĂŒnaamilist globaalset pilvetehnoloogiat, millel on kĂŒmneid Kubernetes'e klastreid. Me olime ĂŒks esimesi, kes hakkas kasutama jĂ€lgimissĂŒsteemi . Prometheus suudab reaalajas jĂ€lgida miljoneid mÔÔdikuid ja sisaldab vĂ”imsat pĂ€ringu keelt, mis vĂ”imaldab vajalikku teavet vĂ€lja tĂ”mmata.
Prometheuse kasutamise lihtsus ja usaldusvÀÀrsus on selle peamised eelised. Ent teatud suurusele jĂ”udes oleme pidanud silmitsi seisma mitmete puudustega. Nende probleemide lahendamiseks oleme vĂ€lja töötanud â avatud lĂ€htekoodiga projekti, mille on loonud Improbable, et muuta olemasolevad Prometheuse klastrid sujuvaks ĂŒhtseks jĂ€lgimissĂŒsteemiks, millel on piiramatu ajalooliste andmete salvestus. Thanos on saadaval Githubis .
Meie eesmÀrgid Thanosiga
Teatud suurusel tekivad probleemid, mis ĂŒletavad vanilli Prometheuse vĂ”imalusi. Kuidas usaldusvÀÀrselt ja ökonoomselt salvestada petabaitide jagu ajaloolisi andmeid? Kas seda saab teha ilma pĂ€ringu vastuse aega kahjustamata? Kas saame pÀÀseda kĂ”igile erinevatel Prometheuse serveritel asuvatele mÔÔdikutel ĂŒhe API-pĂ€ringu kaudu? Kas on vĂ”imalik sĂ€ilitada replitseeritud andmeid, kogutud Prometheuse HA abil?
Nende kĂŒsimuste lahendamiseks oleme loonud Thanos. JĂ€rgmistes osades kirjeldame, kuidas me nendele kĂŒsimustele lĂ€henesime ja selgitame eesmĂ€rke, mida soovisime saavutada.
Andmete pÀrimine mitmest Prometheuse eksemplarist (globaalne pÀring)
Prometheus pakub funktsionaalset lĂ€henemist sharding'ule. Isegi ĂŒks Prometheuse server tagab piisava skaleeritavuse, et vabastada kasutajad praktiliselt kĂ”igi kasutusjuhtumite horisontaalse sharding'i keerukustest.
Kuigi see on suurepĂ€rane juurutusmudel, on sageli vajalik ligipÀÀs andmetele erinevates Prometheuse serverites lĂ€bi ĂŒhe API vĂ”i kasutajaliidese â globaalne vaade. Muidugi on vĂ”imalik kuvada mitut pĂ€ringut ĂŒhes Grafana paneelis, kuid iga pĂ€ringut saab teostada ainult ĂŒhes Prometheuse serveris. Teisest kĂŒljest vĂ”imaldab Thanos pĂ€rida ja agregatsiooni andmeid mitmest Prometheuse serverist, kuna kĂ”ik need on saadaval ĂŒhe lĂ”pp-punkti kaudu.
Varem, et saada globaalset vaadet Improbables, korraldasime oma Prometheuse eksemplarid mitme tasandi . See tĂ€hendas ĂŒhe meta-serveri Prometheuse loomist, mis kogub osa meetrikaid igalt 'lehe'de' serverilt.

See lĂ€henemine osutus probleemseks. See tĂ”i kaasa konfiguratsiooni keerukuse, lisas tĂ€iendava vĂ”imaliku rikete punkti ja rakendas keerulisi reegleid, et anda föderaalsete lĂ”pp-punktide kaudu ainult vajalikud andmed. Lisaks ei vĂ”imalda selline föderatsioon saada tĂ”elist globaalset ĂŒlevaadet, kuna kĂ”ik andmed ei ole kergesti kĂ€ttesaadavad ĂŒhe API-pĂ€ringu kaudu.
Sellega seostatakse tihedalt andmete ĂŒhtne esitus, mis on kogutud kĂ”rge saadavusega (high-availability, HA) Prometheuse serverites. HA-mudel kogub Prometheuse andmeid iseseisvalt kaks korda, mis on nii lihtne, et pole lihtsalt vĂ”imalik lihtsamat. Siiski oleks palju mugavam kasutada ĂŒhendavat ja dubleeritud esitusviisi mĂ”lema voogude jaoks.
Muidugi on Prometheuse kĂ”rgelt kergendatud serverites selline vajadus. Improbable'is suhtume tĂ”siselt andmete iga minutise jĂ€lgimise vajadusse, kuid ĂŒhe Prometheuse koha olemasolu klastris on ainus rikkevoht. Ăkski konfiguratsiooniviga vĂ”i riistvara rike ei saa potentsiaalselt kaotada olulisi andmeid. Isegi lihtne juurutamine vĂ”ib pĂ”hjustada lĂŒhikesi vigu mÔÔtmete kogumises, kuna kĂ€ivitamine vĂ”ib vĂ”tta tunduvalt kauem kui kraapimise intervall.
UsaldusvÀÀrne ajalooliste andmete salvestamine
Odav, kiire ja pikaajaline mÔÔtmete salvestamine on meie unistus (mida jagab enamik Prometheuse kasutajaid). Improbable'is pidime mÀÀrama mÔÔtmete sĂ€ilivusaja ĂŒheks pĂ€evaks (Prometheus 1.8 puhul). See seab ilmsed piirangud sellele, kui kaugele me saame tagasi vaadata.
Prometheus 2.0 on selles osas parem, kuna ajaseeriad ei mĂ”juta enam serveri ĂŒldist tulemuslikkust (vt ). Kuid Prometheus salvestab andmed kohalikule kettale. Kuigi andmete tĂ”hus kokkupressimine vĂ”ib mĂ€rgatavalt vĂ€hendada kohalikku SSD kasutust, on lĂ”puks siiski piirang sĂ€ilitatavate ajalooliste andmete mahule.
Lisaks hoolitseme Improbables usaldusvÀÀrsuse, lihtsuse ja kulude pÀrast. Suured kohalikud kettad on keerukamad haldamise ja varundamise osas. Need on kallimad ja vajavad rohkem varundamisvahendeid, mis toob kaasa liigset keerukust.
AlampÔhjaline vÀhendamine
Kui me hakkasime töötama ajalooliste andmetega, saime aru, et O-suure mahtudega on pÔhilisi keerukusi, mis muudavad pÀringud jÀrjest aeglasemaks, kui töötame nÀdalate, kuude ja aastate andmetega.
Selle probleemi standardlahendus on (downsampling) â signaali proovivĂ”tusageduse vĂ€hendamine. ProovivĂ”tusageduse vĂ€hendamise kaudu saame âsuuruse vĂ€hendadaâ pikema ajavahemiku jooksul ja sĂ€ilitada endise valimi arvu, mis vĂ”imaldab pĂ€ringute vastupidavust pidada.
Vana andmete allasammumine on igasuguste pikaajalise salvestuse lahenduste vĂ€ltimatu nĂ”ue ja see ĂŒletab tavalise Prometheuse piire.
TÀiendavad eesmÀrgid
Ăks Thanos projekti algseid eesmĂ€rke oli sujuv integreerimine olemasolevate Prometheuse installeerimistega. Teine eesmĂ€rk oli lihtne kasutamine vĂ€hese sissepÀÀsupiiranguga. KĂ”ik sĂ”ltuvused peaksid olema kergesti rahuldavad nii vĂ€ikeste kui ka suurte kasutajate jaoks, mis eeldab samuti vĂ€ikest alghinda.
Thanos arhitektuur
PÀrast meie eesmÀrkide loetlemist eelmises jaotises, töötame koos nende nimel ja vaatame, kuidas Thanos neid probleeme lahendab.
Globaalne vaade
Globaalsete vaadete saamiseks olemasolevate Prometheuse eksemplaride peal, peame ĂŒhendama ĂŒhtse pĂ€ringute sisenemispunkti kĂ”igi serveritega. Just sellega tegeleb Thanos komponent. . See paigaldatakse igasuguste Prometheuse serverite kĂ”rvale ja töötab nagu vahendaja, teenindades kohalikke Prometheuse andmeid gRPC-API Store abil, mis vĂ”imaldab valida ajaserveri andmeid siltide ja ajavahemiku jĂ€rgi.
Teiselt poolt on horisontaalselt skaleeritav Querier, millel ei ole olekukuud, mis teeb veidi rohkem kui lihtsalt vastab PromQL pÀringutele standardse Prometheuse HTTP API kaudu. Querier, Sidecar ja muud Thanos komponendid suhtlevad .

- Querier, kui ta saab pĂ€ringu, ĂŒhendub vastava serveriga Store API, milleks on meie Sidecar'id, ja saab ajajoonte andmed vastavatelt Prometheuse serveritelt.
- SeejĂ€rel liidab ta vastused ja tĂ€idab nende pĂ”hjal PromQL pĂ€ringu. Querier suudab liita nii mitteĂŒhtivad kui ka dubleeritud andmed HA Prometheuse serveritest.
See lahendab suure osa meie mĂ”istatust â andmete liitmine isoleeritud Prometheuse serveritest ĂŒhtseks vaateks. Tegelikult saab Thanoset kasutada ainult selle vĂ”imaluse tĂ”ttu. Olemasolevatele Prometheuse serveritele ei ole vaja mingeid muudatusi teha!
Piiramatu sÀilitusaeg!
Siiski, varem vĂ”i hiljem soovime sĂ€ilitada andmeid, mis ĂŒletavad Prometheuse tavalise sĂ€ilivusaja. Ajalooliste andmete sĂ€ilitamiseks oleme valinud objektide salvestamise. See on laialdaselt saadaval igas pilves, samuti kohalikes andmekeskustes, ja on vĂ€ga ökonoomne. Lisaks on praktiliselt iga objektide salvestamine kergesti ligipÀÀsetav hĂ€sti tuntud S3 API kaudu.
Prometheus salvestab andmed operatiivmÀluvabad diskile umbes iga kahe tunni tagant. Salvestatud andmeblokid sisaldavad kÔiki andmeid fikseeritud ajavahemiku jooksul ning on muutmatud. See on vÀga mugav, kuna Thanos Sidecar saab lihtsalt vaadata Prometheuse andme katalooge ja, uute blokkside ilmumise korral, laadida need objektide salvestamise Àmbritesse.

Andmete laadimine objektide salvestamisse otse pĂ€rast salvestamist diskile vĂ”imaldab samuti sĂ€ilitada âkraapijateâ (Prometheus ja Thanos Sidecar) lihtsuse. See lihtsustab sĂŒsteemi hooldust, kulusid ja disaini.
Nagu nÀete, on andmete varundamine vÀga lihtne. Aga mis saab objektide salvestamisel andmete pÀringutest?
Thanos Store komponent toimib vahendajana objektide salvestusruumist andmete hankimiseks. Nagu Thanos Sidecar, osaleb ta gossip-klassis ja rakendab Store API. Seega, olemasolevad Querier'id saavad seda kĂ€sitleda kui Sidecar'i, veel ĂŒhe allikana ajaseeriate andmete jaoks â mingeid spetsiaalseid seadistusi ei nĂ”uta.

Ajaseeriate andmeplokid koosnevad mitmest suurest failist. Nende nĂ”udmisel laadimine oleks ĂŒsna ebaefektiivne ning lokaalne vahemĂ€lu nĂ”uaks tohutult mĂ€lu ja kettaruumi.
Selle asemel teab Store Gateway, kuidas töötada Prometheuse salvestusformaadi vĂ”i vorminguga. TĂ€nu tĂ€iustatud pĂ€ringute planeerijale ja ainult vajalike indeksiosade vahemĂ€lule on keerukate pĂ€ringute lihtsustamine vĂ€hendatud minimaalsete HTTP-pĂ€ringuteni objektide salvestusruumifailidele. Seega saab kĂŒsida neli kuni kuus korda vĂ€hem ja saavutada vastusaeg, mida on ĂŒldiselt raske eristada lokaalsest SSD-l olevate andmete pĂ€ringutest.

Nagu diagrammil eespool nĂ€idatud, vĂ€hendab Thanos Querier andmehĂ”ive objektihoidlas ĂŒhe pĂ€ringu kulusid oluliselt, kasutades Prometheuse salvestusvormingut ja paigutades seotud andmed lĂ€hedale. Selle lĂ€henemisviisi kasutamine vĂ”imaldab meil kombineerida mitmeid ĂŒksikpĂ€ringuid minimaalsete hulgitöötluste hulka.
Kompaktimine ja allasampeldamine
PĂ€rast seda, kui uus ajaserieandmete plokk on edukalt ĂŒles laaditud objektihoidlasse, kĂ€sitleme seda kui 'ajaloolisi' andmeid, mis saavad kohe Store Gateway'i kaudu kĂ€tte.
Kuid mĂ”ne aja pĂ€rast kogunevad ĂŒhelt allikalt (Prometheus Sidecariga) plokid ja ei kasuta enam kogu indekseerimise potentsiaali. Selle probleemi lahendamiseks tutvustasime veel ĂŒht komponenti nimega Compactor. See rakendab kohaliku Prometheuse kompaktimise mehhanismi ajaloolistele andmetele objektihoidlas ning seda saab kĂ€ivitada lihtsalt perioodilise hulgitöötlusĂŒlesandena.

TĂ”husate kokkusurumiste tĂ”ttu ei tekita pikaajaline pĂ€ring salvestusse andmete suuruse osas probleeme. Siiski toob miljardi vÀÀrtuse dekompressioon ja nende lĂ€bi pĂ€ringutöötleja ajamine paratamatult kaasa pĂ€ringu tĂ€itmise aja jĂ€rsu suurenemise. Teisest kĂŒljest, kuna iga ekraani pikslile on sada andmepunkti, on andmete tĂ€ielikus eraldusvĂ”imes visualiseerimine peaaegu vĂ”imatu. Seega ei ole allasammutus mitte ainult vĂ”imalik, vaid ei too kaasa mĂ€rkimisvÀÀrset tĂ€psuse kadu.

Andmete allasammutamiseks kogub Compactor pidevalt andmeid, mille eraldusvĂ”ime on viis minutit ja ĂŒks tund. Iga toorfragment, mis on kodeeritud kasutades TSDB XOR-kokku tihendamist, sisaldab erinevaid tĂŒĂŒpe kogutud andmeid, nagu min, max vĂ”i sum ĂŒhe ploki kohta. See vĂ”imaldab Querier'il automaatselt valida aggregeeritud vÀÀrtuse, mis sobib antud PromQL pĂ€ringuks.
Andmete kasutamiseks madala tĂ€psusega ei nĂ”ua kasutajalt mingit erilist konfigureerimist. Querier lĂŒlitub automaatselt erinevate resolutsioonide ja töötlemata andmete vahel, kui kasutaja suurendab vĂ”i vĂ€hendab skaalat. Vajadusel saab kasutaja seda otse hallata pĂ€ringus oleva âstepâ parameetri kaudu.
Kuna ĂŒhe GB salvestamise hind on vĂ€ike, siis Thanos salvestab vaikimisi algandmed, viie minuti ja ĂŒhe tunni resolutsiooniga andmed. Algandmete kustutamine ei ole vajalik.
Salvestamise reeglid
Isegi Thanos'e puhul on salvestamise reeglid olulised osad jÀlgimise killust. Need vÀhendavad pÀringute keerukust, latentsust ja kulusid. Need on ka kasutajatele mugavad, et saada kogutud andmeid metrite kohta. Thanos pÔhineb vanilje Prometheuse eksemplaridel, seega on tÀiesti sobiv salvestada salvestamise reegleid ja hÀire reegleid olemasolevas Prometheuse serveris. Siiski vÔib mÔnel juhul sellest olla liiga vÀhe:
- Globaalne hÀire ja reegel (nÀiteks teavitamine, kui teenus ei tööta rohkem kui kahe kolmest klastrist).
- Reegel andmete jaoks, mis asub vÀljaspool lokaalset salvestust.
- Soov hoida kĂ”ik reeglid ja hĂ€ired ĂŒhes kohas.

Kuna Thanos sisaldab eraldi komponenti nimega Ruler, mis arvutab reegleid ja hÀireid Thanos Queries kaudu, on see kÔikidele neile juhtudele ideaalne lahendus. Pakudes hÀsti tuntud StoreAPI-d, saab Query node juurde pÀÀseda vÀrskelt arvutatud mÔÔdikutele. Hiljem salvestatakse need objektide salvestusse ja need on saadaval Store Gateway kaudu.
Thanose jÔud
Thanos on piisavalt paindlik, et seda saaks kohandada vastavalt teie nÔuetele. See on eriti kasulik, kui migreerite lihtsast Prometheusest. Vaatame kiiresti, mida me learnti Thanose komponentide kohta. Siin on, kuidas viia teie tavaline Prometheus piiramatute mÔÔdikute salvestamise maailma:

- Lisage Thanose Sidecar oma Prometheuse serveritele â nĂ€iteks kĂŒlgnev konteiner Kubernetes podis.
- KĂ€ivitage mitu Thanose Querier'i koopiat andmete vaatamiseks. Sellisel etapil on lihtne seadistada gossip Scraperi ja Querier'i vahel. Komponentide vahekorra kontrollimiseks kasutage mÔÔdikut âthanos_cluster_membersâ.
Need only these two steps to ensure a global view and seamless data deduplication from potential HA replicas of Prometheus! Simply connect your dashboards to the HTTP Querier endpoint or use the Thanos UI directly.
However, if you require metrics backup and long-term storage, you'll need to complete three additional steps:
- Create an AWS S3 or GCS bucket. Set up the Sidecar to copy data to these buckets. You can now minimize local data storage.
- Deploy the Store Gateway and connect it to the existing gossip cluster. You can now query the data in backups!
- Deploy the Compactor to improve query efficiency for long time intervals using compaction and downsampling.
If you want to know more, feel free to check out our ja !
In just five steps, we transformed Prometheus into a reliable monitoring system with a global view, unlimited storage time, and potential high availability of metrics.
Pull request: we need you!
alguses oli see avatud lĂ€htekoodiga projekt. Sujuv integratsioon Prometheusega ja vĂ”imalus kasutada ainult osa Thanosest teeb sellest suurepĂ€rase valiku jĂ€lgimissĂŒsteemi skaleerimiseks ilma liigsete pingutusteta.
Meie ootame alati GitHubi Pull Requeste ja Issues. Samuti Ă€rge kartke meie poole pöörduda GitHubi Issues vĂ”i slacki kaudu, kui teil on kĂŒsimusi vĂ”i tagasisidet, vĂ”i soovite jagada oma kogemusi! Kui teile meeldib, mida me Improbables teeme, Ă€rge kartke meiega ĂŒhendust vĂ”tta â !
Allikas: habr.com
