Hilberîna metrîkan: me çawa ji Graphite+Whisper veguherî Graphite+ClickHouse

Silav hemû! Di wî de gotara dawî Min li ser organîzekirina pergalek çavdêriya modular a ji bo mîmariya mîkroxizmetê nivîsî. Tiştek raweste, projeya me bi domdarî mezin dibe, û her weha hejmara metrîkên hilanîn jî. Me çawa di bin şert û mercên bargiraniyê de derbasbûna ji Graphite+Whisper ber Graphite+ClickHouse organîze kir, li ser hêviyên ji wê û encamên koçberiya di bin qutbûnê de bixwînin.

Hilberîna metrîkan: me çawa ji Graphite+Whisper veguherî Graphite+ClickHouse

Berî ku ez ji we re vebêjim ka me çawa derbasbûna ji hilanîna metrîkên li Graphite+Whisper berbi Graphite+ClickHouse organîze kir, ez dixwazim di derheqê sedemên girtina biryarek weha de û derheqê dezawantajên Whisper-ê ku em demek dirêj pê re dijîn agahdarî bidim.

Pirsgirêkên Graphite + Whisper

1. Barkirina bilind li ser bine pergala dîskê

Di dema veguheztinê de, bi qasî 1.5 mîlyon metrîk di her deqê de digihîjin me. Bi herikînek wusa, karanîna dîskê li ser serveran %30 bû. Bi gelemperî, ev yek pir meqbûl bû - her tişt bi îstîqrar dixebitî, zû dihat nivîsandin, zû dihat xwendin... Heya ku yek ji tîmên pêşkeftinê taybetmendiyek nû derxist û dest bi şandina 10 mîlyon metrîka ji me re kir. Wê gavê binepergala dîskê hişk bû, û me 100% karanîna dît. Pirsgirêk zû hate çareser kirin, lê bermayek ma.

2. Kêmbûna dubarekirin û hevgirtinê

Bi îhtimaleke mezin, mîna her kesê ku Graphite+Whisper bikar tîne/bi kar tîne, me heman tîrêjê metrîkan bi yekcarî daxist ser çend serverên Graphite da ku em tolerasyona xeletiyê biafirînin. Û di vê yekê de pirsgirêkên taybetî tune bûn - heya wê gavê ku yek ji serveran ji ber hin sedeman têk çû. Carinan me karî serverek têkçûyî bi têra xwe zû hilbigirin, û carbon-c-relay karî metrîkan ji cacheya xwe bar bike, lê carinan na. Û paşê di metrîkan de qulek hebû, ku me bi rsync tije kir. Pêvajo pir dirêj bû. Tenê xêra rizgariyê ev bû ku ev pir kêm diqewime. Di heman demê de me bi awayekî periyodîk komek metrîkên bêserûber girt û wan bi yên din ên heman rengî re li ser girêkên cîran ên komê berhev kir. Nêzîkî 5% bûyeran de, çend nirx ji hev cûda bûn, ku em ji wan ne pir kêfxweş bûn.

3. Şopa mezin

Ji ber ku em di Graphite de ne tenê binesaziyê, lê di heman demê de metrîkên karsaziyê jî dinivîsin (û naha jî metrîkên ji Kubernetes jî), em pir caran rewşek distînin ku tê de metrik tenê çend nirxan dihewîne, û pelê .wsp li gorî hemî ragirtinê tê afirandin. serdemê, û cîhek ji berê ve hatî veqetandin digire, ku ji bo me ~2MB bû. Pirsgirêk ji ber vê yekê ku gelek pelên wekhev bi demê re xuya dibin, û dema ku li ser wan rapor têne çêkirin, xwendina xalên vala gelek dem û çavkaniyan digire.

Ez dixwazim tavilê bibêjim ku pirsgirêkên ku li jor hatine destnîşan kirin dikarin bi karanîna awayên cûrbecûr û bi dereceyên cûda yên bandorker re bêne çareser kirin, lê her ku hûn bêtir dane dest bi wergirtinê bikin, ew qas xirabtir dibin.

Hemî yên jorîn hene (li ber çavê berê gotar), û her weha zêdebûna domdar a hejmara metrîkên wergirtî, xwestina veguheztina hemî metrîkan di navberek hilanînê ya 30 çirkeyan de. (heke hewce bike heya 10 çirke), me biryar da ku em Graphite+ClickHouse wekî alternatîfek sozdar a Whisper biceribînin.

Grafît+ClickHouse. Hêviyên

Min serdana çend hevdîtinên xortên ji Yandex kir, xwend çend gotar li ser Habré, piştî ku di nav belgeyan re derbas bûn û ji bo girêdana ClickHouse di bin Graphite de hêmanên saxlem dîtin, me biryar da ku em tevbigerin!

