Bok svima. Ispod je transkript .
– sustav za nadzor različitih sustava i servisa, uz pomoć kojeg administratori sustava mogu prikupljati podatke o trenutnim parametrima sustava i postaviti upozorenja za primanje obavijesti o odstupanjima u radu sustava.
Izvješće će sadržavati usporedbu и — projekti dugoročne pohrane Prometejeve metrike.



Prvo ću vam reći nešto o Prometeju. Ovo je sustav nadzora koji prikuplja metrike iz određenih ciljeva i sprema ih u lokalnu pohranu. Prometheus može bilježiti metriku u udaljenu pohranu i može generirati upozorenja i pravila snimanja.

Ograničenja Prometheusa:
- Nema prikaz globalnog upita. Ovo je kada imate više neovisnih primjeraka prometheusa. Oni prikupljaju metriku. I želite postaviti upit povrh svih ovih metrika prikupljenih iz različitih prometheus instanci. Prometej to ne dopušta.
- Uz prometheus, performanse su ograničene na samo jedan poslužitelj. Prometheus se ne skalira automatski na više poslužitelja. Možete samo ručno podijeliti svoje mete između više Prometheusa.
- Opseg metrike u Prometheusu ograničen je na samo jedan poslužitelj iz istog razloga jer se ne može automatski skalirati na više poslužitelja.
- Nije lako organizirati sigurnost podataka u Prometeju.

Rješenja za ove probleme/izazove?
Rješenja su:
Sva ova rješenja služe za udaljenu pohranu podataka koje prikuplja Prometheus. Problem udaljene pohrane iz prethodnog slajda rješavaju na različite načine. U ovoj prezentaciji govorit ću samo o prva dva rješenja: и .
Po prvi put informacija o pojavio se po . Tamo je opisana arhitektura i kako radi.

Thanos uzima podatke koje je Prometheus spremio na lokalni disk i kopira ih na S3, na ili u skladište drugog objekta.

Tako Thanos pruža globalni prikaz upita. Možete tražiti podatke pohranjene u objektnoj pohrani iz više instanci Prometheusa.

Thanos podržava PromQL i .

Thanos koristi Prometheus kod za pohranu podataka.

Thanos su razvili isti programeri kao i Prometheus.
na , ovdje , gdje smo prvi put razgovarali .

VictoriaMetrics prima podatke od nekoliko prometeja protokol koji podržava Prometheus.

VictoriaMetrics pruža pregled globalnog upita, budući da više instanci Prometheusa može pisati podatke u jedan VictoriaMetrics. Sukladno tome, možete postavljati upite za sve te podatke.

VictoriaMetrics također podržava, poput Thanosa, PromQL i Prometheus querying API.

Za razliku od Thanosa, izvorni kod VictoriaMetrics napisan je od nule i optimiziran za brzinu i potrošnju resursa.

VictoriaMetrics, za razliku od Thanosa, skalira i okomito i vodoravno. Jesti , koji se skalira okomito. Možete početi s jednim procesorom i 1 GB memorije i postupno rasti do stotina procesora i 1 TB memorije. VictoriaMetrics može koristiti sve te resurse. Njegove performanse će se povećati za oko 100 puta u usporedbi sa sustavom s 1 jezgrom.

Povijest Thanosa započela je u studenom 2017., kada se pojavio prvi javni commit. Prije toga, Thanos je razvijen interno .

U lipnju 2019. pojavilo se značajno izdanje 0.5.0, u kojem protokol. Uklonjen je iz Thanosa jer se nije dobro pokazao. Thanos klaster često nije radio ispravno, čvorovi su se na njega pogrešno povezivali zbog protokola ogovaranja. Stoga smo ga odlučili maknuti odatle. Mislim da je ovo ispravna odluka.

U istom lipnju 2019. poslali su prijavu br в .

I nakon par mjeseci Thanos je primljen , koji uključuje Prometheus, Kubernetes i druge popularne projekte.

U siječnju 2018. započeo je razvoj VictoriaMetrics.

U rujnu 2018. sam prvi put javno spomenuo VictoriaMetrics.

U prosincu 2018. objavljena je verzija s jednim čvorom.

U svibnju 2019 izvori verzija s jednim čvorom i klastera.

