Mælingageymsla: hvernig við skiptum úr Graphite+Whisper í Graphite+ClickHouse

Hæ allir! Í hans síðasta greinin Ég skrifaði um að skipuleggja mát eftirlitskerfi fyrir örþjónustuarkitektúr. Ekkert stendur í stað, verkefnið okkar stækkar stöðugt og fjöldi geymdra mælikvarða líka. Hvernig við skipulögðum umskiptin frá Graphite+Whisper yfir í Graphite+ClickHouse við mikla álagsaðstæður, lestu um væntingar frá því og niðurstöður flutningsins undir niðurskurðinum.

Mælingageymsla: hvernig við skiptum úr Graphite+Whisper í Graphite+ClickHouse

Áður en ég segi ykkur hvernig við skipulögðum umskiptin frá því að geyma mæligildi í Graphite+Whisper yfir í Graphite+ClickHouse, langar mig að gefa upplýsingar um ástæður þess að taka slíka ákvörðun og um ókosti Whisper sem við bjuggum við lengi.

Grafít+Hvísl vandamál

1. Mikið álag á undirkerfi disksins

Þegar umskiptin urðu voru um það bil 1.5 milljónir mælikvarða að berast okkur á mínútu. Með slíku flæði var diskanýting á netþjónum ~30%. Almennt séð var þetta alveg ásættanlegt - allt virkaði stöðugt, var skrifað hratt, lesið hratt... Þar til eitt af þróunarteyminum setti út nýjan eiginleika og byrjaði að senda okkur 10 milljónir mælikvarða á mínútu. Það var þegar diskur undirkerfið herðist og við sáum 100% nýtingu. Vandamálið var fljótt leyst, en leifar var eftir.

2. Skortur á afritun og samræmi

Líklegast, eins og allir sem nota/notuðu Graphite+Whisper, helltum við sama straumi mælikvarða á nokkra Graphite netþjóna í einu til að skapa bilanaþol. Og það voru engin sérstök vandamál með þetta - þar til augnablikið þegar einn af netþjónunum hrundi af einhverjum ástæðum. Stundum tókst okkur að ná í fallinn netþjón nógu fljótt og carbon-c-relay náði að hlaða mæligildum úr skyndiminni inn í hann, en stundum ekki. Og svo var gat í mælikvarðanum, sem við fylltum með rsync. Málsmeðferðin var frekar löng. Eina frelsið var að þetta gerðist mjög sjaldan. Við tókum líka reglulega af handahófi mæligilda og bárum þær saman við aðrar af sömu gerð á nálægum hnútum klasans. Í um það bil 5% tilvika voru nokkur gildi ólík, sem við vorum ekki mjög ánægð með.

3. Stórt fótspor

Þar sem við skrifum í Graphite ekki aðeins innviði, heldur einnig viðskiptamælingar (og nú líka mælikvarða frá Kubernetes), þá fáum við oft aðstæður þar sem mælikvarðinn inniheldur aðeins nokkur gildi og .wsp skráin er búin til með hliðsjón af allri varðveislu. tímabili, og tekur upp fyrirfram úthlutað pláss, sem fyrir okkur var ~2MB. Vandamálið eykst enn frekar af því að margar svipaðar skrár birtast með tímanum og þegar verið er að byggja skýrslur um þær tekur lestur tómra punkta mikinn tíma og fjármagn.

Ég vil strax taka fram að hægt er að takast á við vandamálin sem lýst er hér að ofan með ýmsum aðferðum og með mismiklum árangri, en því meiri gögn sem þú byrjar að fá, því meira versna þau.

Að hafa allt ofangreint (að teknu tilliti til fyrri Grein), auk stöðugrar aukningar á fjölda móttekinna mælikvarða, löngun til að flytja allar mælingar á 30 sekúndna geymslubil. (allt að 10 sekúndur ef þörf krefur), ákváðum við að prófa Graphite+ClickHouse sem efnilegan valkost við Whisper.

Grafít+ClickHouse. Væntingar

