VictoriaMetrics - Prometheuse jaoks parima kaughoidla loomine

Tere kõigile! VictoriaMetricsi asutajad siin:

  • valyala
  • hagen1778
  • tenmozes

Hea meel on VictoriaMetricsis veidi valgust heita.

Natuke ajalugu

Prometheust ja Grafanat hakkasime kasutama kaks aastat tagasi. See oli Zabbixiga võrreldes värske õhu hingetõmme. Nüüd saavad arendajad hajutada oma koodi ümber suvalisi mõõdikuid, ehitada Grafanasse kohandatud armatuurlauad ja jälgida nende rakendusi ilma pühendatud sysadminide / DevOpsita.

Meie Prometheuse eksemplari kraapitud ainulaadsete mõõdikute arv kasvas poole aastaga kiiresti mõnesajalt enam kui 300K-ni. Lülitasime kasvu ajal üle Prometheus 2.0 versioonile, kuna eelnev 2.0 Prometheus muutus meie meetermahtude jaoks liiga aeglaseks. Kuid uuel Prometheusel oli vähe küsimusi:

  • Paar päeva ületava päringuvahemiku puhul ei olnud see nii kiire. Selliseid vahemikke kasutasime pikaajaliste suundumuste ja võimsuse kavandamise armatuurlaudade jaoks.
  • Pärast söötme järkjärgulist suurendamist vaikimisi 15 päevast aastasse hakati sööma palju salvestusruumi.
  • Ebaselge oli, kuidas vältida Prometheuse andmete kadu salvestusõnnetuste korral. Lõpuks tuleb kaks erinevat Prometheuse juhtumit kraapida ühte ja sama sihtmärki (teise nimega HA paar). See kahekordistas meie seirekulud.

Alustasime võimalike lahenduste uurimisega ja avastasime, et Prometheus toetab kaugmäluseadmeid. Kuid kõik olemasolevad lahendused ei olnud erinevatel põhjustel rahuldavad:

  • Keerukas seadistamine ja habras töö.
  • Teatatud krahhidest ja andmete kadumisest.
  • Aeglus.
  • Null või mitteoptimaalne mastaapsus.

Samal ajal kasutasime ClickHouse'i edukalt tohutute sündmustevoogude salvestamiseks ja analüüsimiseks - kuni 300 miljardit sündmust päevas. Meid hämmastas selle MergeTree tabelimootori operatiivne lihtsus, päringu kiirus ja pakkimistase.

Meie kogemus ClickHouse'iga oli nii suurepärane, nii et avame selle jaoks järgmised projektid:

  • clickhouse-grafana - ClickHouse'i Grafana andmeallikas.
  • chproxy - koormuse tasakaalustaja ja vahemällu puhverserver ClickHouse'i jaoks.
  • chclient - kiire GoHouse klient ClickHouse'i jaoks.

Proovisime ClickHouse'i kasutada Prometheuse kaugmälus. Esialgsed tulemused olid suurepärased - ClickHouse suutis skannida ühes serveris miljardeid andmepunkte sekundis. Kahjuks ei suutnud me leida head lahendust Prometheuse etikettide tõhusa indeksi loomiseks.

Siis on tekkinud hull idee - loome oma TSDB järgmiste nõuetega:

  • Prometheuse siltide ehk Metrics 2.0 siltide tõhus register, mis salvestab ja küsib hõlpsalt miljardeid erinevaid silte.
  • Kiire päringute tegemine suurtel kuupäevavahemikel, suur arv kordumatuid mõõdikuid ja tohutu arv andmepunkte.
  • Hea salvestusruumi tihendamine, seega võib piiratud kettaruumi salvestada rohkem andmeid.
  • Lihtne ja kiire varundamine veebis, mis sarnaneb ClickHouse'is olevale VÄLJASTAMISEKS.

Selle TSDB prototüüp oli paljutõotav, nii et ma (valyala) lahkusin oma tööst VertaMedias ja asusin TSDB kallal täiskohaga tööle. Hiljem sai TSDB kena nime - VictoriaMetrics.

Tehnilised detailid

VictoriaMetrics on kirjutatud keeles Go. Go on valitud järgmistel põhjustel:

  • Paljud olemasolevad TSDB lahendused on kirjutatud Go-Prometheus, InfluxDB, Thanos, M3, Cortex jne abil. See vihje Go on TSDB kirjutamiseks üsna hea.
  • Mul on Go-s hea kogemus. Vaadake minu repode kohta GitHubis.
  • Olen fasthttpi autor, seega tean, kuidas Go'is tõhusaid rakendusi kirjutada.

