Ruajtja e metrikave: si kaluam nga Graphite+Whisper në Graphite+ClickHouse

Përshëndetje të gjithëve! Në artikullin e kaluar. Kam shkruaja për organizimin e sistemit modular të monitorimit për arkitekturën mikroshërbimore. Asgjë nuk qëndron në vend, projekti ynë po rritet vazhdimisht, dhe numri i metrikeve të ruajtura po rritet po ashtu. Si e organizuam kalimin nga Graphite+Whisper në Graphite+ClickHouse nën ngarkesa të larta, prisnim prej tij dhe rezultatet e migrimit, Lexoni më poshtë.

Ruajtja e metrikave: si kaluam nga Graphite+Whisper në Graphite+ClickHouse

Para se të flas për mënyrën se si organizuam kalimin nga ruajtja e meterikave në Graphite+Whisper në Graphite+ClickHouse, do të doja të jepja informacion mbi arsyet e këtij vendimi dhe mbi disavantazhet e Whisper, me të cilat kemi jetuar për një periudhë të gjatë.

Problemet Graphite+Whisper

1. Ngarkesë e lartë në sistemin disk

NĂ« momentin e kalimit, ne merrnim rreth 1.5 milion metrika nĂ« minutĂ«. Me njĂ« rrjedhĂ« tĂ« tillĂ«, shfrytĂ«zimi i diskut nĂ« serverat ishte rreth ~30%. NĂ« tĂ«rĂ«si kjo ishte mjaft e pranueshme — gjithçka funksiononte stabilisht, shkruhej me shpejtĂ«si, lexoheshin shpejt
 Derisa njĂ« nga ekipet e zhvillimit nxori njĂ« funksion tĂ« ri dhe filloi tĂ« dĂ«rgonte pĂ«rafĂ«rsisht 10 milion metrika nĂ« minutĂ«. AtĂ«herĂ«, sistemi disk u ngjesh dhe pashĂ« 100% shfrytĂ«zim. Problemi u zgjidh shpejt, por mbeti njĂ« ndjesi e kĂ«ndshme.

2. Mungesa e replikimit dhe konsistencës

Sikur ndoshta tĂ« gjithĂ« ata qĂ« pĂ«rdorin / kanĂ« pĂ«rdorur Graphite+Whisper, ne derdhĂ«m njĂ« rrjedhĂ« tĂ« njĂ«jtĂ« metrikash menjĂ«herĂ« nĂ« disa servera Graphite me qĂ«llim tĂ« krijimit tĂ« qĂ«ndrueshmĂ«risĂ«. Kjo nuk kishte pasur ndonjĂ« problem tĂ« madh — deri nĂ« momentin kur njĂ« nga serverat pĂ«r ndonjĂ« arsye ra. NdonjĂ«herĂ« arritnim ta ngjisim serverin e rĂ«nĂ« mjaft shpejt, dhe carbon-c-relay arrinte tĂ« derdhte metrikat nĂ« tĂ« nga cache-i i tij, ndonjĂ«herĂ« jo. Dhe atĂ«herĂ« kĂ«tu kishte njĂ« boshllĂ«k nĂ« metrika qĂ« ne e zgjidhĂ«m me rsync. Procedura ishte mjaft e gjatĂ«. Na shpĂ«tonte vetĂ«m se ndodhte shumĂ« rrallĂ«. Gjithashtu, herĂ« pas here merrnim njĂ« grup tĂ« rastĂ«sishĂ«m metrikash dhe i krahasonim ato me ato nĂ« nodet e tjera tĂ« klasit. Rreth 5% e rasteve disa vlera ndryshonin, gjĂ« qĂ« nuk na kĂ«naqte shumĂ«.

3. Vëllimi i madh i hapësirës së zënë

Duke qenë se ne shkruajmë në Graphite jo vetëm metrika infrastrukturale, por edhe metrika biznesi (dhe tani edhe metrika nga Kubernetes), shpesh hasim situatën në të cilën në metrikë gjenden vetëm disa vlera, ndërlidhja `.wsp` krijohet duke marrë parasysh gjithë periudhën e ruajtjes, dhe zë një hapësirë prej rreth ~2Mb. Problemi përkeqësohet gjithashtu nga fakti se me kalimin e kohës po krijohen shumë të tilla, dhe gjatë ndërtimit të raporteve për to, leximi i pikave bosh merr shumë kohë dhe burime.

Dua të theksoj menjëherë që me problemet e përshkruara më sipër mund të luftohet me metode të ndryshme dhe me nivele të ndryshme efikasiteti, por sa më shumë të dhëna të keni, aq më të forta bëhen ato.

