Мониторинг ҳамчун хидмат: системаи модулӣ барои меъмории микросервис

Имрӯз, ба ғайр аз рамзи монолитӣ, лоиҳаи мо даҳҳо хидматрасонии хурдро дар бар мегирад. Ҳар яки онҳо бояд назорат карда шаванд. Иҷрои ин кор дар чунин миқёс бо истифода аз муҳандисони DevOps мушкил аст. Мо системаи мониторингро таҳия кардем, ки ҳамчун хидмат барои таҳиягарон кор мекунад. Онҳо метавонанд мустақилона ченакҳоро ба системаи мониторинг нависанд, аз онҳо истифода баранд, дар асоси онҳо панелҳои идоракуниро созанд ва ба онҳо огоҳиҳое зам кунанд, ки ҳангоми расидан ба арзишҳои ҳадди аксар оғоз мешаванд. Барои муҳандисони DevOps, танҳо инфрасохтор ва ҳуҷҷатгузорӣ.

Ин паём як стенограммаи суханронии ман бо мост бахшҳо дар RIT++. Бисёр одамон аз мо хоҳиш карданд, ки нусхаҳои матнии гузоришҳоро аз он ҷо созем. Агар шумо дар конфронс бошед ё видеоро тамошо карда бошед, шумо ягон чизи нав намеёбед. Ва ҳар каси дигар - ба гурба хуш омадед. Ман ба шумо мегӯям, ки мо чӣ гуна ба чунин система омадем, он чӣ гуна кор мекунад ва чӣ гуна мо онро навсозӣ карданӣ ҳастем.

Мониторинг ҳамчун хидмат: системаи модулӣ барои меъмории микросервис

Дар гузашта: схемаҳо ва нақшаҳо

Мо ба системаи ҳозираи мониторинг чӣ гуна расидем? Барои посух додан ба ин савол, шумо бояд ба соли 2015 равед. Он вақт чунин менамуд:

Мониторинг ҳамчун хидмат: системаи модулӣ барои меъмории микросервис

Мо тақрибан 24 гиреҳ доштем, ки барои назорат масъул буданд. Маҷмӯи пурраи тоҷҳо, скриптҳо, демонҳои гуногун вуҷуд дорад, ки ба таври дилхоҳ чизеро назорат мекунанд, паёмҳо мефиристанд ва вазифаҳоро иҷро мекунанд. Мо фикр мекардем, ки хар кадар пеш равем, ин гуна система хамон кадар кобили хаётй наме-шавад. Инкишоф додани он фоидае надорад: ин хеле душвор аст.
Мо тасмим гирифтем, ки он унсурҳои мониторингро интихоб кунем, ки мо нигоҳ дорем ва инкишоф диҳем ва аз онҳо даст кашем. Онҳо 19 адад буданд.Танҳо графитҳо, агрегаторҳо ва Графана ҳамчун панели асбобҳо боқӣ монданд. Аммо системаи нав чӣ гуна хоҳад буд? Монанди ин:

Мониторинг ҳамчун хидмат: системаи модулӣ барои меъмории микросервис

Мо анбори метрика дорем: инҳо графитҳо мебошанд, ки ба дискҳои зуди SSD асос ёфтаанд, инҳо агрегаторҳои муайян барои метрика мебошанд. Оянда - Grafana барои намоиши панелҳои идоракунӣ ва Moira барои огоҳӣ. Мо инчунин хостем, ки системаи ҷустуҷӯи аномалияҳоро таҳия кунем.

Стандарт: Мониторинг 2.0

Чунин буд нақшаҳо дар соли 2015. Аммо мо бояд на танҳо инфрасохтор ва худи хадамот, балки ҳуҷҷатҳоро барои он омода кунем. Мо барои худ як стандарти корпоративиро таҳия кардем, ки онро мониторинги 2.0 меномем. Талабот ба система чӣ гуна буд?

  • мавҷудияти доимӣ;
  • фосилаи нигоҳдории метри = 10 сония;
  • нигоҳдории сохтории метрика ва панели идоракунӣ;
  • SLA > 99,99%
  • ҷамъоварии ченакҳои рӯйдодҳо тавассути UDP (!).

