Pagtipig sa metric: giunsa namo pagbalhin gikan sa Graphite+Whisper ngadto sa Graphite+ClickHouse

Kumusta tanan! Sa iyang miaging artikulo Nagsulat ako bahin sa pag-organisar sa usa ka modular nga sistema sa pag-monitor alang sa usa ka arkitektura sa microservice. Wala’y makapugong, ang among proyekto kanunay nga nagtubo, ug mao usab ang gidaghanon sa gitipigan nga mga sukatan. Giunsa namo pag-organisar ang transisyon gikan sa Graphite + Whisper ngadto sa Graphite + ClickHouse ubos sa taas nga kondisyon sa pagkarga, basaha ang mahitungod sa mga gilauman gikan niini ug ang mga resulta sa paglalin ubos sa pagputol.

Pagtipig sa metric: giunsa namo pagbalhin gikan sa Graphite+Whisper ngadto sa Graphite+ClickHouse

Sa dili pa nako isulti kanimo kung giunsa namo pag-organisar ang transisyon gikan sa pagtipig sa mga sukatan sa Graphite + Whisper ngadto sa Graphite + ClickHouse, gusto kong mohatag og impormasyon mahitungod sa mga rason sa paghimo sa maong desisyon ug mahitungod sa mga disadvantages sa Whisper nga among gipuy-an sa dugay nga panahon.

Mga problema sa Graphite+Whisper

1. Taas nga load sa disk subsystem

Sa panahon sa transisyon, gibana-bana nga 1.5 ka milyon nga metrics kada minuto ang milupad nganhi kanamo. Uban niini nga dagan, ang paggamit sa disk sa mga server mao ang ~ 30%. Sa kinatibuk-an, kini madawat ra - ang tanan nagtrabaho nga lig-on, gisulat dayon, gibasa dayon ... Hangtud nga ang usa sa mga development team naglunsad og usa ka bag-ong feature ug nagsugod sa pagpadala kanamo og 10 ka milyon nga metrics kada minuto. Niana nga ang disk subsystem mihugot, ug among nakita ang 100% nga paggamit. Ang problema dali nga nasulbad, apan ang linugdang nagpabilin.

2. Kakulang sa replikasyon ug pagkamakanunayon

Lagmit, sama sa tanan nga naggamit / migamit sa Graphite + Whisper, among gibubo ang parehas nga stream sa mga sukatan sa daghang mga Graphite server sa usa ka higayon aron makamugna ang pagtugot sa sayup. Ug wala’y espesyal nga mga problema niini - hangtod sa higayon nga ang usa sa mga server wala mahulog sa usa ka hinungdan. Usahay nakahimo kami sa pagdala sa nahulog nga server sa madali, ug ang carbon-c-relay nakahimo sa pagpuno niini sa mga metrics gikan sa cache niini, ug usahay dili. Ug unya adunay usa ka lungag sa mga sukatan, nga among gihigpitan sa rsync. Ang pamaagi dugay kaayo. Giluwas lamang sa kamatuoran nga kini nahitabo panagsa ra. Kanunay usab namon nga gikuha ang usa ka random nga set sa mga sukatan ug gitandi kini sa uban nga parehas sa mga silingan nga node sa cluster. Sa mga 5% sa mga kaso, daghang mga kantidad ang lainlain, nga wala makapalipay kanamo.

3. Dako nga luna nga giokupar

Tungod kay nagsulat kami sa Graphite dili lamang sa imprastraktura, apan usab sa mga sukatan sa negosyo (ug karon usab mga sukatan gikan sa Kubernetes), kanunay kami makakuha og usa ka sitwasyon diin adunay pipila lamang nga mga bili sa metric, ug ang .wsp file gimugna pagkuha isipa ang tibuok nga panahon sa pagpabilin, ug nagkinahanglan sa usa ka pre-allocated nga kantidad sa luna, nga kami adunay ~ 2 MB. Ang problema gipasamot sa kamatuoran nga adunay daghang ingon nga mga file sa paglabay sa panahon, ug kung magtukod og mga taho bahin niini, ang pagbasa sa mga walay sulod nga punto nagkinahanglan og daghang panahon ug mga kahinguhaan.

Gusto nakong timan-an dayon nga ang mga problema nga gihulagway sa ibabaw mahimong masulbad pinaagi sa lainlaing mga pamaagi ug uban ang lainlaing mga ang-ang sa kaepektibo, apan ang daghang mga datos nga imong gisugdan nga madawat, labi pa nga kini mograbe.

Ang pagbaton sa tanan sa ibabaw (sa pagkonsiderar sa nauna mga artikulo), ingon man ang kanunay nga pagtaas sa gidaghanon sa nadawat nga mga sukatan, ang tinguha nga ibalhin ang tanan nga mga sukatan sa usa ka agwat sa pagtipig nga 30 segundos. (hangtod sa 10 segundos kung gikinahanglan), nakahukom kami nga sulayan ang Graphite+ClickHouse isip usa ka maayong alternatibo sa Whisper.