Ez dixwazim tiştên jêrîn bistînim:

  • karanîna binepergala dîskê ji 30% ber 5% kêm bike;
  • mîqdara cîhê dagirkirî ji 1TB berbi 100GB kêm bike;
  • karibe 100 mîlyon metrîkên di hûrdemê de bigihîne serverê;
  • dubarekirina daneyan û tolerasyona xeletiyê ji qutiyê;
  • salekê li ser vê projeyê rûneniştin û di çarçoveyek maqûl de derbasbûnê bikin;
  • guheztin bê dem.

Pir ambicioz, rast?

Grafît+ClickHouse. Components

Ji bo wergirtina daneyan bi protokola Graphite û dûv re wê li ClickHouse tomar bike, min hilbijart carbon-clickhouse (golang).

Daxuyaniya herî dawî ya ClickHouse, guhertoya stabîl 1.1.54253, wekî databasa hilanîna rêzikên demê hate hilbijartin. Dema ku bi wê re xebitîn pirsgirêk hebûn: Çiyayek ji xeletiyan ket nav têketin, û bi tevahî ne diyar bû ku meriv bi wan re çi bike. Di gotûbêjê de bi Roman Lomonosov (nivîskarê carbon-clickhouse, graphite-clickhouse û gelek, gelekên din) yê kevin hat hilbijartin berdan 1.1.54236. Çewtî winda bûn - her tiştî bi dengek dest pê kir.

Ji bo xwendina daneyan ji ClickHouse ve hatî hilbijartin graphite-сlickhouse (golang). Wek API ji bo Graphite - carbonapi (golang). ClickHouse ji bo organîzekirina dubarekirinê di navbera tabloyan de hate bikar anîn zookparêz. Ji bo metrîkên rêvekirinê, me hezkiriya xwe hişt karbon-c-relay (C) (li gotara berê binêre).

Grafît+ClickHouse. Struktura sifrê

"graphite" databasek e ku me ji bo tabloyên çavdêriyê çêkiriye.

"graphite.metrics" - tabloya bi motora ReplicatedReplacingMergeTree (tewandin Li şûna MergeTree). Ev tablo navên metrîkan û rêyên wan diparêze.

CREATE TABLE graphite.metrics ( Date Date, Level UInt32, Path String, Deleted UInt8, Version UInt32 ) ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/replicator/graphite.metrics', ‘r1’, Date, (Level, Path), 8192, Version);

"graphite.data" - tabloya bi motora ReplicatedGraphiteMergeTree (berbiçavkirî GraphiteMergeTree). Ev tablo nirxên metrîkê hilîne.

CREATE TABLE graphite.data ( Path String, Value Float64, Time UInt32, Date Date, Timestamp UInt32 ) ENGINE = ReplicatedGraphiteMergeTree('/clickhouse/tables/replicator/graphite.data', 'r1', Date, (Path, Time), 8192, 'graphite_rollup')

"graphite.date_metrics" bi motora ReplicateReplacingMergeTree tabloyek bi şert dagirtî ye. Ev tablo navên hemû metrîkên ku di nava rojê de hatine dîtin tomar dike. Sedemên afirandina wê di beşê de têne diyar kirin "Pirsgirêk" di dawiya vê gotarê de.

CREATE MATERIALIZED VIEW graphite.date_metrics ( Path String,  Level UInt32,  Date Date) ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/replicator/graphite.date_metrics', 'r1', Date, (Level, Path, Date), 8192) AS SELECT toUInt32(length(splitByChar('.', Path))) AS Level, Date, Path FROM graphite.data

"graphite.data_stat" - tabloyek ku li gorî şertê tije ye, bi motora ReplicatedAggregatingMergeTree (berbiçavkirî AggregatingMergeTree). Ev tablo hejmara metrîkên hatinê tomar dike, ku di 4 astên hêlînê de têne dabeş kirin.

CREATE MATERIALIZED VIEW graphite.data_stat ( Date Date,  Prefix String,  Timestamp UInt32,  Count AggregateFunction(count)) ENGINE = ReplicatedAggregatingMergeTree('/clickhouse/tables/replicator/graphite.data_stat', 'r1', Date, (Timestamp, Prefix), 8192) AS SELECT toStartOfMonth(now()) AS Date, replaceRegexpOne(Path, '^([^.]+.[^.]+.[^.]+).*$', '1') AS Prefix, toUInt32(toStartOfMinute(toDateTime(Timestamp))) AS Timestamp, countState() AS Count FROM graphite.data  GROUP BY Timestamp, Prefix

Grafît+ClickHouse. Diagrama danûstendina pêkhateyan

Hilberîna metrîkan: me çawa ji Graphite+Whisper veguherî Graphite+ClickHouse

Grafît+ClickHouse. Koçkirina daneyan

