Нигоҳдории метрика: чӣ гуна мо аз Graphite+Whisper ба Graphite+ClickHouse гузаштем

Салом ба ҳама! Дар худ мақолаи охирин Ман дар бораи ташкили системаи мониторинги модулии меъмории микросервис навишта будам. Ҳеҷ чиз боқӣ намемонад, лоиҳаи мо мунтазам афзоиш меёбад ва шумораи ченакҳои захирашуда низ меафзояд. Чӣ гуна мо гузаришро аз Graphite+Whisper ба Graphite+ClickHouse дар шароити сарбории баланд ташкил кардем, дар бораи интизориҳо аз он ва натиҷаҳои муҳоҷират дар зери буриш хонед.

Нигоҳдории метрика: чӣ гуна мо аз Graphite+Whisper ба Graphite+ClickHouse гузаштем

Пеш аз он ки ба шумо бигӯям, ки мо гузаришро аз нигоҳдории метрика дар Graphite+Whisper ба Graphite+ClickHouse ташкил кардем, ман мехоҳам дар бораи сабабҳои қабули чунин қарор ва дар бораи камбудиҳои Whisper, ки мо муддати тӯлонӣ бо он зиндагӣ мекардем, маълумот диҳам.

Мушкилоти Графит + Пичиррос

1. Сарбории баланд ба зерсистемаи диск

Дар замони гузариш ба мо дар як дақиқа тақрибан 1.5 миллион метрӣ ворид мешуд. Бо чунин ҷараён, истифодаи диск дар серверҳо ~ 30% буд. Дар маҷмӯъ, ин комилан қобили қабул буд - ҳама чиз мӯътадил кор мекард, зуд навишта шуд, зуд хонда шуд... То он даме, ки яке аз гурӯҳҳои таҳиякунанда хусусияти навро паҳн кард ва ба мо дар як дақиқа 10 миллион метрика фиристодан оғоз кард. Он вақт зерсистемаи диск пурзӯр шуд ва мо 100% истифодаро дидем. Мушкилот зуд ҳал шуд, аммо боқимонда боқӣ монд.

2. Набудани такрор ва пайвастагӣ

Эҳтимол, мисли ҳар касе, ки Graphite+Whisper-ро истифода мебарад/истифода мекунад, мо як ҷараёни ченакҳоро якбора ба якчанд серверҳои Graphite рехтем, то таҳаммулпазирии хатогиҳоро эҷод кунем. Ва дар ин бора ягон мушкилоти махсус вуҷуд надошт - то лаҳзае, ки яке аз серверҳо бо ягон сабаб суқут кард. Баъзан мо тавонистем сервери афтодаро ба қадри кофӣ зуд бигирем ва карбон-с-релей тавонист метрикаро аз кэши он ба он бор кунад, аммо баъзан не. Ва он гоҳ дар метрика сӯрохе пайдо шуд, ки мо онро бо rsync пур кардем. Тартиб хеле дароз буд. Файзи ягонаи наҷотбахш ин буд, ки ин хеле кам рух медод. Мо инчунин давра ба давра маҷмӯи тасодуфии ченакҳоро гирифтем ва онҳоро бо дигар намудҳои якхела дар гиреҳҳои ҳамсояи кластер муқоиса кардем. Тақрибан дар 5% ҳолатҳо, якчанд арзишҳо гуногун буданд, ки мо аз он чандон хурсанд набудем.

3. Пойгоҳи калон

Азбаски мо дар Graphite на танҳо инфрасохтор, балки ченакҳои тиҷорӣ низ менависем (ва ҳоло инчунин ченакҳо аз Kubernetes), мо аксар вақт вазъиятеро ба даст меорем, ки дар он метрика танҳо чанд арзишро дар бар мегирад ва файли .wsp бо назардошти ҳама нигоҳдорӣ сохта мешавад. давра, ва миқдори пешакӣ ҷудошударо ишғол мекунад, ки барои мо ~ 2 МБ буд. Мушкилот аз он сабаб боз ҳам бадтар мешавад, ки бо мурури замон шумораи зиёди файлҳои шабеҳ пайдо мешаванд ва ҳангоми таҳияи гузоришҳо аз рӯи онҳо, хондани нуқтаҳои холӣ вақт ва захираҳои зиёдро талаб мекунад.

Ман мехоҳам фавран қайд намоям, ки мушкилоти дар боло тавсифшуда метавонанд бо истифода аз усулҳои гуногун ва дараҷаҳои гуногуни самаранокӣ ҳал карда шаванд, аммо ҳар қадаре, ки шумо маълумоти бештар гиред, ҳамон қадар онҳо бадтар мешаванд.

Доштани ҳамаи чизҳои дар боло зикршуда (бо назардошти пештара мақолаҳо), инчунин афзоиши доимии шумораи ченакҳои гирифташуда, хоҳиши интиқол додани ҳама нишондиҳандаҳо ба фосилаи нигоҳдории 30 сония. (агар лозим бошад, то 10 сония), мо тасмим гирифтем, ки Graphite+ClickHouse-ро ҳамчун алтернативаи умедбахш ба Whisper санҷем.

Graphite+ClickHouse. Интизорӣ

Пас аз дидани якчанд вохӯриҳои бачаҳо аз Яндекс, хондан якчанд мақолаҳо дар бораи Habre, пас аз азназаргузаронии ҳуҷҷатҳо ва ҷузъҳои солим барои бастани ClickHouse дар зери Graphite ёфтанд, мо тасмим гирифтем, ки амал кунем!

Ман мехоҳам инҳоро гирам:

  • кам кардани истифодаи зерсистемаи диск аз 30% то 5%;
  • миқдори фазои ишғолшударо аз 1TB то 100 ГБ кам кунед;
  • қодир ба қабули 100 миллион метрика дар як дақиқа ба сервер;
  • нусхабардории маълумот ва таҳаммулпазирии хатогиҳо аз қуттӣ;
  • дар давоми як сол дар ин лоиҳа нанишинед ва гузаришро дар муддати мувофиқ анҷом диҳед;
  • бе бекористии гузариш.

Хеле шӯҳратпараст, дуруст?

Graphite+ClickHouse. Компонентхо

Барои гирифтани маълумот тавассути протоколи Graphite ва баъдан онро дар ClickHouse сабт кардан, ман интихоб кардам карбон-клик (голанг).

Нашри охирини ClickHouse, версияи устувори 1.1.54253, ҳамчун пойгоҳи додаҳо барои нигоҳдории силсилаи вақт интихоб карда шуд. Ҳангоми кор бо он мушкилот вуҷуд доштанд: як кӯҳи хатоҳо ба гузоришҳо рехтанд ва бо онҳо чӣ кор кардан комилан маълум набуд. Дар мухокима бо Роман Ломоносов (муаллифи carbon-clickhouse, graphite-clickhouse ва бисёр ва бисёр чизҳои дигар) калонсол интихоб шуд озод 1.1.54236. Хатогиҳо аз байн рафтанд - ҳама чиз бо як таркиш ба кор шурӯъ кард.

Барои хондани маълумот аз ClickHouse интихоб шудааст graphite-slickhouse (голанг). Ҳамчун API барои Graphite - карбонапи (голанг). ClickHouse барои ташкили такрори байни ҷадвалҳо истифода мешуд зоотехник. Барои ченакҳои масир, мо маҳбуби худро тарк кардем карбон-с-реле (C) (ба мақолаи қаблӣ нигаред).

Graphite+ClickHouse. Сохтори ҷадвал

"графит" махзани маълумотест, ки мо барои ҷадвалҳои мониторинг сохтаем.

"graphite.metrics" - ҷадвал бо муҳаррики ReplicatedReplacingMergeTree (репликашуда) Иваз кардани MergeTree). Ин ҷадвал номҳои метрика ва роҳҳоро ба онҳо нигоҳ медорад.

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" - ҷадвал бо муҳаррики ReplicatedGraphiteMergeTree (репликашуда) GraphiteMergeTree). Ин ҷадвал арзишҳои метриро нигоҳ медорад.

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" ҷадвали шартан пуршуда бо муҳаррики ReplicatedReplacingMergeTree мебошад. Ин ҷадвал номҳои ҳамаи нишондиҳандаҳоеро, ки дар давоми рӯз дучор шуда буданд, сабт мекунад. Сабабҳои таъсиси он дар бахш тавсиф шудаанд "Мушкилот" дар охири ин мақола.

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" - ҷадвале, ки мувофиқи вазъият бо муҳаррики ReplicatedAggregatingMergeTree пур карда шудааст (репликашуда) AggregatingMergeTree). Ин ҷадвал шумораи ченакҳои воридшударо, ки ба 4 сатҳи лона тақсим шудаанд, сабт мекунад.

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. Диаграммаи мутақобилаи ҷузъҳо

Нигоҳдории метрика: чӣ гуна мо аз Graphite+Whisper ба Graphite+ClickHouse гузаштем

Graphite+ClickHouse. Муҳоҷирати маълумот

Тавре ки мо аз интизориҳои ин лоиҳа ёдовар мешавем, гузариш ба ClickHouse бояд бе таъхир бошад; мувофиқан, мо маҷбур шудем, ки тамоми системаи мониторинги худро ба таври шаффоф барои корбарони худ ба анбори нав гузаронем.
Мо ин тавр кардем.

  • Ба карбон-c-relay қоида барои фиристодани ҷараёни иловагии метрика ба карбон-кликхонаи яке аз серверҳое, ки дар такрори ҷадвалҳои ClickHouse иштирок мекунанд, илова карда шудааст.

  • Мо скрипти хурдеро дар python навиштем, ки он бо истифода аз китобхонаи whisper-dump ҳамаи файлҳои .wsp-ро аз анбори мо хонд ва ин маълумотро ба карбон-клик дар боло тавсифшуда дар 24 ришта фиристод. Шумораи арзишҳои метрикии қабулшуда дар карбон-кликхаус ба 125 миллион дар як дақиқа расид ва ClickHouse ҳатто арақ напартофт.

  • Мо дар Grafana барои ислоҳ кардани функсияҳои дар панелҳои мавҷуда истифодашавандаи DataSource ҷудо кардем. Мо рӯйхати функсияҳоеро муайян кардем, ки мо истифода мебарем, аммо онҳо дар карбонапи татбиқ карда нашуданд. Мо ин функсияҳоро илова кардем ва ба муаллифони карбонапи PR фиристодем (шукронаи махсус ба онҳо).

  • Барои иваз кардани сарбории хониш дар танзимоти мувозинат, мо нуқтаҳоро аз graphite-api (интерфейси API барои Graphite+Whisper) ба карбонапи иваз кардем.