Graphite+ClickHouse. mga gilauman

Pagbisita sa daghang mga panagkita sa mga lalaki gikan sa Yandex, pagkahuman nagbasa duha ka artikulo bahin sa HabrΓ©, nga nakaagi sa dokumentasyon ug nakit-an ang maayong mga sangkap alang sa paghigot sa ClickHouse sa ilawom sa Graphite, nakahukom kami nga molihok!

Gusto nga makuha ang mosunod:

  • pagpakunhod sa paggamit sa disk subsystem gikan sa 30% ngadto sa 5%;
  • pagpakunhod sa gidaghanon sa luna nga okupar gikan sa 1TB ngadto sa 100GB;
  • makadawat og 100 ka milyon nga metrics kada minuto sa server;
  • replikasyon sa datos ug pagtugot sa sayup gikan sa kahon;
  • ayaw paglingkod niini nga proyekto sulod sa usa ka tuig ug paghimo sa transisyon alang sa pipila ka maayong panahon;
  • switch nga walay downtime.

Medyo ambisyoso, di ba?

Graphite+ClickHouse. Mga sangkap

Aron makadawat og datos pinaagi sa Graphite protocol ug dayon isulat kini sa ClickHouse, akong gipili carbon-clickhouse (golang).

Ang katapusang ClickHouse nga pagpagawas sa stable nga bersyon 1.1.54253 gipili isip database alang sa pagtipig sa serye sa panahon. Sa diha nga nagtrabaho uban niini, adunay mga problema: usa ka bukid sa mga kasaypanan gibubo ngadto sa mga troso, ug kini dili hingpit nga tin-aw kon unsa ang buhaton uban kanila. Sa diskusyon uban sa Roman Lomonosov (tagsulat sa carbon-clickhouse, graphite-clickhouse ug daghan pa) ang mas tigulang gipili pagpagawas 1.1.54236. Nawala ang mga kasaypanan - ang tanan nagsugod sa pagtrabaho uban ang usa ka bang.

Ang pagbasa sa datos gikan sa ClickHouse gipili graphite-clickhouse (golang). Isip usa ka API alang sa Graphite βˆ’ carbonapi (golang). Aron maorganisar ang pagkopya tali sa mga lamesa, gigamit ang ClickHouse zookeeper. Para sa routing metrics, gibiyaan namo ang among minahal carbon-c-relay (C) (tan-awa ang miaging artikulo).

Graphite+ClickHouse. Istruktura sa lamesa

Ang "graphite" usa ka database nga among gihimo para sa pagmonitor sa mga lamesa.

Ang "graphite.metrics" usa ka lamesa nga adunay ReplicatedReplacingMergeTree nga makina (gikopya Pag-ilis saMergeTree). Kini nga lamesa nagtipig sa mga ngalan sa mga sukatan ug ang mga agianan padulong kanila.

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

Ang "graphite.data" usa ka lamesa nga adunay ReplicatedGraphiteMergeTree nga makina (gikopya GraphiteMergeTree). Kini nga lamesa nagtipig sa metric values.

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

Ang "graphite.date_metrics" usa ka lamesa nga puno sa kondisyon nga adunay makina nga ReplicatedReplacingMergeTree. Kini nga lamesa adunay mga ngalan sa tanan nga mga sukatan nga nasugatan sa adlaw. Ang mga hinungdan sa paglalang gihulagway sa seksyon "Mga problema" sa katapusan niini nga artikulo.

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

Ang "graphite.data_stat" usa ka conditional table nga adunay ReplicatedAggregatingMergeTree engine (gikopya AggregatingMergeTree). Kini nga talaan nagrekord sa gidaghanon sa umaabot nga mga sukdanan, gibahin ngadto sa 4 ka lebel sa salag.

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

Graphite+ClickHouse. Skema sa interaksyon sa mga sangkap

Pagtipig sa metric: giunsa namo pagbalhin gikan sa Graphite+Whisper ngadto sa Graphite+ClickHouse

Graphite+ClickHouse. Paglalin sa datos

