Metrika salvestamine: kuidas me ĂŒritusest Graphite+Whisper ĂŒleminekule Graphite+ClickHouse

Tere, kĂ”igile! Oma eelmisel artiklil olen kirjutanud mikroteenuste arhitektuuri modulaarsĂŒsteemi jĂ€lgimise korraldamisest. Miski ei seisa paigal, meie projekt kasvab pidevalt ning salvestatavate mÔÔdikute arv samuti. Kuidas me korraldasime ĂŒlemineku Graphite+Whisperilt Graphite+ClickHouse'ile kĂ”rgete koormuste tingimustes, ootustest selle suhtes ja migreerimise tulemustest lugege allpool.

Metrika salvestamine: kuidas me ĂŒritusest Graphite+Whisper ĂŒleminekule Graphite+ClickHouse

Enne kui rÀÀgin, kuidas me korraldasime ĂŒlemineku Graphite+Whisperilt Graphite+ClickHouse'ile, tahaksin jagada teavet sellise otsuse vastuvĂ”tmise pĂ”hjuste ja Whisperi puuduste kohta, millega oleme pikka aega elanud.

Graphite+Whisperi probleemid

1. KĂ”rge koormus ketasĂŒsteemile

Kui meile ĂŒle mindi, tuli umbes 1,5 miljonit mÔÔdikut minutis. Sellise mahuga oli serverite ketaste kasutus umbes 30%. Üldiselt oli see tĂ€iesti vastuvĂ”etav — kĂ”ik toimis stabiilselt, kirjutas kiiresti, luges kiiresti... Kuni hetkeni, mil ĂŒks arendusmeeskond kĂ€ivitas uue funktsiooni ja hakkas meile saatma 10 miljonit mÔÔdikut minutis. Siis lĂ€ks ketasĂŒsteem tĂ”eliselt koormusse ja nĂ€gime 100% kasutust. Probleem suudeti kiiresti lahendada, kuid maitse jĂ€i.

2. Replikatsiooni ja jÀrjepidevuse puudumine