Ба мо UDP лозим буд, зеро мо ҷараёни зиёди трафик ва рӯйдодҳое дорем, ки ченакҳоро тавлид мекунанд. Агар шумо ҳамаи онҳоро якбора ба графит нависед, анбор вайрон мешавад. Мо инчунин префиксҳои дараҷаи аввалро барои ҳама ченакҳо интихоб кардем.

Мониторинг ҳамчун хидмат: системаи модулӣ барои меъмории микросервис

Ҳар як префикс дорои хосият аст. Метрикҳо барои серверҳо, шабакаҳо, контейнерҳо, захираҳо, барномаҳо ва ғайра мавҷуданд. Филтри возеҳ, қатъӣ ва чопшуда амалӣ карда шуд, ки дар он мо ченакҳои дараҷаи аввалро қабул мекунем ва боқимондаро мепартоем. Мо ин системаро дар соли 2015 ҳамин тавр ба нақша гирифта будем. Дар айни ҳол чӣ ҳаст?

Пешниҳод: диаграммаи таъсири мутақобилаи ҷузъҳои мониторинг

Пеш аз ҳама, мо барномаҳоро назорат мекунем: рамзи PHP-и мо, барномаҳо ва хидматҳои хурд - кӯтоҳ, ҳама чизеро, ки таҳиягарони мо менависанд. Ҳама барномаҳо метрикаҳоро тавассути UDP ба агрегатори Brubeck мефиристанд (statsd, аз нав дар C навишта шудааст). Он дар озмоишҳои синтетикӣ зудтарин баромад. Ва он ченакҳои аллакай ҷамъшударо тавассути TCP ба Graphite мефиристад.

Он як намуди ченакҳо дорад, ки таймер ном дорад. Ин як чизи хеле қулай аст. Масалан, барои ҳар як пайвасти корбар ба хидмат, шумо ба Брубек метрикаеро бо вақти посух мефиристед. Як миллион посух омад, аммо агрегатор танҳо 10 метрро баргардонд. Шумо шумораи одамоне, ки омадаанд, вақти максималӣ, ҳадди аққал ва миёнаи посух, медиана ва 4 фоизро доред. Сипас маълумот ба Graphite интиқол дода мешавад ва мо ҳама онро зинда мебинем.

Мо инчунин ҷамъбасти ченакҳо дар сахтафзор, нармафзор, метрикаи система ва системаи кӯҳнаи мониторинги Мунин дорем (он барои мо то соли 2015 кор мекард). Мо ҳамаи инро тавассути демони C CollectD ҷамъ меорем (он дорои як қатор плагинҳои гуногун дар он сохта шудаанд, он метавонад тамоми захираҳои системаи ҳост, ки дар он насб карда шудааст, пурсед, танҳо дар конфигуратсия дар куҷо навиштани маълумотро муайян кунед) ва тавассути он маълумотро ба Graphite нависед. Он инчунин плагинҳои python ва скриптҳои shell -ро дастгирӣ мекунад, то шумо метавонед қарорҳои фармоишии худро нависед: CollectD ин маълумотро аз ҳости маҳаллӣ ё дурдаст (бо назардошти Curl) ҷамъоварӣ мекунад ва ба Graphite мефиристад.

Сипас, мо ҳама ченакҳоеро, ки ҷамъ овардаем, ба Carbon-c-relay мефиристем. Ин ҳалли Carbon Relay аз Graphite аст, ки дар C тағир дода шудааст. Ин роутерест, ки тамоми ченакҳоеро, ки мо аз агрегаторҳои худ мефиристем, ҷамъоварӣ мекунад ва онҳоро ба гиреҳҳо равона мекунад. Инчунин дар марҳилаи масир, он дурустии ченакҳоро тафтиш мекунад. Аввалан, онҳо бояд ба схемаи префиксе, ки ман қаблан нишон додам, мувофиқат кунанд ва дуюм, онҳо барои графит эътибор доранд. Дар акси ҳол онҳо меафтанд.