Sama sa among nahinumduman gikan sa mga gilauman gikan niini nga proyekto, ang transisyon ngadto sa ClickHouse kinahanglan nga walay downtime, matag usa, kinahanglan namo nga ibalhin ang among tibuok nga sistema sa pagmonitor ngadto sa bag-ong storage nga transparent kutob sa mahimo alang sa among mga tiggamit.
Gihimo namo kini nga paagi.

  • Usa ka lagda ang gidugang sa carbon-c-relay aron magpadala usa ka dugang nga stream sa mga sukatan sa carbon-clickhouse sa usa sa mga server nga nalambigit sa pagkopya sa mga lamesa sa ClickHouse.

  • Nagsulat kami og gamay nga script sa python nga, gamit ang whisper-dump library, basahon ang tanang .wsp files gikan sa among storage ug ipadala kini nga data ngadto sa carbon-clickhouse nga gihulagway sa ibabaw sa 24 ka thread. Ang gidaghanon sa gidawat nga metric nga mga kantidad sa carbon-clickhouse miabot sa 125 milyon / min., Ug ang ClickHouse wala gani singot.

  • Naghimo kami usa ka bulag nga DataSource sa Grafana aron ma-debug ang mga gimbuhaton nga gigamit sa naglungtad nga mga dashboard. Gipadayag ang usa ka lista sa mga bahin nga among gigamit, apan wala kini gipatuman sa carbonapi. Gihuman namo kini nga mga gimbuhaton, ug gipadala ang mga PR sa mga tagsulat sa carbonapi (espesyal nga pasalamat kanila).

  • Aron ibalhin ang load sa pagbasa sa mga setting sa balanse, among giusab ang mga endpoint gikan sa graphite-api (API interface alang sa Graphite+Whisper) ngadto sa carbonapi.

Graphite+ClickHouse. resulta

  • pagkunhod sa paggamit sa disk subsystem gikan sa 30% ngadto sa 1%;

    Pagtipig sa metric: giunsa namo pagbalhin gikan sa Graphite+Whisper ngadto sa Graphite+ClickHouse

  • mikunhod ang gidaghanon sa luna nga giokupar gikan sa 1 TB ngadto sa 300 GB;
  • kita adunay abilidad sa pagdawat sa 125 ka milyon nga metrics kada minuto kada server (mga peak sa panahon sa paglalin);
  • gibalhin ang tanang sukatan ngadto sa katloan ug segundos nga agwat sa pagtipig;
  • nakadawat data replication ug fault tolerance;
  • gibalhin nga walay downtime;
  • Nagkinahanglan kini og mga 7 ka semana alang sa tanan.

Graphite+ClickHouse. Mga problema

Sa among kaso, adunay pipila ka mga lit-ag. Ania ang among nasugatan pagkahuman sa transisyon.

  1. Ang ClickHouse dili kanunay magbasa pag-usab sa mga config sa langaw, usahay kini kinahanglan nga i-reload. Pananglitan, sa kaso sa paghulagway sa zookeeper cluster sa ClickHouse config, wala kini gipadapat hangtud nga ang clickhouse-server gi-restart.
  2. Walay dagkong mga hangyo sa ClickHouse, mao nga sa among graphite-clickhouse, ang ClickHouse connection string ingon niini:
    url = "http://localhost:8123/?max_query_size=268435456&max_ast_elements=1000000"
  3. Ang ClickHouse kanunay nga nagpagawas sa mga bag-ong bersyon sa mga stable nga pagpagawas, mahimo nga adunay mga sorpresa: pag-amping.
  4. Ang dinamikong gibuhat nga mga sudlanan sa mga kubernetes nagpadala sa daghang mga sukatan nga adunay mubo ug random nga kinabuhi. Wala’y daghang mga punto sumala sa ingon nga mga sukatan, ug wala’y mga problema sa lugar. Apan kung nagtukod og mga pangutana, ang ClickHouse nagpataas sa usa ka dako nga gidaghanon sa parehas nga mga sukatan gikan sa lamesa nga 'metrics'. Sa 90% sa mga kaso, walay datos alang kanila sa gawas sa bintana (24 oras). Apan ang oras nga gigugol sa pagpangita niini nga datos sa 'data' nga lamesa gigasto, ug sa katapusan nagpahulay sa usa ka timeout. Aron masulbad kini nga problema, nagsugod kami sa pagpadayon sa usa ka lahi nga pagtan-aw nga adunay kasayuran sa mga sukatan nga nasugatan sa adlaw. Mao nga, kung maghimo mga taho (mga graph) sa mga dynamic nga gibuhat nga mga sudlanan, among gi-poll ang mga sukatan nga nakit-an sa sulod sa piho nga bintana, ug dili sa tibuuk nga panahon, nga labi nga nagpadali sa paghimo sa mga taho bahin niini. Alang sa solusyon sa ibabaw gikolekta graphite-clickhouse (tinidor), nga naglakip sa pagpatuman sa pagtrabaho uban sa date_metrics lamesa.

Graphite+ClickHouse. mga tag

Sukad nga ang bersyon 1.1.0 Graphite nahimong opisyal suporta tag. Ug kami aktibo nga naghunahuna kung unsa ug kung giunsa ang buhaton aron suportahan kini nga inisyatiba sa graphite+clickhouse stack.

Graphite+ClickHouse. Detektor sa anomaliya

Pinasukad sa imprastraktura nga gihulagway sa ibabaw, nagpatuman kami usa ka prototype anomaly detector, ug kini molihok! Apan bahin kaniya - sa sunod nga artikulo.

Mag-subscribe, ipadayon ang pataas nga arrow ug paglipay!

Source: www.habr.com

Idugang sa usa ka comment