Wekî ku em ji hêviyên ji vê projeyê bi bîr tînin, divê derbasbûna li ClickHouse li gorî vê yekê bêyî dakêşan be, me neçar ma ku bi rengekî ji bo bikarhênerên xwe tevahî pergala xweya çavdêriyê biguhezînin hilanîna nû;
Me ev çawa kir.

  • Rêgezek li carbon-c-relay hate zêdekirin da ku pêvekek metrîkan bişîne karbon-clickhouse ya yek ji serverên ku beşdarî dubarekirina tabloyên ClickHouse dibin.

  • Me di python de skrîptek piçûk nivîsand, ku bi karanîna pirtûkxaneya whisper-dump, hemî pelên .wsp ji depoya me dixwend û ev data di 24 mijaran de ji karbon-clickhouse-a jorîn re şand. Hejmara nirxên metrîk ên pejirandî yên di karbon-clickhouse de gihîşt 125 mîlyon / hûrdem, û ClickHouse jî xwe neşikand.

  • Me di Grafana de DataSourceyek veqetandî çêkir da ku fonksiyonên ku di dashboardên heyî de têne bikar anîn xelet bike. Me navnîşek fonksiyonên ku me bikar anîn nas kir, lê ew di carbonapi de nehatin bicîh kirin. Me van fonksiyonan zêde kir û PR ji nivîskarên carbonapi re şand (spasên taybetî ji wan re).

  • Ji bo guheztina barkirina xwendinê di mîhengên balanserê de, me xalên dawî ji grafît-api (navbera API-ê ji bo Graphite + Whisper) ji bo carbonapi guhertin.

Grafît+ClickHouse. results

  • karanîna binepergala dîskê ji 30% ber 1% kêm kir;

    Hilberîna metrîkan: me çawa ji Graphite+Whisper veguherî Graphite+ClickHouse

  • mîqdara cîhê dagirkirî ji 1 TB daxist 300 GB;
  • îmkana me heye ku em her hûrdem 125 mîlyon metrîk di serverê de bistînin (pişk di dema koçberiyê de);
  • hemî metrîkan veguheztin navberek hilanînê ya sî-duyemîn;
  • dubarekirina daneyan û tolerasyona xeletiyê wergirt;
  • bêyî demdirêjê veguherandin;
  • Nêzîkî 7 hefte girt ku her tişt temam bibe.

Grafît+ClickHouse. Problems

Di rewşa me de hin kêmasî hebûn. Ya ku em piştî veguheztinê pê re rû bi rû man ev e.

  1. ClickHouse her gav konfigurasyonan ji nû ve dixwîne carinan hewce dike ku ji nû ve were destpêkirin. Mînakî, di mijara danasîna koma zookeeper-ê de di veavakirina ClickHouse de, heya ku server-klîkhouse ji nû ve nehat destpêkirin ew nehat bikar anîn.
  2. Daxwazên mezin ên ClickHouse derbas nebûn, ji ber vê yekê di grafît-clickhouse de rêzika pêwendiya meya ClickHouse wiha xuya dike:
    url = "http://localhost:8123/?max_query_size=268435456&max_ast_elements=1000000"
  3. ClickHouse pir caran guhertoyên nû yên serbestberdana bi îstîqrar derdixe, dibe ku ew surprîz hebin: hay ji xwe hebin.
  4. Di kubernetes de konteynerên dînamîkî hatine afirandin hejmareke mezin ji metrîkan bi jiyanek kurt û rasthatî dişînin. Ji bo metrîkên weha pir xal tune, û di cîhê de pirsgirêk tune. Lê dema çêkirina pirsan, ClickHouse hejmareke mezin ji van heman metrikan ji tabloya 'metrîkan' hildibijêre. Di 90% bûyeran de, li ser wan ji pencereyê (24 saetan) tu dane tune. Lê dem ji bo lêgerîna van daneyan di tabloya 'dane' de derbas dibe, û di dawiyê de di nav deman de derbas dibe. Ji bo ku em vê pirsgirêkê çareser bikin, me bi agahdariya li ser metrîkên ku di nav rojê de pê re rû bi rû bûn, dest bi dîtinek cûda kir. Bi vî rengî, dema ku raporên (grafîkan) ji bo konteynerên dînamîkî hatine afirandin çêdikin, em tenê li wan metrîkên ku di pencereyek diyarkirî de hatine rûbirû dipirsin, û ne ji bo tevahiya demê, ku bi girîngî çêkirina raporên li ser wan bileztir dike. Ji bo çareseriya ku li jor hatî diyar kirin, min berhev kir grafît-clickhouse (fork), ku pêkanîna xebata bi tabloya date_metrics re dihewîne.

Grafît+ClickHouse. Tags

Bi guhertoya 1.1.0 Graphite fermî bû tagên piştgiriyê. Û em bi aktîvî li ser çi û çawa bikin ku piştgirî bidin vê destpêşxeriyê di stacka grafît+clickhouse de difikirin.

Grafît+ClickHouse. Detektora anomalî

Li ser bingeha binesaziya ku li jor hatî destnîşan kirin, me prototîpek detektorek anomalî bicîh kiriye, û ew dixebite! Lê di gotara din de bêtir li ser wî.

Aboneyê bibin, tîra jor bikirtînin û kêfxweş bibin!

Source: www.habr.com

Ji bo malperên bi parastina DDoS, serverên VPS VDS mêvandariya pêbawer bikirin 🔥 Hostinga malperê ya pêbawer bi parastina DDoS, serverên VPS VDS bikirin | ProHoster