Пас аз он, Carbon-c-relay ченакҳоро ба кластери Графит мефиристад. Мо Carbon-кэшро, ки дар Go аз нав навишта шудааст, ҳамчун анбори асосии метрика истифода мебарем. Go-carbon, аз сабаби чанд риштаи худ, хеле бартарии Carbon-кэш аст. Он маълумотро қабул мекунад ва онро ба дискҳо бо истифода аз бастаи whisper (стандартӣ, ки бо python навишта шудааст) менависад. Барои хондани маълумот аз анборҳои худ, мо API Graphite-ро истифода мебарем. Он нисбат ба стандарти Graphite WEB хеле тезтар аст. Бо маълумот дар оянда чӣ мешавад?

Онҳо ба Графана мераванд. Мо кластерҳои графитҳои худро ҳамчун манбаи асосии маълумот истифода мебарем, инчунин мо Grafana-ро ҳамчун веб-интерфейс барои намоиши метрика ва сохтани панелҳои идоракунӣ дорем. Барои ҳар як хидмати худ, таҳиягарон панели идоракунии худро эҷод мекунанд. Сипас онҳо дар асоси онҳо графикҳо месозанд, ки ченакҳоеро, ки аз замимаҳои худ менависанд, нишон медиҳанд. Илова ба Grafana, мо инчунин SLAM дорем. Ин як деви питон аст, ки SLA-ро дар асоси маълумот аз графит ҳисоб мекунад. Тавре ки ман аллакай гуфтам, мо якчанд даҳҳо микросервис дорем, ки ҳар кадоми онҳо талаботи худро доранд. Бо истифода аз SLAM, мо ба ҳуҷҷатҳо меравем ва онро бо он чизе, ки дар Graphite мавҷуд аст, муқоиса мекунем ва муқоиса мекунем, ки то чӣ андоза талабот ба мавҷудияти хидматҳои мо мувофиқат мекунад.

Биёед минбаъд равем: огоҳӣ. Он бо истифода аз системаи қавӣ - Moira ташкил карда шудааст. Он мустақил аст, зеро он дар зери сарпӯши худ Графити худро дорад. Аз ҷониби бачаҳои SKB "Kontur" таҳия шудааст, ки бо python ва Go навишта шудааст, манбаи комилан кушода. Моира ҳамон ҷараёнеро, ки ба графитҳо меравад, мегирад. Агар бо ягон сабаб захираи шумо бимирад, огоҳии шумо то ҳол кор хоҳад кард.

Мо Moira-ро дар Кубернетес ҷойгир кардем; он кластери серверҳои Redis-ро ҳамчун пойгоҳи асосӣ истифода мебарад. Дар натиҷа системаи ба хатогиҳо тобовар буд. Он ҷараёни ченакҳоро бо рӯйхати триггерҳо муқоиса мекунад: агар дар он зикр нашуда бошад, он ченакро мепартояд. Ҳамин тавр, он метавонад гигабайтҳои метрикаро дар як дақиқа ҳазм кунад.

Мо инчунин ба он LDAP-и корпоративиро замима кардем, ки бо ёрии он ҳар як корбари системаи корпоративӣ метавонад дар асоси триггерҳои мавҷуда (ё навтаъсис) барои худ огоҳинома эҷод кунад. Азбаски Moira дорои графит аст, он ҳама хусусиятҳои онро дастгирӣ мекунад. Пас шумо аввал сатрро гиред ва онро ба Grafana нусхабардорӣ кунед. Бубинед, ки маълумот дар графикҳо чӣ гуна нишон дода мешавад. Ва он гоҳ шумо ҳамон сатрро мегиред ва онро ба Moira нусхабардорӣ мекунед. Шумо онро бо маҳдудият овезон мекунед ва дар баромад огоҳӣ мегиред. Барои ин ҳама ба шумо дониши мушаххас лозим нест. Moira метавонад тавассути SMS, почтаи электронӣ, Jira, Slack ҳушдор диҳад ... Он инчунин иҷрои скриптҳои фармоиширо дастгирӣ мекунад. Вақте ки триггер бо ӯ рӯй медиҳад ва ӯ ба скрипти фармоишӣ ё бинарӣ обуна мешавад, вай онро иҷро мекунад ва JSON-ро ба stdin барои ин бинар мефиристад. Мувофиқи он, барномаи шумо бояд онро таҳлил кунад. Шумо бо ин JSON чӣ кор хоҳед кард, ба шумо вобаста аст. Агар хоҳед, ба Telegram фиристед, агар хоҳед, дар Jira супоришҳо кушоед, ҳар коре кунед.