U lipnju 2019., kao i Thanos, podnijeli smo prijavu zakladi CNCF pod brojem . Prijavili smo se dan prije Thanosa.

Ali, nažalost, tamo još uvijek nismo primljeni. Potrebna pomoć zajednice.

Pogledajmo najvažnije slajdove koji prikazuju arhitekturu Thanosa i VictoriaMetrics.

Počnimo s Thanosom. Žute komponente su Prometejeve komponente. Sve ostalo su komponente Thanosa. Počnimo s najvažnijom komponentom. Thanos Sidecar je komponenta koja se postavlja uz svaki Prometheus. Učitava Prometheus podatke iz lokalne pohrane u S3 ili drugu Object Storage.
Tu je i komponenta pod nazivom Thanos Store Gateway, koja može čitati ove podatke iz Object Storagea na dolazne zahtjeve Thanos Queryja. Thanos Query implementira PromQL i Prometheus API. Odnosno, izvana izgleda kao Prometej. Prima PromQL upite, šalje ih Thanos Store Gatewayu, Thanos Store Gateway dohvaća potrebne podatke iz Object Storagea, šalje ih natrag.
Ali pohranjujemo podatke u Object Storage bez posljednja dva sata zbog značajke implementacije Thanos Sidecar, koja ne može prenijeti posljednja dva sata u Object Storage S3, budući da Prometheus još nije stvorio datoteke za ova dva sata u lokalnoj pohrani.
Kako ste se odlučili zaobići ovo? Thanos Query, osim zahtjeva prema Thanos Store Gatewayu, šalje paralelne zahtjeve svakom Thanos Sidecar-u, koji se nalazi pored Prometheusa.
A Thanos Sidecar, zauzvrat, prosljeđuje zahtjeve dalje Prometeju i dohvaća podatke za zadnja dva sata.
Osim ovih komponenti, postoji i opcijska komponenta bez koje Thanos neće dobro raditi. Ovo je Thanos Compact, koji je odgovoran za spajanje malih datoteka na Object Storageu u veće datoteke koje je ovdje učitao Thanos Sidecars. Thanos Sidecar ondje učitava podatkovne datoteke za dva sata. Ove datoteke, ako nisu spojene u veće datoteke, tada njihov broj može značajno porasti. Što je više takvih datoteka, to je više memorije potrebno za Thanos Store Gateway, to je više resursa potrebno za prijenos podataka preko mreže i metapodataka. Thanos Store Gateway postaje neučinkovit. Stoga je potrebno pokrenuti Thanos Compact, koji spaja male datoteke u veće, kako bi takvih datoteka bilo manje i smanjili opterećenje na Thanos Store Gatewayu.
Postoji i takva komponenta kao Thanos Ruler. Izvršava Prometheus pravila upozorenja i može procijeniti Prometheus pravila snimanja kako bi zapisao podatke natrag u Object Storage. Ali ova komponenta se ne preporučuje za korištenje, jer... On .
Ovo je jednostavna shema Thanosa.

Sada je usporedimo sa shemom VictoriaMetrics.
VictoriaMetrics ima 2 verzije: verziju s jednim čvorom i verziju klastera. Single-node radi na jednom računalu. Pojedinačni čvor nema ove komponente, samo jednu binarnu datoteku. Ova binarna datoteka na slajdu izgleda kao ovaj kvadrat. Sve što je unutar kvadrata sadržaj je binarne datoteke za verziju s jednim čvorom. Ne moraš znati za njega. Samo pokrenete binarnu datoteku i sve radi za nas.
Verzija klastera je kompliciranija. Unutar njega postoje tri različite komponente: vmselect, vminsert i vmstorage. Iz njihova naziva trebalo bi biti jasno što tko od njih radi. Komponenta Insert prihvaća podatke u različitim formatima: od Prometheus API-ja za daljinsko pisanje, Influx line protokola, Graphite protokola i OpenTSDB protokola. Komponenta Insert ih prihvaća, analizira i distribuira između postojećih komponenti za pohranu, gdje su podaci već pohranjeni. Komponenta Select zauzvrat prihvaća PromQL upite. On provodi , kao i Prometheus querying API, a može se koristiti kao zamjena za Prometheus u Grafani ili drugim Prometheus API klijentima. Select prihvaća promql zahtjev, analizira ga, čita potrebne podatke za izvršavanje ovog zahtjeva iz čvorova za pohranu, obrađuje te podatke i vraća odgovor.