VictoriaMetricsi salvestusruum on nullist üles ehitatud, kasutades Clickhouse'i MergeTree tabelimootori ideid:

  • Salvestage ajakirjade nimesid, ajatempleid ja väärtusi (ehk veergude salvestusruume). See kiirendab päringuid, skannides ainult nõutavad veerud.
  • Salvestage iga veerg andmestruktuuris, mis sarnaneb logi-struktureeritud ühendamise puuga (LSM). See vähendab sorteeritud väärtuste lisamisel / skaneerimisel juhuslikke I / O-sid, võrreldes B-puuga sarnaseid andmestruktuure. See kiirendab HDD-de salvestust. LSM-failid on muutumatud. See lihtsustab kiirete piltide ja varukoopiate tegemist. LSM-il on B-puuga võrreldes puudus - kui väiksemad failid liidetakse suuremateks failideks, kirjutatakse salvestatud andmeid mitu korda. See raiskab ketta ribalaiust, kuid ClickHouse'i praktika näitab, et see on üsna hea kompromiss.
  • Töötlege andmeid tükkidena, mis sobivad CPU vahemälu. See maksimeerib protsessori jõudlust, kuna see ei oota aeglase RAM-i andmeid. Vaadake üksikasju latentsusnumbritest, mida iga programmeerija peaks teadma.

Algselt on Prometheuse siltide register üles ehitatud Go Go taseme pordi ülaossa. Hiljem proovisin selle asendada efektiivsema alternatiiviga - RocksDB. Kuid see ei olnud edukas kõrge cgo üldkulude tõttu, mis tuleb maksta iga skannitud sildi eest. Lõpuks on LevelDB asendatud kohandatud andmestruktuuriga - mergeset. See andmestruktuur on spetsiaalselt optimeeritud Prometheuse siltide indeksi jaoks.

Mergesetil on LevelDB-ga võrreldes järgmised erinevused:

  • See töötab ainult klahvidega. See pole väärtustest teadlik.
  • Sellel on madalam kirjutusvõimsus.
  • See otsib kiiremini paljusid tellitud võtmeid.
  • See tihendab võtmeid paremini, nii et need vajavad vähem salvestusruumi.
  • See pakub kohest andmete ülesvõtteid ja hõlpsaid varukoopiaid.
  • See kasutab ClickHouse'i tabelimootori MergeTree ideid.

Plaanime lähiajal avada lähtekoodiga mergeseti, nii et sellest võivad kasu olla ka teised.

Algselt oli VictoriaMetrics ühe serveriga lahendus. Hiljem on see muudetud koondlahenduseks. Ühtne teenus on ümberkujundamise käigus jagatud kolmeks teenuseks:

  • vmstorage - salvestab vminsertilt saadud mõõdikute väärtused, tagastab vmselectist pärit päringute töötlemata mõõdiku väärtused.
  • vminsert - võtab mõõdikute väärtused vastu Prometheuse remote_write API kaudu ja saadab need vmstorage'i.
  • vmselect - rakendab Prometheuse päringute API-liidese. Toob vmstorageilt töötlemata andmeid.

Jagunemine annab järgmised eelised:

  • Iga teenus võib skaleeruda iseseisvalt.
  • Iga teenus võib toimida riistvara jaoks, mis on teenuse vajaduste jaoks ideaalselt optimeeritud.
  • Rasked lisad ei sega raskeid valijaid.
  • Vminsertis olevad vead ei riku vmselekti ja vastupidi.
  • Parem vmstorage'i vastupidavus, kuna see laadib vmselectis välja keerulise päringuloogika.

Nüüd töötab VictoriaMetrics Google Cloudis. Kasutame ressursside haldamiseks ja kasutuselevõtmiseks juurutushalduri kaudu koodiliseks lähenemisviisiks taristut.

Päringumootor

Esialgu vmselect ette nähtud Prometheuse kauglugemise API. Kuid see ei olnud optimaalne, kuna API eeldas kõigi päringute jaoks kõigi töötlemata andmepunktide ülekandmist Prometheusele. Näiteks kui Prometheus loob vastuse üle 1K mõõdikute ja igaühel 10K andmepunkti, siis peaks vmselect saatma iga päringu korral Prometheusele 1K * 10K = 10M andmepunkti. See on väljumisliikluse ja raha raiskamine. Nii et hiljem on kauglugemise API asendatud päringumootoriga, mis ühildub täielikult PromQL-iga.

Päringumootor toetab lisafunktsioone, mis on suunatud keerukate päringute lihtsustamisele. Allpool on mõned näited:

  • Vormidega, mis sarnanevad tavalistele tabeli avaldistele:
WITH (
      commonFilters = {job = ~ "$ job", instance = ~ "$ instance"}
  ) node_filesystem_size_bytes {commonFilters} / node_filesystem_avail_bytes {commonFilters}

Lisateavet WITH mallide kohta ja mängige nendega WITH mallide mänguväljakul.

  • Paljud kasulikud funktsioonid. Näiteks ametifunktsioon päringutulemuste kombineerimiseks:
liit (
    node_filesystem_size_bytes,
    node_filesystem_avail_bytes,
)

Täiendav lisafunktsioonide loetelu on saadaval siin.