Duke pasur parasysh tĂ« gjitha tĂ« mĂ«sipĂ«rmet (duke marrĂ« parasysh tĂ« kaluarĂ«n, artikullit), si dhe rritjen e vazhdueshme tĂ« metrikave tĂ« marra, dĂ«shira pĂ«r tĂ« kaluar tĂ« gjitha metrikat nĂ« njĂ« interval ruajtjeje prej 30 sekondash (nĂ« rast nevoje — deri nĂ« 10 sekonda), ne vendosĂ«m tĂ« provojmĂ« Graphite+ClickHouse si njĂ« alternativĂ« tĂ« pĂ«rshtatshme pĂ«r Whisper.

Graphite+ClickHouse. Prirjet

Pas pjesëmarrjes në disa takime me djemtë nga Yandex, lexohem disa artikuj në Habr, studimet e dokumentacionit dhe duke gjetur komponente të arsyeshme për lidhjen e ClickHouse me Graphite, ne vendosëm të veprojmë!Dëshironim të arrinim këtë:

të ulja e shfrytëzimit të diskut nga 30% në 5%;

  • tĂ« reduktojmĂ« vĂ«llimin e hapĂ«sirĂ«s sĂ« zĂ«nĂ« nga 1Tb nĂ« 100Gb;
  • tĂ« kemi mundĂ«sinĂ« tĂ« marrim deri nĂ« 100 milion metrika nĂ« minutĂ« nĂ« server;
  • replikimin e tĂ« dhĂ«nave dhe qĂ«ndrueshmĂ«rinĂ« nga kutia;
  • tĂ« mos e kalojmĂ« kĂ«tĂ« projekt pĂ«r njĂ« vit dhe tĂ« bĂ«jmĂ« kalimin nĂ« njĂ« kohĂ« tĂ« arsyeshme;
  • tĂ« kalojmĂ« pa ndonjĂ« downtime.
  • Mjaft ambicioze, apo jo?

Graphite+ClickHouse. Komponentët

Për marrjen e të dhënave përmes protokollit Graphite dhe regjistrimin e tyre në ClickHouse, u zgjodh carbon-clickhouse (golang).

Si bazĂ« tĂ« dhĂ«nash pĂ«r ruajtjen e serive tĂ« kohĂ«s u zgjodh versione mĂ« e fundit stabil e ClickHouse 1.1.54253. GjatĂ« punĂ«s me tĂ« kishim probleme: log tĂ« plota me gabime dhe nuk ishte e qartĂ« se çfarĂ« tĂ« bĂ«jmĂ« me to. NĂ« diskutimin me Roman Lomonosov (autori i carbon-clickhouse, graphite-clickhouse dhe shumĂ« pĂ«rveç kĂ«saj) u zgjodh njĂ« version mĂ« i vjetĂ«r 1.1.54236. Gabimet u zhdukĂ«n — gjithçka filloi tĂ« punonte shkĂ«lqyer. PĂ«r leximin e tĂ« dhĂ«nave nga ClickHouse u zgjodh graphite-slickhouse (golang). Si API pĂ«r Graphite — carbonapi (golang). PĂ«r organizimin e replikimit mes tabelave ClickHouse u pĂ«rdor carbon-c-relay. PĂ«r ruterimin e metrikave ne lanĂ« carbon-c-relay, tĂ« cilin e duam shumĂ« (shihni artikullin e kaluar). Graphite+ClickHouse. Strukturat e tabelave

“graphite” — databaza e krijuar nga ne pĂ«r tabelat e monitorimit. Roman Lomonosov (autori i carbon-clickhouse, graphite-clickhouse dhe shumĂ« e shumĂ« tĂ« tjera) u zgjodh njĂ« version mĂ« i vjetĂ«r 1.1.54236. Gabimet u zhdukĂ«n — gjithçka filloi tĂ« punojĂ« si duhet.

PĂ«r leximin e tĂ« dhĂ«nave nga ClickHouse, u zgjodh graphite-slickhouse (golang). Si njĂ« ndĂ«rfaqe API pĂ«r Graphite — carbonapi (golang). PĂ«r organizimin e replikimit midis tabelave ClickHouse, u pĂ«rdor zookeeper. PĂ«r rutezimin e metrikave, ne lanĂ« tĂ« dashurin tonĂ« carbon-c-relay (C) (shih artikullin e kaluar).

Graphite+ClickHouse. Struktura e tabelave

"graphite" — njĂ« bazĂ« tĂ« dhĂ«nash e krijuar nga ne pĂ«r tabelat e monitorimit.

“graphite.metrics” — tabela me motorin ReplicatedReplacingMergeTree (replicueshĂ«m ReplacingMergeTree). NĂ« kĂ«tĂ« tabelĂ« ruhen emrat e metrikeve dhe rrugĂ«t deri te ato.