Usporedimo složenost instaliranja Thanosa i VictoriaMetrics.

Počnimo s Thanosom. Prije nego što počnete raditi s Thanosom, trebate stvoriti kantu u Object Storageu, kao što je S3 ili GCS, tako da Thanos Sidecar može pisati podatke u nju.

Zatim za svaki Prometheus morate instalirati Thanos Sidecar. Prije toga morate zapamtiti onemogućiti sažimanje podataka u Prometheusu. Sažimanje podataka povremeno sažima podatke u lokalnoj Prometheus pohrani kako bi se smanjila potrošnja resursa.
Kada instalirate Thanos Sidecar na svoj Prometheus, morate onemogućiti ovo sažimanje podataka jer Thanos Sidecar ne radi ispravno s uključenim sažimanjem podataka. To znači da vaš Prometheus počinje spremati podatke u dvosatnim blokovima i prestaje spajati te blokove u veće. Sukladno tome, ako postavljate upite koji premašuju trajanje posljednja dva sata, oni neće raditi tako učinkovito kao što bi mogli raditi da je sažimanje podataka omogućeno.

Stoga Thanos preporučuje smanjenje vremena zadržavanja podataka u lokalnoj pohrani na 6-8 sati kako bi se smanjilo opterećenje velikog broja malih blokova.
Nakon što instalirate Thanos Sidecar, morate instalirati dvije komponente za svaku Object Storage Bucket. To su Thanos Compactor i Thanos Store Gateway.

Nakon toga morate instalirati Thanos Query i konfigurirati ga tako da se može povezati sa svim Thanos Store Gatewayima koje imate, kao i sa svim Thanos Sidecars.
Ovdje može postojati mali problem.

Morate konfigurirati pouzdanu i sigurnu vezu Thanos Queryja s ovim komponentama. A ako se vaš Prometheus nalazi u različitim podatkovnim centrima ili u različitim VPC-ovima, tada su veze s njima izvana zabranjene. Ali da bi Thanos Query radio, tamo morate nekako konfigurirati vezu i morate smisliti način.
Ako imate mnogo takvih podatkovnih centara, tada se, sukladno tome, smanjuje pouzdanost cijelog sustava. Budući da Thanos Query mora stalno održavati veze sa svim Thanos Sidecarsima koji se nalaze u različitim podatkovnim centrima. Za svaki dolazni zahtjev, usmjerit će zahtjeve na sve Thanos Sidecars. Ako se veza prekine, primit ćete ili nepotpuni skup podataka ili ćete dobiti odgovor "klaster nije u funkciji".

U VictoriaMetrics sve je malo jednostavnije. Za verziju s jednim čvorom, samo trebate pokrenuti jednu binarnu datoteku i sve radi.

U cluster verziji dovoljno je pokrenuti sve tri gore navedene vrste komponenti u koliko god vam je potrebno ili koristiti za automatizaciju pokretanja komponenti u Kubernetesu. Planiramo napraviti i Kubernetes operator. Helmova karta ne pokriva neke slučajeve i dopušta vam da si pucate u nogu. Na primjer, omogućuje vam smanjenje broja čvorova za pohranu, što će dovesti do gubitka podataka.

Nakon što ste pokrenuli jednu binarnu ili klasteriranu verziju, samo trebate dodati Prometheus u konfiguraciju tako da počinje pisati podatke paralelno u lokalnu i udaljenu pohranu. Kao što vidite, ova bi konfiguracija trebala raditi mnogo pouzdanije u usporedbi s konfiguracijom Thanosa. Ne trebamo održavati vezu između VictoriaMetricsa i svih Prometheusa, jer se Prometheus sam povezuje s VictoriaMetricsom i prenosi podatke.

Razmotrimo podršku Thanosa i VictoriaMetrics.

Thanos mora nadzirati Sidecar kako bi bio siguran da neće prestati učitavati podatke u Object Storage. Oni mogu zaustaviti ovo preuzimanje podataka zbog pogrešaka preuzimanja, na primjer, vaša mrežna veza s Object Storageom je privremeno prekinuta ili je Object Storage privremeno nedostupan. Thanos Sidecar će to primijetiti u ovom trenutku, prijaviti pogrešku, može se srušiti i zatim prestati raditi. Ako ga ne nadzireš, zaustavit ćeš prijenos podataka u Object Storage. Ako vrijeme zadržavanja prođe (preporučuje se 6-8 sati), tada ćete izgubiti podatke koji nisu završili u Object Storageu.

Thanos kompaktori mogu prestati raditi zbog . Kompaktori preuzimaju podatke iz Object Storagea i spajaju ih u veće dijelove podataka. Budući da kompaktori nisu sinkronizirani sa Sidecars, može se dogoditi sljedeće: Sidecar još nije stigao dovršiti blok, Compactor odlučuje da je ovaj blok u potpunosti napisan. Compactor ga počinje čitati. Ne čita blok u cijelosti i prestaje raditi. Pogledaj detalje .

Store Gateway može vratiti nedosljedne podatke zbog utrke između Compactor-a i Sidecars-a. Ista stvar se događa ovdje, jer Store Gateway ni na koji način nije sinkroniziran s Compactors i Sidecars. Sukladno tome, mogu se pojaviti uvjeti utrke kada Store Gateway ne vidi dio podataka ili vidi nepotrebne podatke.

Query komponenta u Thanosu prema zadanim postavkama vraća djelomičan rezultat ako neki Sidecars ili Store Gateways trenutno nisu dostupni. Dobit ćete dio podataka, a nećete ni znati da niste dobili sve podatke. Ovako to funkcionira prema zadanim postavkama. U sličnoj situaciji VictoriaMetrics vraća označene podatke kao djelomične.

Za razliku od Thanosa, VictoriaMetrics rijetko gubi podatke. Čak i ako se prekine veza između Prometheusa i VictoriaMetricsa, to nije problem, jer Prometheus nastavlja bilježiti pristigle nove podatke u Write Ahead Log, čija je veličina 2 sata. Ako obnovite vezu s VictoriaMetrics unutar dva sata, vaši podaci neće biti izgubljeni. Prometej .

Za razliku od Thanosa, koji zapisuje podatke u pohranu objekata tek nakon dva sata, Prometheus automatski replicira podatke pomoću protokola za udaljeno pisanje u udaljenu pohranu, kao što je VictoriaMetrics. Ne bojite se gubitka lokalne pohrane u Prometheusu. Ako je iznenada izgubio lokalnu pohranu, tada ćete u najgorem slučaju izgubiti posljednje sekunde podataka koji nisu imali vremena biti snimljeni u udaljenu pohranu.

Kubernetes automatski upravlja klasterom, za razliku od Thanosa. Teško je smjestiti sve komponente Thanosa u jedan Kubernetes klaster, za razliku od komponenti klastera VictoriaMetrics.

VictoriaMetrics ima vrlo jednostavno ažuriranje na novu verziju. Samo zaustavite VictoriaMetrics, ažurirajte binarne datoteke i pokrenite ga. Kada se zaustave putem signala SIGINT, sve binarne datoteke VictoriaMetrics izvršavaju elegantno isključivanje. Ispravno spremaju potrebne podatke, ispravno zatvaraju dolazne veze kako ne bi ništa izgubili. Tako da nećete ništa izgubiti prilikom nadogradnje.

VictoriaMetrics olakšava proširenje klastera. Samo dodajte potrebne komponente i nastavite s radom.

O zamkama u Thanosu i VictoriaMetricsu.

Thanos ima sljedeće zamke. Prometheus mora pohraniti podatke za zadnja dva sata. Ako se izgube, izgubit ćete ih u potpunosti jer još nisu zapisani u Object Storage kao S3.

Komponenta Store Gateway i komponenta sažimanja mogu zahtijevati puno memorije za rad s velikom pohranom objekata ako je tamo pohranjeno mnogo malih datoteka. Što je veći broj i veličina datoteka, potrebno je više Store Gatewaya i compactor RAM-a za pohranjivanje metainformacija. Thanos ima mnogo problema u vezi s tim .

Thanos se reklamira da se neograničeno povećava s količinom Prometheusa koju imate. To zapravo nije istina. Budući da svi zahtjevi prolaze kroz Query komponentu, koja mora istovremeno ispitati sve komponente Store Gatewaya i sve Sidecar komponente, povući podatke od tamo i zatim ih prethodno obraditi. Očito je brzina zahtjeva ograničena najsporijom slabom vezom, najsporijim pristupnikom trgovine ili najsporijim Sidecar-om.
Ove komponente mogu biti neravnomjerno opterećene. Na primjer, imate Prometheus, koji prikuplja milijune metrika u sekundi. A tu je i Prometheus, koji prikuplja tisuće metričkih podataka u sekundi. Prometheus, koji prikuplja milijune metrika u sekundi, mnogo više opterećuje poslužitelj na kojem radi. Sukladno tome, Sidecar tamo radi sporije. I općenito tamo sve radi sporo. A Query komponenta će izvući podatke od tamo vrlo sporo. Sukladno tome, izvedba vašeg cijelog klastera bit će ograničena ovim sporim Sidecar-om.

Prema zadanim postavkama, Thanos daje djelomične podatke ako su neki Sidecars ili Store Gateway nedostupni. Na primjer, ako su vaši Sidecars raštrkani po cijelom svijetu u različitim podatkovnim centrima, tada se vjerojatnost prekida veze i nedostupnosti komponente znatno povećava. Sukladno tome, u većini slučajeva dobit ćete djelomične podatke, a da toga i ne znate.

VictoriaMetrics također ima zamke. Prva zamka je opcija koja ograničava količinu RAM-a koja se koristi za predmemoriju VictoriaMetrics. Prema zadanim postavkama, jednak je 60% RAM-a na računalu na kojem se izvodi VictoriaMetrics ili 60% RAM-a VictoriaMetrics modula u Kubernetesu.
Ako neispravno promijenite ovu vrijednost, možete pokvariti izvedbu VictoriaMetrics. Na primjer, ako postavite prenisku vrijednost, podaci možda više neće stati u predmemoriju VictoriaMetrics. Zbog toga će morati dodatno raditi i opteretiti procesor i disk. Ako ovu opciju učinite prevelikom, povećava se, prvo, vjerojatnost da će se VictoriaMetrics srušiti s pogreškom nedostatka memorije, i, drugo, to će dovesti do činjenice da će u memoriji operativnog sustava ostati vrlo malo RAM-a za predmemorija datoteke. A VictoriaMetrics se za izvedbu oslanja na predmemoriju datoteka. Ako to nije dovoljno, opterećenje na disku može se znatno povećati. Stoga, savjet: nemojte mijenjati parametar osim ako je to apsolutno neophodno.

Druga opcija. Ovo je retentionPeriod - razdoblje koje je prema zadanim postavkama postavljeno na 1 mjesec. Ovo je vrijeme tijekom kojeg VictoriaMetrics pohranjuje podatke. Nakon tog razdoblja VictoriaMetrics briše podatke.
Mnogi ljudi pokreću VictoriaMetrics bez ovog parametra i bilježe podatke mjesec dana. I onda pitaju: zašto su nestali podaci za prethodni mjesec? Budući da je zadano razdoblje zadržavanja 1 mjesec. Stoga morate znati i postaviti ispravan retentionPeriod.

Pogledajmo jedinstvene značajke.

Thanos ima značajku koja se zove downsampling: intervali od 5 minuta i sat vremena, što često . Ako proguglate i pogledate njihov problem na githubu, postoji mnogo problema vezanih uz ovo smanjivanje uzorkovanja, da ponekad ne radi ispravno ili ne radi kako korisnici očekuju.

Thanos ima deduplikaciju podataka za Prometheus HA parove. Kada dva Prometheusa prikupe iste metrike od istih ciljeva i Thanos ih pohranjuje u Object Storage. Thanos može ispravno deduplicirati ove podatke, za razliku od VictoriaMetrics.

Thanos ima komponentu upozorenja koja je bila u shemi Thanosa. Ali njega .

Thanos ima prednost što Thanos i Prometheus dijele isti kod. Thanosa i Prometeja razvijaju isti programeri. Uz poboljšanja Thanosa ili Prometheusa, druga strana pobjeđuje.

Glavna značajka VictoriaMetricsa je MetricsQL. Ovo su VictoriaMetrics ekstenzije za PromQL, o kojima sam govorio na prethodnom velikom susretu za praćenje.