Eftir að hafa heimsótt nokkra fundi strákanna frá Yandex, eftir að hafa lesið nokkrar greinar um Habré, eftir að hafa farið í gegnum skjölin og fundið skynsamlega hluti til að binda ClickHouse undir Grafít, ákváðum við að grípa til aðgerða!

Mig langar að fá eftirfarandi:

  • draga úr nýtingu undirkerfis diska úr 30% í 5%;
  • minnka plássið sem er upptekið úr 1TB í 100GB;
  • geta tekið á móti 100 milljón mæligildum á mínútu inn á netþjóninn;
  • gagnaafritun og bilanaþol úr kassanum;
  • ekki sitja á þessu verkefni í eitt ár og gera umskiptin innan hæfilegs tímaramma;
  • skipta án stöðvunar.

Frekar metnaðarfullt, ekki satt?

Grafít+ClickHouse. Íhlutir

Til að taka á móti gögnum í gegnum Graphite siðareglur og síðan skrá þau í ClickHouse valdi ég kolefnissmellahús (golang).

Nýjasta útgáfan af ClickHouse, stöðugri útgáfu 1.1.54253, var valin gagnagrunnur til að geyma tímaraðir. Það voru vandamál þegar unnið var með það: fjall af villum helltist inn í annálana og það var ekki alveg ljóst hvað ætti að gera við þær. Í umræðu við Roman Lomonosov (höfundur carbon-clickhouse, graphite-clickhouse og margt, margt fleira) sá eldri varð fyrir valinu útgáfu 1.1.54236. Villurnar hurfu - allt fór að virka með látum.

Valið til að lesa gögn frá ClickHouse grafít-slickhouse (golang). Sem API fyrir grafít - carbonapi (golang). ClickHouse var notað til að skipuleggja afritun á milli tafla dýragarður. Fyrir leiðarmælingar yfirgáfum við ástvin okkar kolefni-c-gengi (C) (sjá fyrri grein).

Grafít+ClickHouse. Uppbygging borðs

„grafít“ er gagnagrunnur sem við bjuggum til til að fylgjast með töflum.

„graphite.metrics“ - tafla með ReplicatedReplacingMergeTree vél (afrituð Skiptir um MergeTree). Þessi tafla geymir nöfn mæligilda og slóðir að þeim.

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“ - tafla með ReplicatedGraphiteMergeTree vél (afrituð GraphiteMergeTree). Þessi tafla geymir mæligildi.

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“ er skilyrt útfyllt tafla með ReplicatedReplacingMergeTree vélinni. Þessi tafla skráir nöfn allra mæligilda sem fundust yfir daginn. Ástæðunum fyrir stofnun þess er lýst í kaflanum "Vandamál" í lok þessarar greinar.

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“ - tafla fyllt út í samræmi við ástand, með ReplicatedAggregatingMergeTree vélinni (endurtekið AggregatingMergeTree). Þessi tafla skráir fjölda mæligilda sem koma inn, sundurliðað í 4 hreiðurstig.

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. Samspilsmynd íhluta

Mælingageymsla: hvernig við skiptum úr Graphite+Whisper í Graphite+ClickHouse

Grafít+ClickHouse. Gagnaflutningur

Eins og við munum eftir væntingum frá þessu verkefni ætti umskiptin yfir í ClickHouse að vera án niður í miðbæ; í samræmi við það þurftum við einhvern veginn að skipta öllu eftirlitskerfinu okkar yfir í nýju geymsluna eins gagnsætt og mögulegt er fyrir notendur okkar.
Svona gerðum við þetta.

  • Reglu hefur verið bætt við carbon-c-relay til að senda viðbótarstraum af mæligildum til kolefnissmellahúss eins af netþjónunum sem taka þátt í afritun ClickHouse töflur.

  • Við skrifuðum lítið handrit í python, sem, með því að nota whisper-dump bókasafnið, las allar .wsp skrár úr geymslunni okkar og sendu þessi gögn til ofangreindra kolefnissmella í 24 þræði. Fjöldi samþykktra mæligilda í carbon-clickhouse náði 125 milljónum/mín. og ClickHouse svitnaði ekki einu sinni.

  • Við bjuggum til sérstaka DataSource í Grafana til að kemba aðgerðir sem notaðar eru í núverandi mælaborðum. Við fundum lista yfir aðgerðir sem við notuðum, en þær voru ekki útfærðar í carbonapi. Við bættum þessum aðgerðum við og sendum PR til höfunda carbonapi (sérstaklega þakkir til þeirra).

  • Til að skipta um lestrarálag í jafnvægisstillingunum, breyttum við endapunktum úr grafít-api (API tengi fyrir grafít+hvísl) yfir í karbonapi.

Grafít+ClickHouse. niðurstöður

  • minnkað nýtingu undirkerfis diska úr 30% í 1%;

    Mælingageymsla: hvernig við skiptum úr Graphite+Whisper í Graphite+ClickHouse

  • minnkað plássið sem er upptekið úr 1 TB í 300 GB;
  • við höfum getu til að fá 125 milljónir mælikvarða á mínútu inn á netþjóninn (hámarkar við flutning);
  • flutti allar mælingar á þrjátíu og sekúndna geymslubil;
  • móttekin afritun gagna og bilanaþol;
  • skipt án niður í miðbæ;
  • Það tók um 7 vikur að klára allt.

Grafít+ClickHouse. Vandamál

Í okkar tilviki voru nokkrar gildrur. Þetta er það sem við lentum í eftir umskiptin.

  1. ClickHouse endurlesar ekki alltaf stillingar á flugi; stundum þarf að endurræsa hana. Til dæmis, þegar um er að ræða lýsingu á dýraverndarþyrpingunni í ClickHouse stillingunni, var hann ekki notaður fyrr en clickhouse-þjónninn var endurræstur.
  2. Stórar ClickHouse beiðnir gengu ekki í gegn, þannig að í grafít-smellihúsi lítur ClickHouse tengistrengurinn okkar svona út:
    url = "http://localhost:8123/?max_query_size=268435456&max_ast_elements=1000000"
  3. ClickHouse gefur oft út nýjar útgáfur af stöðugum útgáfum; þær geta innihaldið óvæntar uppákomur: farðu varlega.
  4. Virkilega búnir gámar í kubernetes senda mikinn fjölda mælikvarða með stuttan og tilviljunarkenndan líftíma. Það eru ekki margir punktar fyrir slíka mælikvarða og það eru engin vandamál með pláss. En þegar þú býrð til fyrirspurnir tekur ClickHouse upp gríðarlegan fjölda af þessum sömu mælingum úr „mælingum“ töflunni. Í 90% tilvika eru engin gögn um þau fyrir utan gluggann (24 klst.). En tími fer í að leita að þessum gögnum í „gagna“ töflunni og rennur að lokum út í tímamörk. Til að leysa þetta vandamál fórum við að halda aðskildri sýn með upplýsingum um mælikvarða sem fundust yfir daginn. Þannig, þegar við smíðum skýrslur (grafík) fyrir kraftmikið búna gáma, spyrjum við aðeins um þær mælikvarðar sem fundust innan tiltekins glugga, en ekki allan tímann, sem flýtti verulega fyrir smíði skýrslna um þá. Fyrir lausnina sem lýst er hér að ofan safnaði ég grafít-smellhús (gaffli), sem felur í sér útfærslu á því að vinna með date_metrics töflunni.

Grafít+ClickHouse. Merki

Með útgáfu 1.1.0 varð Graphite opinbert stuðningsmerki. Og við erum virkir að hugsa um hvað og hvernig á að gera til að styðja þetta frumkvæði í grafít+smellihúsastokknum.

Grafít+ClickHouse. Fráviksskynjari

Byggt á innviðunum sem lýst er hér að ofan höfum við innleitt frumgerð af fráviksskynjara og það virkar! En meira um hann í næstu grein.

Gerast áskrifandi, ýttu á upp örina og vertu ánægður!

Heimild: www.habr.com

Bæta við athugasemd