KRIJO TABELËN graphite.metrics ( Data Date, Level UInt32, Path String, Deleted UInt8, Version UInt32 ) MOTOR = ReplicatedReplacingMergeTree('/clickhouse/tables/replicator/graphite.metrics', ‘r1’, Date, (Level, Path), 8192, Version);

“graphite.data” — tabela me motorin ReplicatedGraphiteMergeTree (replicueshĂ«m GraphiteMergeTree). NĂ« kĂ«tĂ« tabelĂ« ruhen vlerat e metrikeve.

KRIJO TABELËN graphite.data ( Path String, Value Float64, Time UInt32, Date Date, Timestamp UInt32 ) MOTOR = ReplicatedGraphiteMergeTree('/clickhouse/tables/replicator/graphite.data', 'r1', Date, (Path, Time), 8192, 'graphite_rollup')

“graphite.date_metrics” — tabela qĂ« plotĂ«sohet sipas kushtit, me motorin ReplicatedReplacingMergeTree. NĂ« kĂ«tĂ« tabelĂ« shkruhen emrat e tĂ« gjitha metrikeve qĂ« janĂ« hasur pĂ«r 24 orĂ«. Arsyet e krijimit janĂ« tĂ« pĂ«rshkruara nĂ« seksionin «Problematika» nĂ« fund tĂ« kĂ«tij artikulli.

KRIJO TABELË DHE MATERIALE graphite.date_metrics ( Path String, Level UInt32, Date Date) MOTOR = ReplicatedReplacingMergeTree('/clickhouse/tables/replicator/graphite.date_metrics', 'r1', Date, (Level, Path, Date), 8192) SI SELECT toUInt32(length(splitByChar('.', Path))) AS Level, Date, Path FROM graphite.data

“graphite.data_stat” — tabela qĂ« plotĂ«sohet sipas kushtit, me motorin ReplicatedAggregatingMergeTree (replicueshĂ«m AggregatingMergeTree). NĂ« kĂ«tĂ« tabelĂ« regjistrohet numri i metrikeve hyrĂ«se, me ndarjen deri nĂ« nivelin 4 tĂ« thellĂ«sisĂ«.

KRIJO TABELË DHE MATERIALE graphite.data_stat ( Date Date, Prefix String, Timestamp UInt32, Count AggregateFunction(count)) MOTOR = ReplicatedAggregatingMergeTree('/clickhouse/tables/replicator/graphite.data_stat', 'r1', Date, (Timestamp, Prefix), 8192) SI SELECT toStartOfMonth(now()) AS Date, replaceRegexpOne(Path, '^([^.]+.[^.]+.[^.]+).*$', '1') AS Prefix, toUInt32(toStartOfMinute(toDateTime(Timestamp))) AS Timestamp, countState() AS Count FROM graphite.data  GRUPO NË Timestamp, Prefix

Graphite+ClickHouse. Schemi e bashkëveprimit të komponenteve

Ruajtja e metrikave: si kaluam nga Graphite+Whisper në Graphite+ClickHouse

Graphite+ClickHouse. Migrimi i të dhënave

Siç e kujtojmë nga pritjet për këtë projekt, kalimi në ClickHouse duhet të ndodhte pa ndalime, prandaj, në një farë mënyre, duhej të kalonim të gjithë sistemin tonë të monitorimit në treguesin e ri sa më transparend për përdoruesit tanë.
Këtë e bëmë kështu.

  • NĂ« carbon-c-relay shtuam njĂ« rregull pĂ«r tĂ« dĂ«rguar njĂ« rrjedhĂ« shtesĂ« metrike nĂ« carbon-clickhouse nga njĂ« nga serverĂ«t qĂ« janĂ« tĂ« angazhuar nĂ« replikimin e tabelave ClickHouse.

  • Shkruam njĂ« skenar tĂ« vogĂ«l nĂ« python, i cili me ĐżĐŸĐŒĐŸŃ‰ŃŒŃŽ tĂ« bibliotekĂ«s whisper-dump lexonte tĂ« gjitha .wsp-file nga depozita jonĂ« dhe dĂ«rgonte kĂ«to tĂ« dhĂ«na nĂ« carbon-clickhouse tĂ« pĂ«rshkruar mĂ« sipĂ«r nĂ« 24 rrjedha. Numri i vlerave tĂ« metrikeve tĂ« pranuara nĂ« carbon-clickhouse arrinte 125 mln/min, dhe ClickHouse madje nuk kishte asnjĂ« problem.

  • Krijuam njĂ« DataSource tĂ« veçantĂ« nĂ« Grafana pĂ«r qĂ«llim tĂ« debug-imit tĂ« funksioneve qĂ« pĂ«rdorim nĂ« dashboard-et ekzistuese. Identifikuam njĂ« listĂ« funksionesh qĂ« pĂ«rdorim, por ato nuk ishin realizuar nĂ« carbonapi. Shtuam kĂ«to funksione dhe dĂ«rguam PR-tĂ« autorĂ«ve tĂ« carbonapi (njĂ« falĂ«nderim veçanĂ«risht pĂ«r ta).

  • PĂ«r tĂ« kaluar ngarkesĂ«n lexuese nĂ« cilĂ«simet e balancuesve, ndryshuam endpoint-et nga graphite-api (ndĂ«rfaqja API pĂ«r Graphite+Whisper) nĂ« carbonapi.

