ProHoster > Blogs > AdministrÄcija > Metrikas glabÄÅ”ana: kÄ mÄs pÄrgÄjÄm no Graphite+Whisper uz Graphite+ClickHouse
Metrikas glabÄÅ”ana: kÄ mÄs pÄrgÄjÄm no Graphite+Whisper uz Graphite+ClickHouse
Sveiki visiem! ViÅa pÄdÄjais raksts Es rakstÄ«ju par modulÄras uzraudzÄ«bas sistÄmas organizÄÅ”anu mikropakalpojumu arhitektÅ«rai. Nekas nestÄv uz vietas, mÅ«su projekts nepÄrtraukti aug, un lÄ«dz ar to arÄ« saglabÄto rÄdÄ«tÄju skaits. KÄ mÄs organizÄjÄm pÄreju no Graphite+Whisper uz Graphite+ClickHouse lielas slodzes apstÄkļos, lasiet par no tÄ izrietoÅ”ajÄm cerÄ«bÄm un migrÄcijas rezultÄtiem zem griezuma.
Pirms pastÄstÄ«Å”u, kÄ mÄs organizÄjÄm pÄreju no metrikas saglabÄÅ”anas Graphite+Whisper uz Graphite+ClickHouse, vÄlos sniegt informÄciju par Å”Äda lÄmuma pieÅemÅ”anas iemesliem un par Whisper trÅ«kumiem, ar kuriem mÄs dzÄ«vojÄm ilgu laiku.
GrafÄ«ta+Äukstu problÄmas
1. Liela diska apakÅ”sistÄmas slodze
PÄrejas brÄ«dÄ« pie mums tika saÅemti aptuveni 1.5 miljoni metrikas minÅ«tÄ. Pie Å”Ädas plÅ«smas diska izmantoÅ”ana serveros bija ~30%. KopumÄ tas bija diezgan pieÅemami - viss darbojÄs stabili, tika Ätri uzrakstÄ«ts, Ätri tika lasÄ«ts... LÄ«dz viena no izstrÄdes komandÄm izlaida jaunu funkciju un sÄka sÅ«tÄ«t mums 10 miljonus metriku minÅ«tÄ. Toreiz diska apakÅ”sistÄma nostiprinÄjÄs, un mÄs redzÄjÄm 100% izmantoÅ”anu. ProblÄma tika Ätri atrisinÄta, bet palika atlikums.
2. ReplikÄcijas un konsekvences trÅ«kums
VisticamÄk, tÄpat kÄ visi, kas izmanto/izmanto Graphite+Whisper, mÄs vienu un to paÅ”u metrikas straumi ielÄjÄm vairÄkos Graphite serveros vienlaikus, lai radÄ«tu kļūdu toleranci. Un ar Å”o nebija Ä«paÅ”u problÄmu - lÄ«dz brÄ«dim, kad kÄds no serveriem nez kÄpÄc avarÄja. Dažreiz mums izdevÄs pietiekami Ätri paÅemt nokrituÅ”u serveri, un carbon-c-relay spÄja ielÄdÄt tajÄ rÄdÄ«tÄjus no keÅ”atmiÅas, bet dažreiz ne. Un tad metrikÄ bija caurums, ko mÄs aizpildÄ«jÄm ar rsync. ProcedÅ«ra bija diezgan ilga. VienÄ«gais glÄbiÅÅ” bija tas, ka tas notika ļoti reti. MÄs arÄ« periodiski paÅÄmÄm nejauÅ”u metrikas kopu un salÄ«dzinÄjÄm tÄs ar citiem tÄda paÅ”a veida blakus esoÅ”ajiem klastera mezgliem. ApmÄram 5% gadÄ«jumu vairÄkas vÄrtÄ«bas bija atŔķirÄ«gas, par ko mÄs nebijÄm Ä«paÅ”i priecÄ«gi.
3. Liels nospiedums
TÄ kÄ Graphite rakstÄm ne tikai infrastruktÅ«ru, bet arÄ« biznesa metriku (un tagad arÄ« Kubernetes metriku), diezgan bieži rodas situÄcija, kad metrikÄ ir tikai dažas vÄrtÄ«bas, un .wsp fails tiek izveidots, Åemot vÄrÄ visu saglabÄÅ”anu. periodÄ, un aizÅem iepriekÅ” atvÄlÄtu vietu, kas mums bija ~2MB. ProblÄmu vÄl vairÄk saasina fakts, ka laika gaitÄ parÄdÄs daudz lÄ«dzÄ«gu failu, un, veidojot par tiem atskaites, tukÅ”o punktu lasÄ«Å”ana aizÅem daudz laika un resursu.
TÅ«lÄ«t gribu atzÄ«mÄt, ka iepriekÅ” aprakstÄ«tÄs problÄmas var risinÄt, izmantojot dažÄdas metodes un ar dažÄdu efektivitÄtes pakÄpi, taÄu, jo vairÄk datu sÄkat saÅemt, jo vairÄk tÄs pasliktinÄs.
Å emot vÄrÄ visu iepriekÅ” minÄto (Åemot vÄrÄ iepriekÅ”Äjo Raksts), kÄ arÄ« pastÄvÄ«gs saÅemto rÄdÄ«tÄju skaita pieaugums, vÄlme visus rÄdÄ«tÄjus pÄrsÅ«tÄ«t uz 30 sekunžu glabÄÅ”anas intervÄlu. (lÄ«dz 10 sekundÄm, ja nepiecieÅ”ams), mÄs nolÄmÄm izmÄÄ£inÄt Graphite+ClickHouse kÄ daudzsoloÅ”u alternatÄ«vu Whisper.
Graphite+ClickHouse. Cerības
ApmeklÄjot vairÄkas Yandex puiÅ”u tikÅ”anÄs, lasÄ«jis pÄris raksti par HabrÄ, izpÄtot dokumentÄciju un atraduÅ”i saprÄtÄ«gas sastÄvdaļas ClickHouse iesieÅ”anai zem Graphite, mÄs nolÄmÄm rÄ«koties!
VÄlos saÅemt sekojoÅ”o:
samazinÄt diska apakÅ”sistÄmas izmantoÅ”anu no 30% lÄ«dz 5%;
samazinÄt aizÅemtÄs vietas daudzumu no 1 TB lÄ«dz 100 GB;
spÄj saÅemt serverÄ« 100 miljonus metrikas minÅ«tÄ;
datu pavairoŔana un kļūdu tolerance no iepakojuma;
nesÄdiet pie Ŕī projekta gadu un veiciet pÄreju saprÄtÄ«gÄ laika posmÄ;
slÄdzis bez dÄ«kstÄves.
Diezgan ambiciozi, vai ne?
Graphite+ClickHouse. SastÄvdaļas
Lai saÅemtu datus, izmantojot protokolu Graphite, un pÄc tam reÄ£istrÄtu tos ClickHouse, es izvÄlÄjos oglekļa-clickhouse (golangs).
Par datu bÄzi laikrindu glabÄÅ”anai tika izvÄlÄta ClickHouse jaunÄkÄ versija, stabilÄ versija 1.1.54253. StrÄdÄjot ar to, radÄs problÄmas: baļķos iegÄzÄs kļūdu kalns, un nebija lÄ«dz galam skaidrs, ko ar tÄm darÄ«t. DiskusijÄ ar RomÄns Lomonosovs (carbon-clickhouse, graphite-clickhouse un daudzu, daudzu citu autors) tika izvÄlÄts vecÄkais izlaidums 1.1.54236. Kļūdas pazuda ā viss sÄka darboties ar lielu triecienu.
āgrafÄ«tsā ir datu bÄze, ko izveidojÄm tabulu uzraudzÄ«bai.
āgraphite.metricsā ā tabula ar ReplicatedReplacingMergeTree dzinÄju (replicÄts AizstÄjot MergeTree). Å ajÄ tabulÄ tiek saglabÄti metrikas nosaukumi un ceļi uz tiem.
āgraphite.dataā ā tabula ar ReplicatedGraphiteMergeTree dzinÄju (replicÄts GraphiteMergeTree). Å ajÄ tabulÄ tiek saglabÄtas metrikas vÄrtÄ«bas.
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ā ir nosacÄ«ti aizpildÄ«ta tabula ar programmu ReplicatedReplacingMergeTree. Å ajÄ tabulÄ ir ierakstÄ«ti visu to metrikas nosaukumi, kas tika konstatÄti dienas laikÄ. TÄs izveides iemesli ir aprakstÄ«ti sadaÄ¼Ä "ProblÄmas" Ŕī raksta beigÄs.
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ā ā tabula, kas aizpildÄ«ta atbilstoÅ”i nosacÄ«jumam ar ReplicatedAggregatingMergeTree dzinÄju (replicÄta AggregatingMergeTree). Å ajÄ tabulÄ ir reÄ£istrÄts ienÄkoÅ”o metrikas skaits, kas sadalÄ«ts 4 ligzdoÅ”anas lÄ«meÅos.
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
KÄ atceramies no Ŕī projekta cerÄ«bÄm, pÄrejai uz ClickHouse ir jÄnotiek bez dÄ«kstÄvÄm, lÄ«dz ar to mums nÄcÄs kaut kÄ pÄrslÄgt visu mÅ«su uzraudzÄ«bas sistÄmu uz jauno krÄtuvi, cik vien iespÄjams pÄrskatÄmÄk mÅ«su lietotÄjiem.
TÄ mÄs to izdarÄ«jÄm.
Carbon-c-relay ir pievienota kÄrtula, lai nosÅ«tÄ«tu papildu metrikas straumi uz vienu no serveriem, kas piedalÄs ClickHouse tabulu replikÄcijÄ.
MÄs uzrakstÄ«jÄm nelielu skriptu programmÄ python, kas, izmantojot whisper-dump bibliotÄku, nolasÄ«ja visus .wsp failus no mÅ«su krÄtuves un nosÅ«tÄ«ja Å”os datus uz iepriekÅ” aprakstÄ«to oglekļa klikŔķu namu 24 pavedienos. PieÅemto metrikas vÄrtÄ«bu skaits oglekļa-clickhouse sasniedza 125 miljonus/min, un ClickHouse pat nesvÄ«da.
Grafana izveidojÄm atseviŔķu datu avotu, lai atkļūdotu esoÅ”ajos informÄcijas paneļos izmantotÄs funkcijas. MÄs identificÄjÄm izmantoto funkciju sarakstu, taÄu tÄs netika ieviestas Carbonapi. MÄs pievienojÄm Ŕīs funkcijas un nosÅ«tÄ«jÄm PR carbonapi autoriem (viÅiem Ä«paÅ”s paldies).
Lai pÄrslÄgtu lasÄ«Å”anas slodzi balansÄtÄja iestatÄ«jumos, mÄs mainÄ«jÄm galapunktus no grafÄ«ta-api (API saskarne Graphite+Whisper) uz carbonapi.
Graphite+ClickHouse. rezultÄtus
samazinÄta diska apakÅ”sistÄmas izmantoÅ”ana no 30% lÄ«dz 1%;
samazinÄts aizÅemtÄs vietas apjoms no 1 TB lÄ«dz 300 GB;
mums ir iespÄja saÅemt serverÄ« 125 miljonus metrikas minÅ«tÄ (migrÄcijas laikÄ maksimums);
pÄrsÅ«tÄ«ja visus rÄdÄ«tÄjus uz trÄ«sdesmit sekunžu uzglabÄÅ”anas intervÄlu;
saÅemto datu replikÄcija un kļūdu tolerance;
pÄrslÄgts bez dÄ«kstÄves;
Lai visu paveiktu, vajadzÄja apmÄram 7 nedÄļas.
Graphite+ClickHouse. ProblÄmas
MÅ«su gadÄ«jumÄ bija dažas nepilnÄ«bas. Ar to mÄs saskÄrÄmies pÄc pÄrejas.
ClickHouse ne vienmÄr pÄrlasa konfigurÄcijas lidojuma laikÄ; dažreiz tas ir jÄpÄrstartÄ. PiemÄram, zookeeper klastera apraksta gadÄ«jumÄ ClickHouse konfigurÄcijÄ tas netika izmantots, lÄ«dz Clickhouse serveris tika pÄrstartÄts.
Lielie ClickHouse pieprasÄ«jumi netika izpildÄ«ti, tÄpÄc mÅ«su ClickHouse savienojuma virkne izskatÄs Å”Ädi:
ClickHouse diezgan bieži izlaiž jaunas stabilu laidienu versijas, tÄs var saturÄt pÄrsteigumus: esiet uzmanÄ«gi.
Dinamiski izveidotie konteineri pakalpojumÄ kubernetes nosÅ«ta lielu skaitu metrikas ar Ä«su un nejauÅ”u kalpoÅ”anas laiku. Å Ädiem rÄdÄ«tÄjiem nav daudz punktu, un nav problÄmu ar vietu. Bet, veidojot vaicÄjumus, ClickHouse no āmetrikuā tabulas iegÅ«st milzÄ«gu skaitu Å”o paÅ”u metrikas. 90% gadÄ«jumu par tiem nav datu Ärpus loga (24 stundas). TaÄu laiks tiek pavadÄ«ts, meklÄjot Å”os datus ādatuā tabulÄ, un galu galÄ iestÄjas taimauts. Lai atrisinÄtu Å”o problÄmu, mÄs sÄkÄm uzturÄt atseviŔķu skatu ar informÄciju par metriku, kas tika konstatÄta dienas laikÄ. TÄdÄjÄdi, veidojot pÄrskatus (grafikus) dinamiski izveidotiem konteineriem, mÄs vaicÄjam tikai tos rÄdÄ«tÄjus, kas tika atrasti konkrÄtajÄ logÄ, nevis visu laiku, kas ievÄrojami paÄtrinÄja pÄrskatu veidoÅ”anu par tiem. IepriekÅ” aprakstÄ«tajam risinÄjumam es savÄcu grafÄ«ta klikŔķa mÄja (dakÅ”a), kas ietver darba ar tabulu date_metrics ievieÅ”anu.
Graphite+ClickHouse. Tagi
Ar versiju 1.1.0 Graphite kļuva oficiÄls atbalsta tagus. Un mÄs aktÄ«vi domÄjam par to, ko un kÄ darÄ«t, lai atbalstÄ«tu Å”o iniciatÄ«vu grafÄ«ts+clickhouse kaudzÄ.
Graphite+ClickHouse. AnomÄliju detektors
Pamatojoties uz iepriekÅ” aprakstÄ«to infrastruktÅ«ru, esam ieviesuÅ”i anomÄliju detektora prototipu, un tas darbojas! Bet vairÄk par viÅu nÄkamajÄ rakstÄ.
AbonÄjiet, nospiediet augÅ”upvÄrsto bultiÅu un esiet laimÄ«gi!