VictoriaMetrics podržava učitavanje podataka pomoću mnogo različitih protokola. VictoriaMetrics ne samo da može prihvatiti podatke iz Prometheusa, već i putem protokola Influx, OpenTSDB i Graphite.

VictoriaMetrics podaci zauzimaju puno manje prostora u usporedbi s Thanosom i Prometheusom.
Ako snimate stvarne podatke, korisnici govore o 2-5 puta smanjenoj veličini podataka na disku u usporedbi s Prometheusom i Thanosom.

Još jedna prednost VictoriaMetrics je da je optimiziran za brzinu.

Pogledajmo cijenu infrastrukture.

Jedna od prednosti Thanosa je što podatke pohranjuje u objektnu pohranu, što je relativno jeftino.
Kada pohranjujete podatke u objektnu pohranu, morate platiti za operacije pisanja i čitanja podataka (10 USD za milijun operacija). Kada zapisujete podatke u objektnu pohranu, plaćate troškove hostinga za prijenos podataka na Internet; ako vaš klaster nije u AWS-u, tamo je besplatan. Kada čitate podatke, plaćate između 10 i 230 USD po 1 TB. Ovo može biti značajno ako često tražite povijesne podatke iz klastera Thanos.

Za Thanos klaster trebate platiti poslužitelje za Compact, Store Gateway, Query komponente koje zahtijevaju puno memorije i CPU za velike količine podataka.

VictoriaMetrics ima sljedeće troškove. Ako pohranjujete podatke na GCE HDD pogone, onda to iznosi 40 USD za 1 TB. Za VictoriaMetrics dovoljni su obični HDD diskovi; nisu potrebni SSD-ovi koji koštaju pet puta više. VictoriaMetrics je optimiziran za HDD.

VictoriaMetrics zahtijeva poslužitelje za komponente: bilo Single-nod ili klasterirane komponente, koje, za razliku od Thanos komponenti, zahtijevaju mnogo manje CPU-a i RAM-a - i prema tome će biti jeftinije.

Primjeri implementacije.

Thanos ima primjer implementacije u Gitlabu. Gitlab u potpunosti radi na Thanosu. Ali tamo nije sve tako glatko. Ako ih pogledate , onda možete vidjeti da stalno imaju neke : Nema dovoljno memorije za Store Gateway ili Query komponente. Stalno moraju povećavati količinu memorije.
Zbog toga se povećavaju troškovi rješavanja ovih problema.
Druga implementacija, koja bi mogla biti uspješnija, je tvrtka Improbable, koja je počela razvijati Thanosa. Objavili su izvorni kod Thanosa. Improbable je tvrtka koja razvija motore za igre.

VictoriaMetrics ima javne primjere implementacije:
- alat za izradu web stranica wix.com
- Adidas implementira VictoriaMetrics i čak je napravio prezentaciju na prošlom PromConu 2019
- TrafficStars - oglasna mreža
- Seznam.cz je popularna češka tražilica.
A tada su postojale tvrtke bez imena koje sada ne mogu imenovati. Nisu pristali.
- Jedan veliki programer igara. Veći od nevjerojatnog.
- Glavni programer grafičkog softvera.
- Velika ruska banka.
- Europski proizvođač vjetroturbina koji je uspješno testirao VictoriaMetrics. Ovaj proizvođač implementira VictoriaMetrics za praćenje podataka prikupljenih iz vjetroturbina brzinom od 50 uzoraka u sekundi po senzoru. Svaka vjetroturbina ima nekoliko stotina senzora. Imaju nekoliko stotina vjetroturbina.
- Ruske zrakoplovne tvrtke koje žele implementirati VictoriaMetrics, ali još uvijek ne mogu. U fazi smo sklapanja ugovora s njima.
Zaključci.
VictoriaMetrics i Thanos rješavaju slične probleme, ali na različite načine:
- Globalni prikaz upita
- horizontalno skaliranje
- proizvoljno zadržavanje

Hvala Vam.
Čekamo vas kod nas .

U anketi mogu sudjelovati samo registrirani korisnici. , molim.
Što koristite kao dugoročnu pohranu za Prometheus?
35,3%Thanos6
0,0%Cortex0
0,0%M3DB0
41,2%VictoriaMetrics7
23,5%ostalo4
Glasovalo je 17 korisnika. Suzdržano je bilo 16 korisnika.
Izvor: www.habr.com