Graphite+ClickHouse. натиҷаҳо

  • кам кардани истифодаи зерсистемаи диск аз 30% то 1%;

    Нигоҳдории метрика: чӣ гуна мо аз Graphite+Whisper ба Graphite+ClickHouse гузаштем

  • миқдори фазои ишғолшударо аз 1 ТБ то 300 ГБ кам кард;
  • мо имкон дорем, ки дар як дақиқа 125 миллион метрикаро ба сервер қабул кунем (қулаҳо дар вақти муҳоҷират);
  • тамоми ченакхоро ба фосилаи сию сония гузаронд;
  • нусхабардории маълумот ва таҳаммулпазирии хатогиҳо;
  • бе бекористии ивазшаванда;
  • Барои анҷом додани ҳама чиз тақрибан 7 ҳафта лозим шуд.

Graphite+ClickHouse. Мушкилот

Дар мо бошад, баъзе норасоихо чой доштанд. Ин аст он чизе ки мо пас аз гузариш дучор шудем.

  1. ClickHouse на ҳамеша конфигуратсияҳоро зуд аз нав мехонад; баъзан он бояд аз нав оғоз карда шавад. Масалан, дар сурати тавсифи кластери зоопарк дар конфигуратсияи ClickHouse, он то он даме, ки клик-сервер бозоғоз карда нашавад, истифода нашуд.
  2. Дархостҳои калони ClickHouse иҷро нашуданд, аз ин рӯ дар graphite-clickhouse сатри пайвасти ClickHouse мо чунин менамояд:
    url = "http://localhost:8123/?max_query_size=268435456&max_ast_elements=1000000"
  3. ClickHouse аксар вақт версияҳои нави релизҳои устуворро мебарорад; онҳо метавонанд ногаҳонӣ дошта бошанд: эҳтиёт бошед.
  4. Контейнерҳои ба таври динамикӣ сохташуда дар кубернетҳо миқдори зиёди ченакҳоро бо мӯҳлати кӯтоҳ ва тасодуфӣ мефиристанд. Барои чунин ченакҳо нуқтаҳо зиёд нестанд ва дар фазо мушкилот вуҷуд надорад. Аммо ҳангоми сохтани пурсишҳо, ClickHouse миқдори зиёди ҳамин нишондиҳандаҳоро аз ҷадвали "метрикаҳо" мегирад. Дар 90% ҳолатҳо, дар бораи онҳо берун аз тиреза (24 соат) маълумот мавҷуд нест. Аммо барои ҷустуҷӯи ин маълумот дар ҷадвали 'маълумот' вақт сарф мешавад ва дар ниҳоят ба вақти тамомшавӣ мегузарад. Барои ҳалли ин мушкилот, мо ба нигоҳ доштани назари алоҳида бо маълумот дар бораи ченакҳое, ки дар давоми рӯз дучор омада буданд, оғоз кардем. Ҳамин тариқ, ҳангоми сохтани ҳисоботҳо (графикҳо) барои контейнерҳои динамикӣ сохташуда, мо танҳо он ченакҳоеро, ки дар як равзанаи додашуда дучор омадаанд, дархост мекунем, на дар тӯли тамоми вақт, ки сохтани гузоришҳоро дар онҳо ба таври назаррас суръат мебахшад. Барои ҳалли дар боло тавсифшуда, ман ҷамъоварӣ кардам graphite-clickhouse (форк), ки иҷрои кор бо ҷадвали date_metrics -ро дар бар мегирад.

Graphite+ClickHouse. Тегҳо

Бо версияи 1.1.0 Graphite расмӣ шуд барчаспҳои дастгирӣ. Ва мо фаъолона дар бораи он фикр мекунем, ки чӣ гуна ва чӣ гуна бояд ин ташаббусро дар стек графит + кликхаус дастгирӣ кунем.

Graphite+ClickHouse. Детектори аномалия

Дар асоси инфрасохтори дар боло тавсифшуда, мо як прототипи детектори аномалияро амалӣ кардем ва он кор мекунад! Аммо бештар дар бораи ӯ дар мақолаи навбатӣ.

Обуна шавед, тирчаи болоро пахш кунед ва хушбахт бошед!

Манбаъ: will.com

Илова Эзоҳ