Graphite+ClickHouse. Rezultatet

  • ulĂ«m pĂ«rdorimin e sistemit tĂ« disqeve nga 30% nĂ« 1%;

    Ruajtja e metrikave: si kaluam nga Graphite+Whisper në Graphite+ClickHouse

  • ulĂ«m vĂ«llimin e emrit nga 1 TB nĂ« 300 GB;
  • kemi mundĂ«sinĂ« tĂ« pranojmĂ« 125 milion metri nĂ« minutĂ« nĂ« server (piket nĂ« momentin e migrimit);
  • kemi transferuar tĂ« gjitha metrike nĂ« intervalin e ruajtjes prej tridhjetĂ« sekondash;
  • kemi marrĂ« replikimin e tĂ« dhĂ«nave dhe qĂ«ndrueshmĂ«rinĂ« ndaj dĂ«shtimit;
  • kaluam pa ndalime;
  • pĂ«r tĂ« gjithĂ« kemi harxhuar rreth 7 javĂ«.

Graphite+ClickHouse. Problemet

Në rastin tonë nuk kaluam pa pengesa. Ja me çfarë u përballëm pas kalimit.

  1. ClickHouse nuk gjithmonĂ« e rilexon konfigurimin nĂ« kohĂ« reale, ndonjĂ«herĂ« duhet ta ribashkosh. PĂ«r shembull, nĂ« rastin e pĂ«rshkrimit tĂ« klasterit zookeeper nĂ« konfigurimin e ClickHouse — ai nuk u aplikua deri nĂ« ribashkimin e clickhouse-server.
  2. Nuk kalonin kërkesat e mëdha në ClickHouse, prandaj në graphite-clickhouse lidhja me ClickHouse duket kështu:
    url = "http://localhost:8123/?max_query_size=268435456&max_ast_elements=1000000"
  3. Në ClickHouse shpesh dalin versione të reja stabile, në to mund të ketë surpriza: jini të kujdesshëm.
  4. Kontejnerët e krijuar dinamikisht në kubernetes dërgojnë një numër të madh metrikeve me periudha të jetës së shkurtër dhe të rastësishme. Nuk ka shumë pika për këto metrika, dhe problemet me hapësirën nuk ka. Por gjatë ndërtimit të kërkesave ClickHouse ngre një sasi të madhe të këtyre metrikeve nga tabela 'metrics'. Në 90% të rasteve të dhënat për ato mungojnë gjatë periudhës (24 orë). Dhe koha për të kërkuar këto të dhëna në tabelë 'data' harxhohet, dhe në fund përfundojmë në kohën e skadimit. Për të zgjidhur këtë problem, filluam të mbajmë një pamje të veçantë me informacionin për metrike që janë hasur për 24 orë. Kështu, gjatë ndërtimit të raporteve (grafikëve) për konteinerët e krijuar dinamikisht, pyetim vetëm ato metrika që janë hasur brenda dritares së caktuar, e jo për gjithë kohën, çka shumëfish e përshpejton ndërtimin e raporteve për to. Për zgjidhjen e përshkruar më sipër, u ndërtua graphite-clickhouse (fork), duke përfshirë implementimin e punës me tabelën date_metrics.

Graphite+ClickHouse. Etiketat

Nga versioni 1.1.0, Graphite është bërë zyrtarisht të mbështesë etiketat. Ne po mendojmë aktivisht se çfarë dhe si duhet bërë për të mbështetur këtë iniciativë në stekën graphite+clickhouse.

Graphite+ClickHouse. Detektori i anomalive

NĂ« bazĂ« tĂ« infrastrukturĂ«s tĂ« pĂ«rshkruar mĂ« sipĂ«r, ne kemi realizuar njĂ« prototip tĂ« detektorit tĂ« anomalive, dhe ai funksionon! Por pĂ«r tĂ« — nĂ« artikullin e ardhshĂ«m.

Abonohuni, shtypni arrow-up dhe jini të lumtur!

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster