MÅ«sdienÄs mÅ«su projektÄ papildus monolÄ«tam kodam ir vairÄki desmiti mikropakalpojumu. Katrs no tiem ir jÄuzrauga. To izdarÄ«t Å”ÄdÄ mÄrogÄ, izmantojot DevOps inženierus, ir problemÄtiski. MÄs esam izstrÄdÄjuÅ”i uzraudzÄ«bas sistÄmu, kas darbojas kÄ serviss izstrÄdÄtÄjiem. ViÅi var neatkarÄ«gi ierakstÄ«t metriku uzraudzÄ«bas sistÄmÄ, izmantot tos, veidot informÄcijas paneļus, pamatojoties uz tiem, un pievienot tiem brÄ«dinÄjumus, kas tiks aktivizÄti, kad tiks sasniegtas sliekÅ”Åa vÄrtÄ«bas. DevOps inženieriem tikai infrastruktÅ«ra un dokumentÄcija.
Å is ieraksts ir atÅ”ifrÄjums manai runai ar mÅ«su sadaļas vietnÄ RIT++. Daudzi cilvÄki mums lÅ«dza izveidot ziÅojumu teksta versijas no turienes. Ja bijÄt konferencÄ vai skatÄ«jÄties video, neko jaunu neatradÄ«siet. Un visi pÄrÄjie - laipni lÅ«gti kaÄ·Ä«. Es jums pastÄstÄ«Å”u, kÄ mÄs nonÄcÄm pie Å”Ädas sistÄmas, kÄ tÄ darbojas un kÄ mÄs plÄnojam to atjauninÄt.
PagÄtne: shÄmas un plÄni
KÄ mÄs nonÄcÄm pie paÅ”reizÄjÄs uzraudzÄ«bas sistÄmas? Lai atbildÄtu uz Å”o jautÄjumu, jÄdodas uz 2015. gadu. Toreiz tas izskatÄ«jÄs Å”Ädi:
Mums bija aptuveni 24 mezgli, kas bija atbildÄ«gi par uzraudzÄ«bu. Ir vesela paka dažÄdu kroÅu, skriptu, dÄmonu, kas kaut kÄ kaut ko uzrauga, sÅ«ta ziÅas un pilda funkcijas. DomÄjÄm, jo āātÄlÄk, jo mazÄk dzÄ«votspÄjÄ«ga bÅ«s Å”Äda sistÄma. Nav jÄgas to attÄ«stÄ«t: tas ir pÄrÄk apgrÅ«tinoÅ”i.
NolÄmÄm izvÄlÄties tos monitoringa elementus, kurus paturÄsim un attÄ«stÄ«sim, un tos, no kuriem atteiksimies. To bija 19. Palika tikai grafÄ«ti, agregatori un Grafana kÄ informÄcijas panelis. Bet kÄda bÅ«s jaunÄ sistÄma? KÄ Å”is:
Mums ir metrikas krÄtuve: tie ir grafÄ«ti, kuru pamatÄ bÅ«s Ätri SSD diskdziÅi, tie ir noteikti metriku apkopotÄji. NÄkamais - Grafana informÄcijas paneļu parÄdÄ«Å”anai un Moira brÄ«dinÄÅ”anai. MÄs arÄ« vÄlÄjÄmies izstrÄdÄt sistÄmu anomÄliju meklÄÅ”anai.
Standarts: Monitorings 2.0
Å Ädi plÄni izskatÄ«jÄs 2015. gadÄ. TaÄu mums bija jÄsagatavo ne tikai infrastruktÅ«ra un pats serviss, bet arÄ« dokumentÄcija tam. MÄs esam izstrÄdÄjuÅ”i sev korporatÄ«vo standartu, ko saucam par monitoringu 2.0. KÄdas bija prasÄ«bas sistÄmai?
pastÄvÄ«ga pieejamÄ«ba;
metriku glabÄÅ”anas intervÄls = 10 sekundes;
strukturÄta metrikas un informÄcijas paneļu glabÄÅ”ana;
SLA > 99,99%
notikumu metrikas apkopoŔana, izmantojot UDP (!).
Mums bija nepiecieÅ”ams UDP, jo mums ir liela trafika un notikumu plÅ«sma, kas Ä£enerÄ metriku. Ja tos visus vienlaikus ierakstÄ«sit grafÄ«tÄ, krÄtuve sabruks. MÄs arÄ« izvÄlÄjÄmies pirmÄ lÄ«meÅa prefiksus visiem rÄdÄ«tÄjiem.
Katram no prefiksiem ir kÄds Ä«paÅ”ums. Ir metrika serveriem, tÄ«kliem, konteineriem, resursiem, lietojumprogrammÄm utt. Ir ieviesta skaidra, stingra, drukÄta filtrÄÅ”ana, kurÄ mÄs pieÅemam pirmÄ lÄ«meÅa metriku, bet pÄrÄjos vienkÄrÅ”i atmetam. TÄ mÄs Å”o sistÄmu plÄnojÄm 2015. gadÄ. Kas ir tagadnÄ?
PirmkÄrt, mÄs uzraugÄm lietojumprogrammas: mÅ«su PHP kodu, lietojumprogrammas un mikropakalpojumus - Ä«si sakot, visu, ko raksta mÅ«su izstrÄdÄtÄji. Visas lietojumprogrammas nosÅ«ta metriku, izmantojot UDP, uz Brubeck apkopotÄju (statsd, pÄrrakstÄ«ts C valodÄ). SintÄtikas testos tas izrÄdÄ«jÄs ÄtrÄkais. Un tas nosÅ«ta jau apkopotos rÄdÄ«tÄjus uz Graphite, izmantojot TCP.
Tam ir sava veida metrika, ko sauc par taimeriem. Å Ä« ir ļoti Ärta lieta. PiemÄram, par katru lietotÄja savienojumu ar pakalpojumu Brubeck nosÅ«tÄt metriku ar reakcijas laiku. Tika saÅemts miljons atbilžu, bet apkopotÄjs atgrieza tikai 10 metriku. Jums ir atnÄkuÅ”o cilvÄku skaits, maksimÄlais, minimÄlais un vidÄjais atbildes laiks, mediÄna un 4. procentile. PÄc tam dati tiek pÄrsÅ«tÄ«ti uz Graphite un mÄs to visu redzam tieÅ”raidÄ.
Mums ir arÄ« datu apkopojums par aparatÅ«ru, programmatÅ«ru, sistÄmas metriku un mÅ«su veco Munin uzraudzÄ«bas sistÄmu (tÄ mums darbojÄs lÄ«dz 2015. gadam). MÄs to visu apkopojam, izmantojot C dÄmonu CollectD (tajÄ ir iebÅ«vÄts vesels virkne dažÄdu spraudÅu, tas var aptaujÄt visus resursdatora sistÄmas resursus, kurÄ tas ir instalÄts, tikai konfigurÄcijÄ norÄdiet, kur rakstÄ«t datus) un caur to ierakstiet datus Graphite. Tas atbalsta arÄ« python spraudÅus un Äaulas skriptus, lai jÅ«s varÄtu rakstÄ«t savus pielÄgotos risinÄjumus: CollectD apkopos Å”os datus no vietÄjÄ vai attÄlÄ resursdatora (pieÅemot, ka Curl) un nosÅ«tÄ«s tos Graphite.
PÄc tam mÄs nosÅ«tÄm visus apkopotos rÄdÄ«tÄjus uz Carbon-c-relay. Å is ir Carbon Relay risinÄjums no Graphite, kas modificÄts C valodÄ. Å is ir marÅ”rutÄtÄjs, kas apkopo visus datus, ko mÄs nosÅ«tÄm no mÅ«su apkopotÄjiem, un novirza tos uz mezgliem. ArÄ« marÅ”rutÄÅ”anas posmÄ tÄ pÄrbauda metrikas derÄ«gumu. PirmkÄrt, tiem jÄatbilst prefiksu shÄmai, kuru es parÄdÄ«ju iepriekÅ”, un, otrkÄrt, tie ir derÄ«gi grafÄ«tam. PretÄjÄ gadÄ«jumÄ tie nokritÄ«s.
PÄc tam oglekļa-c-relejs nosÅ«ta metriku uz grafÄ«ta kopu. KÄ galveno metrikas krÄtuvi mÄs izmantojam Carbon-keÅ”atmiÅu, kas ir pÄrrakstÄ«ta programmÄ Go. Go-carbon tÄ daudzpavedienu dÄļ ievÄrojami pÄrspÄj Carbon-keÅ”atmiÅu. Tas saÅem datus un ieraksta tos diskos, izmantojot Äukstu pakotni (standarta, rakstÄ«ts python). Lai nolasÄ«tu datus no mÅ«su krÄtuvÄm, mÄs izmantojam Graphite API. Tas ir daudz ÄtrÄk nekÄ standarta Graphite WEB. Kas notiks ar datiem tÄlÄk?
ViÅi dodas uz GrafÄnu. MÄs izmantojam mÅ«su grafÄ«ta kopas kÄ galveno datu avotu, kÄ arÄ« mums ir Grafana kÄ tÄ«mekļa saskarne metrikas attÄloÅ”anai un informÄcijas paneļu izveidei. Katram pakalpojumam izstrÄdÄtÄji izveido savu informÄcijas paneli. PÄc tam viÅi, pamatojoties uz tiem, veido diagrammas, kurÄs tiek parÄdÄ«ta metrika, ko viÅi raksta no savÄm lietojumprogrammÄm. Papildus Grafana mums ir arÄ« SLAM. Å is ir pitona dÄmons, kas aprÄÄ·ina SLA, pamatojoties uz datiem no grafÄ«ta. KÄ jau teicu, mums ir vairÄki desmiti mikropakalpojumu, no kuriem katram ir savas prasÄ«bas. Izmantojot SLAM, mÄs pÄrejam uz dokumentÄciju un salÄ«dzinÄm to ar Graphite saturu un salÄ«dzinÄm, cik labi prasÄ«bas atbilst mÅ«su pakalpojumu pieejamÄ«bai.
Dosimies tÄlÄk: brÄ«dinÄjums. Tas tiek organizÄts, izmantojot spÄcÄ«gu sistÄmu - Moira. Tas ir neatkarÄ«gs, jo tam zem pÄrsega ir savs grafÄ«ts. IzstrÄdÄjuÅ”i puiÅ”i no SKB "Kontur", rakstÄ«ts python un Go, pilnÄ«bÄ atvÄrtÄ koda valodÄ. Moira saÅem tÄdu paÅ”u plÅ«smu, kas nonÄk grafÄ«tos. Ja kÄda iemesla dÄļ jÅ«su krÄtuve tiek pÄrtraukta, jÅ«su brÄ«dinÄjums joprojÄm darbosies.
MÄs izvietojÄm Moira Kubernetes; tÄ kÄ galveno datu bÄzi izmanto Redis serveru kopu. RezultÄts bija pret defektiem izturÄ«ga sistÄma. Tas salÄ«dzina metrikas straumi ar aktivizÄtÄju sarakstu: ja tajÄ nav pieminÄjumu, metrika tiek noÅemta. TÄtad tas spÄj sagremot gigabaitus metrikas minÅ«tÄ.
Tam pievienojÄm arÄ« korporatÄ«vo LDAP, ar kura palÄ«dzÄ«bu katrs korporatÄ«vÄs sistÄmas lietotÄjs var izveidot sev paziÅojumus, pamatojoties uz esoÅ”ajiem (vai jaunizveidotajiem) trigeriem. TÄ kÄ Moira satur grafÄ«tu, tas atbalsta visas tÄ funkcijas. TÄpÄc vispirms paÅemiet lÄ«niju un iekopÄjiet to Grafana. Skatiet, kÄ dati tiek parÄdÄ«ti grafikos. Un tad jÅ«s paÅemat to paÅ”u rindiÅu un iekopÄjat to MoirÄ. JÅ«s pakÄrt to ar ierobežojumiem un saÅemat brÄ«dinÄjumu pie izejas. Lai to visu izdarÄ«tu, jums nav vajadzÄ«gas Ä«paÅ”as zinÄÅ”anas. Moira var brÄ«dinÄt, izmantojot SMS, e-pastu, Jira, Slack... TÄ atbalsta arÄ« pielÄgotu skriptu izpildi. Kad ar viÅu notiek trigeris un viÅa ir abonÄjusi pielÄgotu skriptu vai binÄru, viÅa to palaiž un nosÅ«ta JSON uz Å”o binÄro failu stdin. AttiecÄ«gi jÅ«su programmai tas ir jÄparsÄ. Tas, ko darÄ«sit ar Å”o JSON, ir atkarÄ«gs no jums. Ja vÄlaties, nosÅ«tiet uz Telegram, ja vÄlaties, atveriet uzdevumus JirÄ, dariet visu.
MÄs arÄ« izmantojam savu izstrÄdÄto brÄ«dinÄjumu - Imagotag. Paneli, ko parasti izmanto elektroniskajÄm cenu zÄ«mÄm veikalos, pielÄgojÄm savÄm vajadzÄ«bÄm. MÄs atvedÄm no Moiras uz to. Tas norÄda, kÄdÄ stÄvoklÄ« tie atrodas un kad tie raduÅ”ies. Daži izstrÄdÄtÄji atteicÄs no paziÅojumiem Slack un e-pasta ziÅojumos par labu Å”im panelim.
Nu tÄ kÄ esam progresÄ«vs uzÅÄmums, tad Kubernetes arÄ« uzraudzÄ«jÄm Å”ajÄ sistÄmÄ. MÄs to iekļÄvÄm sistÄmÄ, izmantojot Heapster, kuru uzstÄdÄ«jÄm klasterÄ«, tas apkopo datus un nosÅ«ta tos uz Graphite. RezultÄtÄ diagramma izskatÄs Å”Ädi:
Uzraudzības komponenti
Å eit ir saraksts ar saitÄm uz komponentiem, kurus izmantojÄm Å”im uzdevumam. Visi no tiem ir atvÄrtÄ koda.
Un Å”eit ir daži skaitļi par to, kÄ sistÄma darbojas mÅ«su labÄ.
ApkopotÄjs (Brubeck)
Metrikas skaits: ~300 000/sek
IntervÄls metrikas nosÅ«tÄ«Å”anai uz Graphite: 30 sek
Servera resursu izmantoÅ”ana: ~ 6% CPU (runa ir par pilnvÄrtÄ«giem serveriem); ~ 1Gb RAM; ~3 Mb/s LAN
Grafīts (ogleklis)
Metrikas skaits: ~ 1 600 000 / min
Metrikas atjauninÄÅ”anas intervÄls: 30 sek
Metrikas glabÄÅ”anas shÄma: 30 s 35 d, 5 min 90 d, 10 min 365 d (nodroÅ”ina izpratni par to, kas notiek ar pakalpojumu ilgÄkÄ laika periodÄ)
Servera resursu lietojums: ~10% CPU; ~ 20Gb RAM; ~30 Mbps LAN
Elastīgums
MÄs, Avito, ļoti novÄrtÄjam mÅ«su uzraudzÄ«bas pakalpojuma elastÄ«bu. KÄpÄc viÅÅ” patiesÄ«bÄ izrÄdÄ«jÄs tÄds? PirmkÄrt, tÄ sastÄvdaļas ir savstarpÄji aizvietojamas: gan paÅ”as sastÄvdaļas, gan to versijas. OtrkÄrt, atbalstÄmÄ«ba. TÄ kÄ viss projekts ir atvÄrtÄ koda avots, varat pats rediÄ£Ät kodu, veikt izmaiÅas un ieviest funkcijas, kas nav pieejamas. Tiek izmantoti diezgan izplatÄ«ti skursteÅi, galvenokÄrt Go un Python, tÄpÄc tas tiek darÄ«ts pavisam vienkÄrÅ”i.
Å eit ir reÄlas problÄmas piemÄrs. Graphite metrika ir fails. Tam ir nosaukums. Faila nosaukums = metrikas nosaukums. Un ir veids, kÄ tur nokļūt. Linux failu nosaukumi ir ierobežoti lÄ«dz 255 rakstzÄ«mÄm. Un mums ir (kÄ āiekÅ”Äjie klientiā) puiÅ”i no datu bÄzes nodaļas. ViÅi mums saka: āMÄs vÄlamies pÄrraudzÄ«t savus SQL vaicÄjumus. Un tie nav 255 rakstzÄ«mes, bet katrs 8 MB. MÄs vÄlamies tos parÄdÄ«t Grafana, redzÄt Ŕī pieprasÄ«juma parametrus un vÄl labÄk, mÄs vÄlamies redzÄt Å”Ädu pieprasÄ«jumu augÅ”Äjo daļu. Tas bÅ«s lieliski, ja tas tiks parÄdÄ«ts reÄllaikÄ. BÅ«tu ļoti forÅ”i viÅus brÄ«dinÄt.
MÄs uzstÄdÄm Redis serveri un izmantojam mÅ«su Collectd spraudÅus, kas nonÄk Postgres un no turienes paÅem visus datus, nosÅ«tot metriku uz Graphite. Bet metrikas nosaukumu mÄs aizstÄjam ar jaucÄjzÄ«mÄm. MÄs vienlaikus nosÅ«tÄm to paÅ”u jaucÄjkodu Redis kÄ atslÄgu un visu SQL vaicÄjumu kÄ vÄrtÄ«bu. Mums tikai jÄpÄrliecinÄs, ka Grafana var doties uz Redisu un paÅemt Å”o informÄciju. MÄs atveram Graphite API, jo... Ŕī ir galvenÄ saskarne visu uzraudzÄ«bas komponentu mijiedarbÄ«bai ar grafÄ«tu, un mÄs tur ievadÄm jaunu funkciju ar nosaukumu aliasByHash() - no Grafana mÄs iegÅ«stam metrikas nosaukumu un izmantojam to pieprasÄ«jumÄ Redis kÄ atslÄgu. atbildÄ mÄs iegÅ«stam atslÄgas vÄrtÄ«bu, kas ir mÅ«su āSQL vaicÄjumsā TÄdÄjÄdi mÄs Grafana parÄdÄ«jÄm SQL vaicÄjuma displeju, kuru teorÄtiski tur nebija iespÄjams parÄdÄ«t, kopÄ ar statistiku par to (zvani, rindas, kopÄjais_laiks, ...).
RezultÄti
PieejamÄ«ba. MÅ«su uzraudzÄ«bas pakalpojums ir pieejams 24/7 no jebkuras lietojumprogrammas un jebkura koda. Ja jums ir piekļuve krÄtuvÄm, varat ierakstÄ«t datus pakalpojumÄ. Valoda nav svarÄ«ga, lÄmumi nav svarÄ«gi. Jums tikai jÄzina, kÄ atvÄrt kontaktligzdu, ievietot tur metriku un aizvÄrt ligzdu.
UzticamÄ«bu. Visas sastÄvdaļas ir izturÄ«gas pret defektiem un labi iztur mÅ«su kravas.
Zema barjera ienÄkÅ”anai. Lai izmantotu Å”o sistÄmu, Grafana nav jÄapgÅ«st programmÄÅ”anas valodas un vaicÄjumi. VienkÄrÅ”i atveriet savu lietojumprogrammu, ievadiet tajÄ ligzdu, kas nosÅ«tÄ«s metriku uz Graphite, aizveriet to, atveriet Grafana, izveidojiet tur informÄcijas paneļus un apskatiet savu metrikas darbÄ«bu, saÅemot paziÅojumus, izmantojot Moira.
NeatkarÄ«ba. To visu varat izdarÄ«t pats, neizmantojot DevOps inženieru palÄ«dzÄ«bu. Un tÄ ir priekÅ”rocÄ«ba, jo jÅ«s varat uzraudzÄ«t savu projektu jau tagad, jums nav nevienam jÄlÅ«dz - ne sÄkt darbu, ne veikt izmaiÅas.
Uz ko mÄs tiecamies?
Viss, kas uzskaitÄ«ts zemÄk, nav tikai abstraktas domas, bet gan kaut kas, uz ko ir sperti vismaz pirmie soļi.
AnomÄliju detektors. MÄs vÄlamies izveidot pakalpojumu, kas nonÄks mÅ«su grafÄ«ta krÄtuvÄs un pÄrbaudÄ«s katru metriku, izmantojot dažÄdus algoritmus. Jau ir algoritmi, kurus gribam apskatÄ«t, ir dati, mÄs zinÄm, kÄ ar tiem strÄdÄt.
Metadati. Mums ir daudz pakalpojumu, tie laika gaitÄ mainÄs, tÄpat kÄ cilvÄki, kas ar tiem strÄdÄ. PastÄvÄ«ga dokumentÄcijas manuÄla uzturÄÅ”ana nav risinÄjums. TÄpÄc tagad savos mikropakalpojumos ievietojam metadatus. TajÄ ir norÄdÄ«ts, kas to izstrÄdÄjis, valodas, ar kurÄm tas mijiedarbojas, SLA prasÄ«bas, kur un kam jÄnosÅ«ta paziÅojumi. Izvietojot pakalpojumu, visi entÄ«tijas dati tiek izveidoti neatkarÄ«gi. RezultÄtÄ jÅ«s saÅemat divas saites ā vienu uz aktivizÄtÄjiem, otru ā uz Grafana informÄcijas paneļiem.
UzraudzÄ«ba katrÄ mÄjÄ. MÄs uzskatÄm, ka visiem izstrÄdÄtÄjiem ir jÄizmanto Å”Äda sistÄma. Å ajÄ gadÄ«jumÄ jÅ«s vienmÄr saprotat, kur atrodas jÅ«su satiksme, kas ar to notiek, kur tÄ krÄ«t, kur ir tÄs vÄjÄs vietas. Ja, piemÄram, kaut kas atnÄk un avarÄ jÅ«su pakalpojumu, tad par to uzzinÄsiet nevis pÄrziÅa zvana laikÄ, bet gan brÄ«dinÄjuma laikÄ, un uzreiz varÄsiet atvÄrt jaunÄkos žurnÄlus un redzÄt, kas tur noticis.
Augsta veiktspÄja. MÅ«su projekts pastÄvÄ«gi attÄ«stÄs, un Å”odien tas apstrÄdÄ aptuveni 2 000 000 metriskÄs vÄrtÄ«bas minÅ«tÄ. Pirms gada Å”is skaitlis bija 500 000. Un izaugsme turpinÄs, un tas nozÄ«mÄ, ka pÄc kÄda laika GrafÄ«ts (Äuksts) sÄks smagi noslogot diska apakÅ”sistÄmu. KÄ jau teicu, Ŕī uzraudzÄ«bas sistÄma ir diezgan universÄla, pateicoties komponentu savstarpÄjai aizvietojamÄ«bai. KÄds uztur un pastÄvÄ«gi paplaÅ”ina savu infrastruktÅ«ru tieÅ”i Graphite, taÄu mÄs nolÄmÄm iet citu ceļu: izmantot NoklikŔķiniet uz MÄja kÄ mÅ«su metrikas krÄtuve. Å Ä« pÄreja ir gandrÄ«z pabeigta, un pavisam drÄ«z es jums pastÄstÄ«Å”u sÄ«kÄk, kÄ tas tika izdarÄ«ts: kÄdas grÅ«tÄ«bas bija un kÄ tÄs tika pÄrvarÄtas, kÄ noritÄja migrÄcijas process, aprakstÄ«Å”u kÄ saistoÅ”os izvÄlÄtos komponentus un to konfigurÄcijas.
Paldies par jÅ«su uzmanÄ«bu! Uzdodiet savus jautÄjumus par tÄmu, es mÄÄ£inÄÅ”u atbildÄt Å”eit vai turpmÄkajos ierakstos. VarbÅ«t kÄdam ir pieredze lÄ«dzÄ«gas uzraudzÄ«bas sistÄmas veidoÅ”anÄ vai lÄ«dzÄ«gÄ situÄcijÄ pÄrejot uz Clickhouse - padalieties komentÄros.