Storio metrigau: sut y gwnaethom newid o Graphite+Whisper i Graphite+ClickHouse

Helo pawb! Yn ei erthygl olaf Ysgrifennais am drefnu system fonitro fodiwlaidd ar gyfer pensaernïaeth microwasanaeth. Nid oes dim yn aros yn ei unfan, mae ein prosiect yn tyfu'n gyson, ac felly hefyd nifer y metrigau sydd wedi'u storio. Sut y gwnaethom drefnu'r trosglwyddiad o Graphite + Whisper i Graphite + ClickHouse o dan amodau llwyth uchel, darllenwch am ddisgwyliadau ohono a chanlyniadau'r mudo o dan y toriad.

Storio metrigau: sut y gwnaethom newid o Graphite+Whisper i Graphite+ClickHouse

Cyn i mi ddweud wrthych sut y gwnaethom drefnu'r trawsnewidiad o storio metrigau yn Graphite+Whisper i Graphite+ClickHouse, hoffwn roi gwybodaeth am y rhesymau dros wneud penderfyniad o'r fath ac am anfanteision Whisper y buom yn byw gyda nhw ers amser maith.

Graffit + problemau sibrwd

1. Llwyth uchel ar yr is-system ddisg

Ar adeg y trawsnewid, roedd tua 1.5 miliwn o fetrigau yn ein cyrraedd bob munud. Gyda llif o'r fath, y defnydd o ddisg ar weinyddion oedd ~30%. Yn gyffredinol, roedd hyn yn eithaf derbyniol - roedd popeth yn gweithio'n sefydlog, wedi'i ysgrifennu'n gyflym, yn darllen yn gyflym... Nes i un o'r timau datblygu gyflwyno nodwedd newydd a dechrau anfon 10 miliwn metrig y funud atom. Dyna pryd y tynhaodd yr is-system ddisg, a gwelsom ddefnydd 100%. Cafodd y broblem ei datrys yn gyflym, ond roedd gweddillion yn parhau.

2. Diffyg atgynhyrchu a chysondeb

Yn fwyaf tebygol, fel pawb sy'n defnyddio / defnyddio Graphite + Whisper, fe wnaethom arllwys yr un ffrwd o fetrigau ar sawl gweinydd Graffit ar unwaith er mwyn creu goddefgarwch namau. Ac nid oedd unrhyw broblemau arbennig gyda hyn - tan yr eiliad pan ddamwain un o'r gweinyddwyr am ryw reswm. Weithiau fe wnaethom lwyddo i godi gweinydd syrthiedig yn ddigon cyflym, a llwyddodd carbon-c-relay i lwytho metrigau o'i storfa i mewn iddo, ond weithiau ddim. Ac yna yr oedd twll yn y metrigau, a lanwasom â rsync. Roedd y weithdrefn yn eithaf hir. Yr unig ras achubol oedd mai anaml iawn y digwyddai hyn. O bryd i'w gilydd, fe wnaethom hefyd gymryd set o fetrigau ar hap a'u cymharu ag eraill o'r un math ar nodau cyfagos y clwstwr. Mewn tua 5% o achosion, roedd sawl gwerth yn wahanol, nad oeddem yn hapus iawn yn eu cylch.

3. Ôl troed mawr

Gan ein bod yn ysgrifennu yn Graphite nid yn unig seilwaith, ond hefyd metrigau busnes (a bellach hefyd metrigau o Kubernetes), rydym yn aml yn cael sefyllfa lle mae'r metrig yn cynnwys dim ond ychydig o werthoedd, ac mae'r ffeil .wsp yn cael ei chreu gan ystyried yr holl gadw cyfnod, ac yn cymryd swm o le a neilltuwyd ymlaen llaw, sef ~2MB i ni. Gwaethygir y broblem ymhellach gan y ffaith bod llawer o ffeiliau tebyg yn ymddangos dros amser, ac wrth adeiladu adroddiadau arnynt, mae darllen pwyntiau gwag yn cymryd llawer o amser ac adnoddau.

Hoffwn nodi ar unwaith y gellir ymdrin â'r problemau a ddisgrifir uchod gan ddefnyddio gwahanol ddulliau a chyda gwahanol raddau o effeithiolrwydd, ond po fwyaf o ddata y byddwch yn dechrau ei dderbyn, y mwyaf y byddant yn gwaethygu.

Cael pob un o'r uchod (gan gymryd i ystyriaeth y blaenorol erthyglau), yn ogystal â chynnydd cyson yn nifer y metrigau a dderbyniwyd, yr awydd i drosglwyddo'r holl fetrigau i gyfwng storio o 30 eiliad. (hyd at 10 eiliad os oes angen), fe benderfynon ni roi cynnig ar Graphite+ClickHouse fel dewis arall addawol yn lle Whisper.

Graffit + ClickHouse. Disgwyliadau

Wedi ymweld â sawl cyfarfod o'r bechgyn o Yandex, ar ôl darllen cwpl o erthyglau ar Habré, ar ôl mynd trwy'r ddogfennaeth a dod o hyd i gydrannau call ar gyfer rhwymo ClickHouse o dan Graffit, fe benderfynon ni weithredu!

Hoffwn dderbyn y canlynol:

  • lleihau'r defnydd o is-systemau disg o 30% i 5%;
  • lleihau faint o le a feddiannir o 1TB i 100GB;
  • gallu derbyn 100 miliwn metrig y funud i'r gweinydd;
  • dyblygu data a goddefgarwch bai allan o'r blwch;
  • peidio ag eistedd ar y prosiect hwn am flwyddyn a gwneud y trawsnewid o fewn amserlen resymol;
  • newid heb amser segur.

Eithaf uchelgeisiol, iawn?

Graffit + ClickHouse. Cydrannau

I dderbyn data trwy'r protocol Graffit ac yna ei gofnodi yn ClickHouse, dewisais carbon-clicws (golang).

Dewiswyd y datganiad diweddaraf o ClickHouse, fersiwn sefydlog 1.1.54253, fel y gronfa ddata ar gyfer storio cyfresi amser. Roedd problemau wrth weithio ag ef: roedd mynydd o wallau yn arllwys i'r boncyffion, ac nid oedd yn gwbl glir beth i'w wneud â nhw. Mewn trafodaeth gyda Rhufeinig Lomonosov (awdur carbon-clickhouse, graphite-clickhouse a llawer, llawer mwy) dewiswyd yr un hynaf rhyddhau 1.1.54236. Diflannodd y gwallau - dechreuodd popeth weithio gyda chlec.

Wedi'i ddewis i ddarllen data o ClickHouse graffit-сlickhouse (golang). Fel API ar gyfer Graffit - carbonapi (golang). Defnyddiwyd ClickHouse i drefnu atgynhyrchu rhwng tablau sŵ ceidwad. Ar gyfer llwybro metrigau, rydym yn gadael ein hanwylyd carbon-c-cyfnewid (C) (gweler yr erthygl flaenorol).

Graffit + ClickHouse. Strwythur tabl

Mae “graffit” yn gronfa ddata a grëwyd gennym ar gyfer monitro tablau.

“graffit.metrics” - tabl gydag injan ReplicatedReplacingMergeTree (wedi'i atgynhyrchu DisodliMergeTree). Mae'r tabl hwn yn storio enwau metrigau a llwybrau iddynt.

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” - tabl gydag injan ReplicatedGraphiteMergeTree (ailadrodd GraffitMergeTree). Mae'r tabl hwn yn storio gwerthoedd metrig.

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')

Mae “graphite.date_metrics” yn dabl wedi'i lenwi'n amodol gyda'r injan ReplicatedReplacingMergeTree. Mae'r tabl hwn yn cofnodi enwau'r holl fetrigau y daethpwyd ar eu traws yn ystod y dydd. Disgrifir y rhesymau dros ei greu yn yr adran "Problemau" ar ddiwedd yr erthygl hon.

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” - tabl wedi'i lenwi yn ôl cyflwr, gyda'r injan ReplicatedAggregatingMergeTree (wedi'i atgynhyrchu CydgasgluMergeTree). Mae'r tabl hwn yn cofnodi nifer y metrigau sy'n dod i mewn, wedi'u dadansoddi i 4 lefel nythu.

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

Graffit + ClickHouse. Diagram rhyngweithio cydran

Storio metrigau: sut y gwnaethom newid o Graphite+Whisper i Graphite+ClickHouse

Graffit + ClickHouse. Mudo data

Fel y cofiwn o ddisgwyliadau'r prosiect hwn, dylai'r newid i ClickHouse fod heb amserau segur; yn unol â hynny, roedd yn rhaid i ni rywsut newid ein system fonitro gyfan i'r storfa newydd mor dryloyw â phosibl i'n defnyddwyr.
Dyma sut y gwnaethom ni.

  • Mae rheol wedi'i hychwanegu at garbon-c-relay i anfon llif ychwanegol o fetrigau i dŷ clic carbon un o'r gweinyddwyr sy'n cymryd rhan yn y gwaith o ddyblygu tablau ClickHouse.

  • Fe wnaethon ni ysgrifennu sgript fach yn python, a oedd, gan ddefnyddio'r llyfrgell whisper-dump, yn darllen yr holl ffeiliau .wsp o'n storfa ac wedi anfon y data hwn i'r carbon-clickhouse a ddisgrifir uchod mewn 24 edafedd. Cyrhaeddodd nifer y gwerthoedd metrig a dderbyniwyd mewn carbon-clickhouse 125 miliwn / mun, ac ni chwysu ClickHouse hyd yn oed.

  • Fe wnaethom greu Ffynhonnell Data ar wahân yn Grafana i ddadfygio swyddogaethau a ddefnyddir mewn dangosfyrddau presennol. Nodwyd rhestr o swyddogaethau a ddefnyddiwyd gennym, ond ni chawsant eu gweithredu yn carbonapi. Fe wnaethom ychwanegu'r swyddogaethau hyn ac anfon cysylltiadau cyhoeddus at awduron carbonapi (diolch arbennig iddynt).

  • I newid y llwyth darllen yn y gosodiadau balancer, fe wnaethom newid y diweddbwyntiau o graffit-api (rhyngwyneb API ar gyfer Graffit + Whisper) i carbonapi.

Graffit + ClickHouse. canlyniadau

  • lleihau'r defnydd o is-systemau disg o 30% i 1%;

    Storio metrigau: sut y gwnaethom newid o Graphite+Whisper i Graphite+ClickHouse

  • lleihau faint o le a feddiannwyd o 1 TB i 300 GB;
  • mae gennym y gallu i dderbyn 125 miliwn metrig y funud i'r gweinydd (uchafbwyntiau adeg mudo);
  • trosglwyddo'r holl fetrigau i egwyl storio tri deg eiliad;
  • derbyniwyd dyblygu data a goddefgarwch namau;
  • newid heb amser segur;
  • Cymerodd tua 7 wythnos i gwblhau popeth.

Graffit + ClickHouse. Problemau

Yn ein hachos ni, roedd rhai peryglon. Dyma beth y daethom ar ei draws ar ôl y trawsnewid.

  1. Nid yw ClickHouse bob amser yn ailddarllen cyfluniadau ar y hedfan; weithiau mae angen ei ailgychwyn. Er enghraifft, yn achos y disgrifiad o'r clwstwr sŵ-geidwad yn y ffurfwedd ClickHouse, ni chafodd ei ddefnyddio nes i'r gweinydd clickhouse gael ei ailgychwyn.
  2. Ni aeth ceisiadau ClickHouse mawr drwodd, felly yn graffit-clickhouse mae ein llinyn cysylltiad ClickHouse yn edrych fel hyn:
    url = "http://localhost:8123/?max_query_size=268435456&max_ast_elements=1000000"
  3. Mae ClickHouse yn aml yn rhyddhau fersiynau newydd o ddatganiadau sefydlog; gallant gynnwys pethau annisgwyl: byddwch yn ofalus.
  4. Mae cynwysyddion a grëwyd yn ddeinamig mewn kubernetes yn anfon nifer fawr o fetrigau gydag oes fer ac ar hap. Nid oes llawer o bwyntiau ar gyfer metrigau o'r fath, ac nid oes unrhyw broblemau gyda gofod. Ond wrth adeiladu ymholiadau, mae ClickHouse yn codi nifer enfawr o'r un metrigau hyn o'r tabl 'metrigau'. Mewn 90% o achosion, nid oes data arnynt y tu hwnt i'r ffenestr (24 awr). Ond treulir amser yn chwilio am y data hwn yn y tabl 'data', ac yn y pen draw mae terfyn amser. Er mwyn datrys y broblem hon, fe ddechreuon ni gadw golwg ar wahân gyda gwybodaeth am fetrigau y daethpwyd ar eu traws yn ystod y dydd. Felly, wrth adeiladu adroddiadau (graffiau) ar gyfer cynwysyddion a grëwyd yn ddeinamig, rydym yn cwestiynu dim ond y metrigau hynny y daethpwyd ar eu traws o fewn ffenestr benodol, ac nid am yr amser cyfan, a gyflymodd y broses o adeiladu adroddiadau arnynt yn sylweddol. Ar gyfer yr ateb a ddisgrifir uchod, casglais graffit-clicdy (fforc), sy'n cynnwys gweithredu gweithio gyda'r tabl date_metrics.

Graffit + ClickHouse. Tagiau

Gyda fersiwn 1.1.0 daeth Graphite yn swyddogol tagiau cymorth. Ac rydym wrthi'n meddwl am beth a sut i'w wneud i gefnogi'r fenter hon yn y stac tai clic graffit+.

Graffit + ClickHouse. Synhwyrydd anomaledd

Yn seiliedig ar y seilwaith a ddisgrifir uchod, rydym wedi gweithredu prototeip o synhwyrydd anomaledd, ac mae'n gweithio! Ond mwy amdano yn yr erthygl nesaf.

Tanysgrifiwch, pwyswch y saeth i fyny a byddwch yn hapus!

Ffynhonnell: hab.com

Ychwanegu sylw