Esituse faktid

  • Esialgsed testid näitavad, et VictoriaMetrics kasutab Prometheuse 2,0–0,4 baiti andmepunkti kohta võrrelduna 10x vähem salvestusruumi, meie puhul 4 baiti andmepunkti kohta. Andmepunkt on (ajatempel, meetrika_väärtus) kordus.
  • Üks vmstorage-teenus võtab 8xCPU serveris vastu kuni 4 miljonit andmepunkti sekundis.
  • Üks vmselect teenus skannib 8xCPU serveris kuni 500 miljonit andmepunkti sekundis.
  • TimeMaari Benchmark Suite'i testandmetel - 250 MB vs 18 GB - kasutab VictoriaMetrics 70 korda korda vähem salvestusruumi, võrreldes TimescaleDB-ga. Testiandmed koosnevad 1B andmepunktist - vt GitHubi TSBS-i kirjeldust.
  • Toimimisruumide parandamiseks on ruumi. Kõik VictoriaMetricsi teenused on varustatud pprof-käitlejaga, nii et oleme valmis häälestama nende jõudlust tootmiskoormusele.

VictoriaMetricsi funktsioonid

  • Toetab täielikku PromQL-i pluss laiendatud PromQL-i koos mallidega. Laiendatud PromQL-i võib proovida Grafana mänguväljakul.
  • Lihtne seadistamine - kopeerige-n-kleepige kaasasolev remote_write URL Prometheuse konfiguratsiooni.
  • Väiksemad tegevuskulud. Prometheuse võib muuta kodakondsuseta teenuseks pärast seda, kui olete lubanud VictoriaMetricsile kaugkirjutamise.
  • Saadaval on lai valik säilitusperioode - 1 kuu kuni 5 aastat.
  • Lisage toimivusskaalad miljonitesse meetrilistesse väärtustesse sekundis.
  • Valige toimivusskaala miljarditele mõõdikute väärtusele sekundis.
  • Salvestusskaalad triljonitesse mõõdikute väärtustesse ja miljonitesse ainulaadsesse mõõdikusse (aka kõrge kardinaalsus).
  • Pakub globaalset päringuvaadet suvalise arvu erinevatel Prometheuse eksemplaridel, kui nad kasutavad sama serveri_kirjutamise URL-i.

Kellele võib VictoriaMetrics kasu olla?

  • Kõik, kes kasutavad Prometheust. Seadke lihtsalt VictoriaMetrics serveri salvestusruumina ja ärge muretsege kohalike salvestusfunktsioonide pärast, nagu varundamine, replikatsioon, mahutavuse planeerimine ja muu hoolduskoormus.
  • Kasutajad, kes kasutavad Prometheust Kuberneteses. Praegu peaksid sellised kasutajad Prometheuse kohaliku salvestuse püsimahtusid hoolikalt haldama. Tavaliselt seadistavad nad Prometheuse riikliku rakendusena, mis võib piirata Kubernetes'i otsuste kavandamist. Kasutage lihtsalt VictoriaMetricksi serveri salvestusruumina ja käivitage kodakondsuseta rakendusena Prometheus.
  • Kasutajad, kellel on palju erinevaid Prometheuse eksemplare, mis asuvad erinevates võrkudes / andmekeskustes. VictoriaMetrics pakub globaalset päringuvaadet kõigil Prometheuse eksemplaridel.

Tuleviku omadused

Plaanime tulevikus rakendada järgmisi funktsioone:

  • Vanade andmete automaatne allaproovide võtmine.
  • Antud sildifiltrite viimased väärtused.
  • Ajas aknad loendurid.

Järeldus

Oleme kindlad, et VictoriaMetricsist saab Prometheuse parim kaughoidla.

Jätkake selle uurimist. Lugege KKK-sid. Registreeri end VictoriaMetricsi mänguväljakul, kasuta seda oma Prometheuse eksemplaride kontrollsalvestusruumina. See on täiesti ohutu, kuna Prometheus jätkab andmete salvestamist kohalikku salvestusruumi koos kaugmäluseadmega, nii et teie kohalikud andmed ei kao kaugsalvestuse lubamisel. Lisateavet leiate peatükist Kiirjuhend.

Redigeerige Grafana mänguväljaku armatuurlaudu ja graafikuid. Sellel mänguväljakul kasutatakse VictoriaMetricsi andmeallikat, osutades VictoriaMetricsi mänguvälja sisemistele mõõdikutele, nii et kõik laiendatud PromQL-i funktsioonid on seal saadaval.

Lavastus VictoriaMetrics on varsti saadaval. Olge kursis ja levitage selle kohta sõna!

Värskendus: ühe serveriga VictoriaMetricsi dokkide pildid on saadaval siit. Kui teile ei meeldi dokker, siis kasutage lihtsalt vastavaid staatilisi kahendkoode.

Värskendus2: lugege meie uut postitust - Ülimalt kardinaalsed TSDB võrdlusalused: VictoriaMetrics vs TimescaleDB vs InfluxDB.

Värskendus3: VictoriaMetrics on nüüd avatud lähtekoodiga!

Liituge meie kogukonnaga Slack ja lugege meie iganädalasi Fauni teemasid ⬇

Kui sellest postitusest oli abi, klõpsake mõne korra all alloleval plaksutusnupul, et näidata oma tuge autorile! ⬇