Мо инчунин таҳияи худро барои огоҳӣ истифода мебарем - Imagotag. Мо панелеро, ки одатан барои тамғаҳои нархҳои электронӣ дар мағозаҳо истифода мешавад, ба ниёзҳои худ мутобиқ кардем. Мо аз Мойра ба он триггерҳо овардем. Он нишон медиҳад, ки онҳо дар кадом ҳолатанд ва кай ба амал омадаанд. Баъзе аз бачаҳои таҳиякунанда огоҳиномаҳоро дар Slack ва почтаи электронӣ ба манфиати ин панел партофтанд.

Мониторинг ҳамчун хидмат: системаи модулӣ барои меъмории микросервис

Хуб, азбаски мо як ширкати пешрафта ҳастем, мо инчунин дар ин система Kubernetes-ро назорат мекардем. Мо онро ба система бо истифода аз Heapster дохил кардем, ки мо онро дар кластер насб кардем, он маълумот ҷамъ мекунад ва ба Graphite мефиристад. Дар натиҷа, диаграмма чунин менамояд:

Мониторинг ҳамчун хидмат: системаи модулӣ барои меъмории микросервис

Компонентҳои мониторинг

Дар ин ҷо рӯйхати истинодҳо ба ҷузъҳое, ки мо барои ин вазифа истифода мебарем. Ҳамаи онҳо манбаи кушода мебошанд.

Графит:

Карбон-с-реле:

github.com/grobian/carbon-c-relay

Брубек:

github.com/github/brubeck

Ҷамъоварӣ:

collectd.org

Моира:

github.com/moira-alert

Графана:

grafana.com

Heapster:

github.com/kubernetes/heapster

Омор

Ва дар ин ҷо баъзе рақамҳо дар бораи он ки система барои мо чӣ гуна кор мекунад.

Агрегатор (брубек)

Шумораи ченакҳо: ~300/с
Фосила барои фиристодани метрика ба Graphite: 30 сония
Истифодаи захираҳои сервер: ~ 6% CPU (мо дар бораи серверҳои мукаммал гап мезанем); ~ 1 Гб RAM; ~3 Mbps LAN

Графит (карбон)

Шумораи ченакҳо: ~ 1/дақ
Фосилаи навсозии метрика: 30 сония
Нақшаи нигоҳдории метрикӣ: 30 сония 35d, 5min 90d, 10min 365d (ба шумо фаҳмиши он медиҳад, ки хидмат дар тӯли муддати тӯлонӣ чӣ мешавад)
Истифодаи захираҳои сервер: ~10% CPU; ~ 20 Гб RAM; ~30 Мбит/с LAN

Интихоби

Мо дар Avito воқеан чандириро дар хидмати мониторинги худ қадр мекунем. Чаро ӯ воқеан чунин рӯй дод? Аввалан, ҷузъҳои он ивазшавандаанд: ҳам худи ҷузъҳо ва ҳам версияҳои онҳо. Дуюм, дастгирӣ. Азбаски тамоми лоиҳа манбаи кушода аст, шумо метавонед рамзро худатон таҳрир кунед, тағирот ворид кунед ва функсияҳоеро, ки аз қуттӣ дастрас нестанд, амалӣ кунед. Стекҳои хеле маъмул истифода мешаванд, асосан Go ва Python, аз ин рӯ ин хеле содда анҷом дода мешавад.

Дар ин ҷо як мисоли мушкилоти воқеӣ аст. Метрик дар Graphite як файл аст. Он ном дорад. Номи файл = номи метрикӣ. Ва роҳи расидан ба он ҷо вуҷуд дорад. Номҳои файлҳо дар Linux бо 255 аломат маҳдуданд. Ва мо (ҳамчун "мизоҷони дохилӣ") бачаҳо аз шӯъбаи пойгоҳи додаҳо дорем. Онҳо ба мо мегӯянд: “Мо мехоҳем дархостҳои SQL-и худро назорат кунем. Ва онҳо на 255 аломат, балки ҳар яки 8 МБ мебошанд. Мо мехоҳем онҳоро дар Grafana намоиш диҳем, параметрҳои ин дархостро бубинем ва ҳатто беҳтараш, мо мехоҳем қисми болоии чунин дархостҳоро бубинем. Ин хеле хуб хоҳад буд, агар он дар вақти воқеӣ намоиш дода шавад. Онҳоро дар ҳушдор додан хеле хуб мебуд. ”

Мониторинг ҳамчун хидмат: системаи модулӣ барои меъмории микросервис
Намунаи дархости SQL ҳамчун намуна аз сайти postgrespro.ru

Мо сервери Redis таъсис медиҳем ва плагинҳои Ҷамъоварии худро истифода мебарем, ки ба Postgres мераванд ва ҳама маълумотро аз он ҷо гирифта, метрикаҳоро ба Graphite мефиристанд. Аммо мо номи метриро бо хэшҳо иваз мекунем. Мо ҳамзамон ҳамон хэшро ба Redis ҳамчун калид ва тамоми дархости SQL ҳамчун арзиш мефиристем. Мо танҳо бояд боварӣ ҳосил кунем, ки Grafana метавонад ба Редис равад ва ин маълумотро гирад. Мо API Graphite-ро мекушоем, зеро... ин интерфейси асосии ҳамкории ҳамаи ҷузъҳои мониторинг бо графит аст ва мо дар он ҷо функсияи наверо ворид мекунем, ки aliasByHash() ном дорад - аз Grafana мо номи метрро мегирем ва онро дар дархост ба Redis ҳамчун калид истифода мебарем. ҷавоб мо арзиши калидро мегирем, ки он "дархости SQL"-и мост " Ҳамин тариқ, мо дар Grafana намоиши дархости SQL-ро намоиш додем, ки дар назария намоиш додани он дар он ҷо ғайриимкон буд ва дар баробари омори он (зангҳо, сатрҳо, вақт_тома, ...).

Натиҷаҳо

Мавҷудият. Хидмати мониторинги мо 24/7 аз ҳама гуна барномаҳо ва кодҳо дастрас аст. Агар шумо ба иншооти нигоҳдорӣ дастрасӣ дошта бошед, шумо метавонед маълумотро ба хидмат нависед. Забон муҳим нест, қарор муҳим нест. Шумо танҳо бояд бидонед, ки розеткаро кушоед, дар он ҷо метрика гузоред ва розеткаро пӯшед.

Боварӣ. Ҳама ҷузъҳо ба камбудиҳо тобоваранд ва бори моро хуб идора мекунанд.

Монеаи пасти вуруд. Барои истифодаи ин система ба шумо лозим нест, ки забонҳои барномасозӣ ва дархостҳоро дар Grafana омӯзед. Танҳо замимаи худро кушоед, ба он розетка ворид кунед, ки метрикаро ба Graphite мефиристад, онро пӯшед, Grafana-ро кушоед, дар он ҷо панелҳои идоракунӣ эҷод кунед ва ба рафтори метрикаи худ нигаред, тавассути Moira огоҳинома гиред.

Истиқлолият. Шумо метавонед ҳамаи инро худатон бе кӯмаки муҳандисони DevOps иҷро кунед. Ва ин як бартарӣ аст, зеро шумо ҳоло метавонед лоиҳаи худро назорат кунед, ба шумо лозим нест, ки аз касе хоҳиш кунед - ё оғоз кардани кор ё ворид кардани тағирот.

Мо чиро максад дорем?

Ҳама чизҳое, ки дар зер оварда шудаанд, на танҳо фикрҳои абстрактӣ, балки чизест, ки ҳадди аққал қадамҳои аввалин гузошта шудаанд.

  1. Детектори аномалия. Мо мехоҳем хидматеро эҷод кунем, ки ба анборҳои Graphite мо равад ва ҳар як метрикаро бо истифода аз алгоритмҳои гуногун тафтиш кунад. Аллакай алгоритмҳое мавҷуданд, ки мо онҳоро дидан мехоҳем, маълумот мавҷуд аст, мо медонем, ки бо он чӣ гуна кор кардан лозим аст.
  2. Метамаълумот. Мо хидматҳои зиёде дорем, онҳо бо мурури замон тағир меёбанд, ба мисли одамоне, ки бо онҳо кор мекунанд. Дастӣ нигоҳ доштани ҳуҷҷатҳо имконнопазир аст. Аз ин рӯ, мо ҳоло метамаълумотро ба хидматрасониҳои микрорайни худ ворид мекунем. Дар он гуфта мешавад, ки онро кӣ таҳия кардааст, забонҳое, ки бо он ҳамкорӣ мекунад, талаботи SLA, огоҳиномаҳо бояд ба куҷо ва ба кӣ фиристода шаванд. Ҳангоми ҷойгиркунии хадамот, ҳама маълумоти объект мустақилона сохта мешаванд. Дар натиҷа, шумо ду истинод мегиред - яке барои триггерҳо, дигаре ба панелҳои идоракунӣ дар Grafana.
  3. Мониторинг дар ҳар хона. Мо боварӣ дорем, ки ҳамаи таҳиягарон бояд чунин системаро истифода баранд. Дар ин ҳолат, шумо ҳамеша мефаҳмед, ки трафики шумо дар куҷост, бо он чӣ мешавад, ба куҷо меафтад, сустиҳои он дар куҷост. Агар, масалан, чизе омада, хидмати шуморо вайрон кунад, шумо дар ин бора на дар вақти занги мудир, балки аз огоҳӣ огоҳ мешавед ва шумо метавонед дарҳол гузоришҳои охиринро кушоед ва бубинед, ки дар он ҷо чӣ рӯй додааст.
  4. Фаъолияти баланд. Лоиҳаи мо пайваста афзоиш меёбад ва имрӯз он дар як дақиқа тақрибан 2 арзиши метриро коркард мекунад. Як сол пеш ин рақам 000 000 буд.Ва афзоиш идома дорад ва ин маънои онро дорад, ки пас аз чанд вақт Графит (пичир-пичир) зерсистемаи дискро сахт бор мекунад. Тавре ки ман аллакай гуфтам, ин системаи мониторинг аз сабаби иваз кардани ҷузъҳо хеле универсалӣ аст. Касе инфрасохтори худро махсус барои Graphite нигоҳ медорад ва пайваста васеъ мекунад, аммо мо тасмим гирифтем, ки роҳи дигарро пеш гирем: истифода кликхона ҳамчун як анбори метрикаи мо. Ин гузариш қариб ба анҷом расидааст ва ба зудӣ ман ба шумо муфассалтар мегӯям, ки ин чӣ гуна анҷом дода шуд: чӣ гуна мушкилот вуҷуд доштанд ва чӣ гуна онҳо бартараф карда шуданд, раванди муҳоҷират чӣ гуна гузашт, ман ҷузъҳои ҳамчун ҳатмӣ интихобшуда ва конфигуратсияҳои онҳоро тавсиф мекунам.

Ба диққататон ташаккур! Саволҳои худро дар ин мавзӯъ пурсед, ман кӯшиш мекунам дар ин ҷо ё дар паёмҳои зерин ҷавоб диҳам. Шояд касе таҷрибаи сохтани як системаи мониторинги шабеҳ ё гузаштан ба Clickhouse дар вазъияти шабеҳ дошта бошад - онро дар шарҳҳо мубодила кунед.

Манбаъ: will.com

Илова Эзоҳ