TĂ”enĂ€oliselt, nagu kĂ”ik, kes on kasutanud /kasutavad Graphite+Whisper, saatsime me sama mÔÔdikute voolu mitmele Graphite-serverile, et saavutada juurutatud usaldusvÀÀrsus. Sellega ei olnud erilisi probleeme — kuni hetkeni, mil ĂŒks server mingil pĂ”hjusel ei kukkunud. MĂ”nikord suutsime kukkunud serveri piisavalt kiiresti ĂŒles tĂ”sta, ja carbon-c-relay jĂ”udis selle kasti sisestada mÔÔdikud oma vahemĂ€lust, mĂ”nikord aga mitte. Ja siis jĂ€i mÔÔdikutesse auk, mille me tĂ€itsime rsync`i abil. Protseduur oli piisavalt pikk. Aitas ainult see, et selline asi juhtus vĂ€ga harva. Samuti vĂ”tsime aeg-ajalt juhusliku mÔÔdikute komplekti ja vĂ”rdlesime neid teiste samalaadsete andmetega naabernodes klastris. Umbes 5% juhtudest erinevad mĂ”ned vÀÀrtused, mis ei olnud meelepĂ€rane.

3. Suur ruumihulk

Kuna me kirjutame Graphitese mitte ainult infrastruktuuri, vaid ka Ă€rinĂ€itajaid (ja nĂŒĂŒd isegi Kubernetesest tulevaid nĂ€itajaid), siis satume ĂŒsna sageli olukorda, kus nĂ€itajas on ainult mĂ”ned vÀÀrtused, samas kui .wsp-faili luuakse kogu sĂ€ilitamisperioodi arvesse vĂ”ttes ja see vĂ”tab ettenĂ€htud mĂ€lu, mis meile oli umbes 2 MB. Probleemi sĂŒvendab veel see, et selliseid faile tekib aja jooksul vĂ€ga palju ning aruande koostamisel nende ĂŒle kulub arvukate tĂŒhjade punktide lugemisele palju aega ja ressursse.

Tahaks kohe mÀrkida, et eespool kirjeldatud probleemidega saab tÔhusalt vÔidelda erinevate meetoditega, kuid mida rohkem andmeid te hajate, seda teravamaks need probleemid muutuvad.

Kuna meil on kÔik eeltoodud (arvestades eelnevat artikkel), samuti pidev kasv saadud nÀitajate arvu osas ja soov viia kÔik nÀitajad 30-sekundit sÀilitamisintervallile (vajadusel kuni 10 sekundit), otsustasime proovida Graphite+ClickHouse kui perspektiivikat alternatiivi Whisperile.

Graphite+ClickHouse. Ootused

KĂŒlastades mitmeid Yandexi ĂŒritusi ja lugedes mĂ”ningaid artikleid Habrast, lĂ€bivaatamisel dokumentatsiooni ja leidmisel mĂ”istlikke komponente ClickHouse'i Graphite'i sidumiseks, otsustasime tegutsema asuda!

Soovisime saavutada jÀrgmist:

  • vĂ€heneda ketasĂŒsteemi kasutamine 30%-lt 5%-le;
  • vĂ€hendada hĂ”ivatud ruumi 1TB-lt 100GB-le;
  • omada vĂ”imet vastu vĂ”tta 100 miljonit mÔÔtme minutis serverisse;
  • andmete replikatsioon ja tĂ”rke kestvus vĂ€lja pakutud lahenduses;
  • mitte viibida selle projekti juures aastat, vaid teha ĂŒleminek mĂ”istliku aja jooksul;
  • lĂŒlituda ilma seisakuta.

Seda on ĂŒsna ambitsioonikas, eks?

Graphite+ClickHouse. Komponendid

Andmete saamiseks Graphite'i protokolli kaudu ja nende edasiseks salvestamiseks ClickHouse'i, valiti carbon-clickhouse (golang).

Ajavahemike salvestamiseks valiti selle hetke uusim ClickHouse'i stabiilne versioon 1.1.54253. Selle kasutamisel esines probleeme: logides ilmnes palju vigu ja ei olnud pĂ€ris selge, mida nendega teha. Koos Roman Lomonosovi (carbon-clickhouse, graphite-clickhouse ja veel paljude muude autor) valiti vanem versioon 1.1.54236.Vead kadusid — kĂ”ik hakkas tööle suurepĂ€raselt.

Andmete lugemiseks ClickHouse'ist valiti graphite-slickhouse (golang). Graphite'i API-liidese jaoks — carbonapi (golang). Klientide vahelise replikatsiooni korraldamiseks ClickHouse'i tabelite vahel kasutati zookeeper. Meie vĂ€ga armastatud jaoks metrikate suunamiseks jĂ€tsime carbon-c-relay (C) (vt eelmine artikkel).

Graphite+ClickHouse. Tabelite struktuur

“graphite” — andmebaas, mille lĂ”ime jĂ€lgimistabelite jaoks.

“graphite.metrics” — tabel ReplikaadiAsendavaMerePuuna (replicating ReplacingMergeTree). See tabel sisaldab metrikate nimesid ja teede viiteid.

Loo tabel graphite.metrics ( KuupĂ€ev KuupĂ€ev, Tase UInt32, Tee String, Kustutatud UInt8, Versioon UInt32 ) MOOTOR = ReplikaadiAsendavaMerePuuna('/clickhouse/tables/replicator/graphite.metrics', ‘r1’, KuupĂ€ev, (Tase, Tee), 8192, Versioon);

“graphite.data” — tabel ReplikaadiGraafikaMerePuuna (replicating GraphiteMergeTree). See tabel sisaldab metrikate vÀÀrtusi.

Loo tabel graphite.data ( Tee String, VÀÀrtus Float64, Aeg UInt32, KuupÀev KuupÀev, Ajatemperatuur UInt32 ) MOOTOR = ReplikaadiGraafikaMerePuuna('/clickhouse/tables/replicator/graphite.data', 'r1', KuupÀev, (Tee, Aeg), 8192, 'graphite_rollup')

“graphite.date_metrics” — tingimuse alusel tĂ€idetav tabel, ReplikaadiAsendavaMerePuuna mootoriga. Selles tabelis salvestatakse kĂ”ikide metrikate nimed, mis on pĂ€eva jooksul esinenud. Loomise pĂ”hjused on kirjeldatud jaotises „Probleemid“ kĂ€esoleva artikli lĂ”pus.

LOO KERQUJUK 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” — tabel, mis tĂ€idetakse tingimustes, ReplicatedAggregatingMergeTree (replicating) AggregatingMergeTree). Sellesse tabelisse salvestatakse sissetulevate mÔÔdikute arv, eraldiseisvusega kuni 4 taseme sĂŒgavusest.

LOO KERQUJUK 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

Graphite+ClickHouse. Komponentide koostöö skeem

Metrika salvestamine: kuidas me ĂŒritusest Graphite+Whisper ĂŒleminekule Graphite+ClickHouse

Graphite+ClickHouse. Andmete rÀndamine

Kuna me mĂ€letame, olid oodata, et see projekt peaks toimuma ilma katkestusteta, seega pidime me viima kogu meie seire sĂŒsteemi uude salvestusse nii, et see oleks meie kasutajatele vĂ”imalikult lĂ€bipaistev.
Me tegime seda nii.

  • carbon-c-relay'le on lisatud reegel, et saata tĂ€iendav mÔÔdikute voog carbon-clickhouse'i ĂŒhest serverist, mis osaleb ClickHouse tabelite replikatsioonis.

  • Kirjutasime vĂ€ikese python skripti, mis kasutas whisper-dump teeki, et lugeda meie salvestusest vĂ€lja kĂ”ik .wsp-failid ja saata need andmed ĂŒlalmainitud carbon-clickhouse'i 24 voogus. Saadetud mÔÔdikute vÀÀrtuste arv carbon-clickhouse'is ulatus 125 miljonini minutis, ja ClickHouse ei vĂ€sinud isegi.

  • Loomisime Grafanas eraldi DataSource'i, et testida funktsioone, mida kasutatakse olemasolevates armatuurlaudades. Tuvasime loendi funktsioonidest, mida kasutasime, kuid need ei olnud carbonapi's rakendatud. Kirjutasime need funktsioonid juurde ja saatsime PR'id carbonapi autoritele (teise kordame nendele tĂ€nu).

  • Lugemisekoormuse vahetamiseks muutsime tasakaalustajate seadetes lĂ”pp-punkte graphite-api'lt (Graphite + Whisperi API liides) carbonapi'le.

Graphite + ClickHouse. Tulemused

  • vĂ€hendasime diskisĂŒsteemi kasutust 30%-lt 1%-ni;

    Metrika salvestamine: kuidas me ĂŒritusest Graphite+Whisper ĂŒleminekule Graphite+ClickHouse

  • vĂ€hendasime hĂ”ivatava ruumi 1 TB-lt 300 GB-le;
  • saame vastu vĂ”tta 125 miljonit mÔÔdikut minutis serverisse (tipud migreerimise ajal);
  • oleme kĂ”ik mÔÔdikud viinud kolmekĂŒmne sekundi sĂ€ilitamisintervallile;
  • saime andmete replikatsioon ja tĂ”rkeotsing;
  • lĂŒlitusime suutmata katkestusteta;
  • kulutasime sellele umbkaudu 7 nĂ€dalat.

Graphite+ClickHouse. Probleemid

Meie olukord ei lahenenud ilma tagasilöögita. Siin on, millega me silmitsi seisime pĂ€rast ĂŒleminekut.

  1. ClickHouse ei loe konfigureerimisi alati automaatselt, mĂ”nikord tuleb seda taaskĂ€ivitada. NĂ€iteks, kui tegemist on zookeeperi klastriga ClickHouse'i konfiguratsioonis — see ei rakendunud enne clickhouse-serveri taaskĂ€ivitamist.
  2. Suurte ClickHouse pĂ€ringute kaudu ei saadud lĂ€bi, seega nĂ€eb meie graphite-clickhouse ĂŒhenduse string ClickHouse'iga vĂ€lja niimoodi:
    url = "http://localhost:8123/?max_query_size=268435456&max_ast_elements=1000000"
  3. ClickHouse'is ilmub ĂŒsna tihti uusi stabiilsete versioonide vĂ€ljaandeid, milles vĂ”ivad olla ĂŒllatused: ole ettevaatlik.
  4. DĂŒnaamiliselt loodud konteinerid Kuberneteses saadavad suures koguses mÔÔdikute andmeid lĂŒhikese ja juhusliku elueaga. Selliseid mÔÔdikute punkte on vĂ€he ja ruumi probleemidega ei ole. Kuid ClickHouse'i pĂ€ringute koostamisel tĂ”stab see tohutult palju neid mÔÔdikute andmeid tabelist 'metrics'. 90% juhtudel puuduvad nende andmed antud ajavahemikus (24 tundi). Aeg, mis kulub nende andmete leidmiseks tabelist 'data', on samuti tĂ€helepanuvÀÀrne ja lĂ”ppkokkuvĂ”ttes ulatub see ajapiirangute tĂ”ttu ajaĂŒlevaatusse. Selle probleemi lahendamiseks hakkasime pidama eraldi vaadet mÔÔdikute kohta, mis leiti ĂŒhe pĂ€eva jooksul. SeetĂ”ttu kĂŒsitleme aruandeid (grafikuid) koostades dĂŒnaamiliselt loodud konteinerite kohta ainult neid mÔÔdikuid, mis leiti mÀÀratud ajavahemiku jooksul, mitte kogu ajaloos, mis kiirendas nende aruannete koostamist mĂ€rkimisvÀÀrselt. Ülaltoodud lahenduse jaoks on koostatud graphite-clickhouse (fork), sealhulgas rakenduse rakendamine tabeliga date_metrics.

Graphite+ClickHouse. Silte

Versioonist 1.1.0 hakkas Graphite ametlikult toetama silte. Ja me mÔtleme aktiivselt, mida ja kuidas tuleks teha, et toetada seda algatust graphite+clickhouse virnas.

Graphite+ClickHouse. Anomaaliate avastamise sĂŒsteem

Ülaltoodud infrastruktuuri pĂ”hjal oleme loonud anomaaliate avastamise prototĂŒĂŒbi, ja see töötab! Kuid sellest rÀÀgime jĂ€rgmises artiklis.

Tellige, vajutage ĂŒlespoole noolt ja olge Ă”nnelikud!

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster