HĂ€vitav jĂ€lgimine? — Elagu jĂ€lgimine

HĂ€vitav jĂ€lgimine? — Elagu jĂ€lgimine

Meie ettevĂ”te on alates 2008. aastast peamiselt infrastruktuuri haldamise ja veebiprojektide ööpĂ€evaringsse tehnilise toe pakkumisega. Meil on ĂŒle 400 kliendi, mis moodustab umbes 15% Venemaa e-kaubandusest. Seega on meie toetuses vĂ€ga mitmekesine arhitektuur. Kui midagi lĂ€heb katki, peame selle 15 minuti jooksul parandama. Kuid avarii toimumise mĂ”istmiseks tuleb projekti jĂ€lgida ja sĂŒndmustele reageerida. Kuidas seda teha?

Arvan, et korraliku monitooringusĂŒsteemi loomisel tekib probleem. Kui probleemi ei oleks, koosneks mu ettekanne ĂŒhest vĂ€itest: "Palun installige Prometheus + Grafana ja pistikprogrammid 1, 2, 3." Kahjuks ei toimi see enam nii. Peamine probleem on see, et kĂ”ik usuvad endiselt millessegi, mis eksisteeris 2008. aastal, tarkvarakomponentide osas.

MonitooringusĂŒsteemi korraldamise osas julgen öelda, et... Ă”igesti monitooritud projekte ei eksisteeri. Ja olukord on nii halb, et kui midagi kukub, on oht, et see jÀÀb mĂ€rkamata — kĂ”ik usuvad ju, et "kĂ”ike monitooritakse".
VÔib-olla monitooritakse kÔike. Aga kuidas?

Me kĂ”ik oleme kokku puutunud jĂ€rgmise looga: töötab ĂŒks devops, ĂŒks admin, ja neile tuleb arendajate meeskond ja ĂŒtleb — "me oleme vĂ€lja andnud, nĂŒĂŒd monitoorige." Mida monitoorida? Kuidas see töötab?

Okei. Monitoorime vanaviisi. Ja see juba muutub ning selgub, et olete monitoorinud teenust A, mis on muutunud teenuseks B, mis suhtleb teenusega C. Aga arendajate meeskond ĂŒtleb: "Pane tarkvara paigaldama, see peaks ju kĂ”ik monitoorima!"

Mis siis muutus? — KĂ”ik muutus!

2008. aasta. KÔik on suurepÀrane.

On paar arendajat, ĂŒks server, ĂŒks andmebaasi server. Sealt see kĂ”ik algab. Meil on mingid andmed, paigaldame zabbixi, Nagios’e, cacti. Ja siis seadistame arusaadavad hĂ€ired CPU, ketaste töö ja ketaste kohta. Teeme veel paar kĂ€sitsi kontrolli, et veebisaidi vastus oleks olemas, et tellimused jĂ”uavad andmebaasi. Ja kĂ”ik – oleme enam-vĂ€hem kaitstud.

Kui vÔrrelda töömahu ulatust, mida toona tegi admin, et tagada jÀlgimise toimimine, siis 98% sellest oli automaatne: inimene, kes tegeleb jÀlgimisega, peab mÔistma, kuidas Zabbix paigaldada, kuidas seda seadistada ja seadistada teatised. Ja 2% - need on vÀlised kontrollid: kas sait vastab ja teeb pÀringu andmebaasi, kas uued tellimused on saabunud.

HĂ€vitav jĂ€lgimine? — Elagu jĂ€lgimine

2010. aasta. Koormus kasvab

Alustame veebide skaleerimist, lisame otsimootori. Me tahame olla kindlad, et toote kataloog sisaldab kĂ”iki tooteid. Ja et toodete otsimine töötab. Et andmebaas töötab, et tellimused tehakse, et sait vastab vĂ€ljastpoolt ja vastab kahest serverid ja kasutaja ei visata veebisaidilt vĂ€lja, kuni ta on teisele serverile ĂŒmber tasakaalustatud, jne. Oluliste elementide arv kasvab.

Samas seondub infrastruktuuriga seotud element endiselt enim juhataja peas. Ikka on peas idee, et inimene, kes tegeleb jÀlgimisega, on see, kes paneb Zabbixi paigaldama ja suudab seda seadistada.

Aga samas tekivad tĂ¶Ă¶ĂŒlesanded vĂ€liste kontrollide lĂ€biviimiseks, otsimootori indekseerimise pĂ€ringute skriptide komplekti loomine, skriptide komplekti loomiseks, et kontrollida, et otsing muutub indekseerimise kĂ€igus, skriptide komplekti, mis kontrollivad, et tarneteenusele edastatakse tooted jne.

HĂ€vitav jĂ€lgimine? — Elagu jĂ€lgimine

Pane tÀhele: ma olen kolm korda kirjutanud «skriptide komplekt». Seega on vastutav jÀlgimise eest enam mitte see, kes lihtsalt paigaldab Zabbixi. See on inimene, kes hakkab kodeerima. Kuid meeskonna peas ei muutu veel midagi.

KĂŒll aga maailm muutub, keerukamaks minnes. Lisandub virtualiseerimistasand, mitu uut sĂŒsteemi. Need hakkavad omavahel suhtlema. Kes ĂŒtles, et «mikroteenuste lĂ”hn hakkab olema?» Kuid iga teenus nĂ€eb ikkagi eraldiseisvana vĂ€lja nagu veebisait. Me saame sellele pöörduda ja mĂ”ista, et see annab vajalikku teavet ja töötab ning kui oled admin, kes pidevalt tegeleb projektiga, mis on arenenud 5-7-10 aastat, siis need teadmised kogunevad: ilmub uus tase - sa oled selle tunnetanud, ilmub veel ĂŒks tase - sa oled selle tunnetanud...

HĂ€vitav jĂ€lgimine? — Elagu jĂ€lgimine

Aga harva, kui keegi toetab projekti 10 aastat.

JÀlgimise spetsialisti kokkuvÔte

Oletame, et olete tulnud uude idufirmasse, kus on kohe 20 arendajat ja 15 mikrosĂŒsteemi, ning teie roll on administraator, kellele öeldakse: "Ehita CI/CD. Paluuuuun." Te ehitasite CI/CD ja Ă€kki kuulete: "Meil on keeruline töötada tootmises 'konteineris', teadmata, kuidas seal rakendus töötab. Tee meile liivakast samasse 'konteinerisse'."
Te loote selle liivakasti selle konteineri sees. Teile öeldakse kohe: "Me tahame etappidatabelit, mis iga pÀev uuendatakse tootmisest, et mÔista, et see töötab andmebaasis, kuid et samal ajal mitte rikkuda tootmisandmebaasi."

Te elate selle kĂ”ik. Rilis on jÀÀnud 2 nĂ€dalat, teile öeldakse: "NĂŒĂŒd peaksime selle kĂ”ik jĂ€lgima
" St. jĂ€lgida klastrite infrastruktuuri, jĂ€lgida mikrosĂŒsteemide arhitektuuri, jĂ€lgida koostööd vĂ€liste teenustega


Kolleegid toovad vĂ€lja harjumuspĂ€rase skeemi ja ĂŒtlevad: "Siin on ju kĂ”ik selge! Installi programm, mis seda kĂ”ike jĂ€lgib." Jah, jah: Prometheus + Grafana + pluginad.
Ja lisavad samal ajal: "Sul on kaks nÀdalat, tee nii, et kÔik oleks usaldusvÀÀrne."

Paljude projektide puhul, mida me nĂ€eme, on jĂ€lgimiseks mÀÀratud ĂŒks inimene. Kujutage ette, et me tahame kaheks nĂ€dalaks palgata inimese, kes tegeleks jĂ€lgimisega, ja koostame talle CV. Milliseid oskusi peaks sellel inimesel olema, kui arvestada kĂ”ike, mida me varem ĂŒtlesime?

  • Ta peab mĂ”istma jĂ€lgimist ja ĆŸelee infrastruktuuri tööd.
  • Ta peab mĂ”istma Kubernetes'i jĂ€lgimise spetsiifikat (kĂ”ik tahavad 'konteinerisse', sest seal on vĂ”imalik kĂ”igest eristuda, peituda, et ĂŒlejÀÀnud lahendab administraator) — selle iseenesest, selle infrastruktuuri ning mĂ”istma, kuidas rakendusi seal sees jĂ€lgida.
  • Ta peab mĂ”istma, et teenused suhtlevad spetsiaalsete viisidega ja teadma teenuste omavahelise suhtluse spetsiifikat. On tĂ€iesti realistlik nĂ€ha projekti, kus osa teenustest suhtleb sĂŒnkroonselt, sest teisiti ei saa. NĂ€iteks backend lĂ€heb REST-i kaudu, gRPC kaudu katalooge teenusele, saab toote nimekirja ja toob tagasi. Siin ei saa oodata. Ja teiste teenustega töötab ta asĂŒnkroonselt. Edastada tellimus kullerteenusele, saata kiri jne.
    Te olete kindlasti juba kÔigest sellest segaduses? Aga administraator, kellel on vaja seda jÀlgida, on veel rohkem segaduses.
  • Ta peab oskama Ă”igesti planeerida, kuna tööd on ĂŒha rohkem.
  • SeetĂ”ttu peab ta looma strateegia loodud teenuse jaoks, et mĂ”ista, kuidas seda konkreetselt monitoorida. Tal peab olema arusaam projekti arhitektuurist ja selle arengust ning tehnoloogiatest, mida arenduses kasutatakse.

Kujutame ette tĂ€iesti tavalist juhtumit: osa teenuseid on php-s, osa teenuseid on Go-s, osa teenuseid on JS-is. Need toimivad omavahel mingil moel. Sealt tuleneb ka termin "mikroteenus": eraldi sĂŒsteeme on nii palju, et arendajad ei suuda projekti tervikuna mĂ”ista. Üks meeskonna osa kirjutab JS teenuseid, mis töötavad iseseisvalt ja ei tea, kuidas ĂŒlejÀÀnud sĂŒsteem töötab. Teine osa kirjutab teenuseid Pythonis ja ei sekku teiste teenuste toimimisse, nad on isoleeritud oma valdkonnas. Kolmas kirjutab teenuseid php-s vĂ”i mĂ”nes muus keeles.
KĂ”ik need 20 inimest on jagatud 15 teenuse vahel ja ainult ĂŒks admin, kes peab kogu seda mĂ”istma. Peatus! Me just jagasime sĂŒsteemi 15 mikroteenuseks, kuna 20 inimest ei suuda kogu sĂŒsteemi mĂ”ista.

Kuid seda tuleb kuidagi monitoorida...

Mis on tulemus? Tulemus on see, et on ĂŒks inimene, kelle pĂ€he mahub kĂ”ik see, mida terve arendajate tiim ei suuda mĂ”ista, ja samas peab ta teadma ja oskama ka seda, mida me ĂŒlal oleme maininud — riistvara infrastruktuuri, Kubernetes'e infrastruktuuri jne.

Mida siin öelda... Houston, meil on probleem.

Kaasaegse tarkvaraprojekti monitoorimine on iseenesest tarkvaraprojekt.

Valeusku, et monitoorimine on tarkvara, tekitab meis usu imelistesse asjadesse. Kahjuks imesid ei juhtu. Ei saa lihtsalt paigaldada zabbixi ja loota, et kĂ”ik töötab. Pole mĂ”tet paigaldada Grafanat ja loota, et kĂ”ik lĂ€heb hĂ€sti. Suur osa ajast lĂ€heb teenuste töö ja nende omavahelise tegevuse kontrollimise korraldamisele ning vĂ€liste sĂŒsteemide töö kontrollimisele. Tegelikult kulub 90% ajast mitte skriptide kirjutamisele, vaid tarkvaraarendusele. Sellega peaks tegelema meeskond, kes mĂ”istab projekti toimimist.
Kui selle olukorra juures panna ĂŒks inimene monitooringule, siis juhtub katastroof. Just see toimubki laialdaselt.

NÀiteks on mitmeid teenuseid, mis suhtlevad omavahel lÀbi Kafka. Tuli tellimus, saatsime tellimusteate Kafka'sse. On teenus, mis kuulab tellimusteavet ja korraldab kauba kohaletoimetamise. On teenus, mis kuulab tellimusteavet ja saadab kasutajale kirja. Siis ilmub palju teisi teenuseid ja me hakkame segadusse minema.

Ent kui annate selle administraatorile ja arendajatele etapis, kui avaldamiseni on jÀÀnud vĂ€he aega, peab inimene kogu selle protokolli mĂ”istma. See tĂ€hendab, et sellise ulatusega projekti jaoks kulub mĂ€rkimisvÀÀrselt aega ning sĂŒsteemi arendamisel peab see olema ette nĂ€htud.
Kuid vĂ€ga sageli, eriti tulekahjude korral, nĂ€eme idufirmade puhul, et jĂ€lgimine lĂŒkatakse edasi. "Praegu teeme Proof of Concept'i, kĂ€ivitame selle, lasta tal kukkuda - me oleme valmis ohverdama. Aja jooksul teeme kĂ”ik selle jĂ€lgimise." Kui (vĂ”i kui) projekt hakkab raha teenima, soovib Ă€ri rakendada veel rohkem funktsioone — sest see on hakanud toimima, seega tuleks edasi arendada! Ja olete hetkes, kus alguses tuleb jĂ€lgida kogu eelnevat, mis ei vĂ”ta 1% ajast, vaid mĂ€rkimisvÀÀrselt rohkem. Ja muide, jĂ€lgimiseks on vaja arendajaid, kuid neid on lihtsam suunata uutele funktsioonidele. LĂ”puks kirjutatakse uued funktsioonid, kĂ”ik arendatakse ja olete lĂ”putus ummikus.

Kuidas jÀlgida projekti alates algusest ja mida teha, kui teile on antud projekt, mida tuleb jÀlgida, ja te ei tea, kust alustada?

Esiteks tuleb planeerida.

LĂŒhiĂŒlevaade: vĂ€ga sageli alustatakse infrastruktuuri jĂ€lgimisest. NĂ€iteks on meil Kubernetes. Alustame sellega, et paigaldame Prometheuse koos Grafanaga, paigaldame "kubiku" jĂ€lgimise pluginaid. Mitte ainult arendajatel, vaid ka administraatoritel on kurb praktika: "Me paigaldame selle plugina, ja plugin tegelikult teab, kuidas seda teha." Inimesed armastavad alustada lihtsatest ja arusaadavatest asjadest, mitte olulistest tegevustest. Ja infrastruktuuri jĂ€lgimine on lihtsalt.

Alustuseks otsustage, mida ja kuidas soovite jĂ€lgida, ja seejĂ€rel valige tööriist, sest teised inimesed ei saa teie eest mĂ”elda. Ja kas peaksidki? Teised inimesed mĂ”tlesid enda peale, universaalsele sĂŒsteemile — vĂ”i ei mĂ”elnud ĂŒldse, kui seda pistikut kirjutati. Ja et sellel pistikul on 5000 kasutajat, ei tĂ€henda, et see toob mingit kasu. VĂ”ib-olla saate te 5001-ks lihtsalt seetĂ”ttu, et seal oli juba 5000 inimest.

Kui olete hakanud jĂ€lgima oma rakenduse infrastruktuuri ja backend enam ei tööta, kaotavad kĂ”ik kasutajad ĂŒhenduse mobiilirakendusega. Tuleb viga. Teie juurde tullakse ja öeldakse: „Rakendus ei tööta, mille kallal te töötate?” — „Me jĂ€lgime.” — „Kuidas te jĂ€lgite, kui ei nĂ€e, et rakendus ei tööta?!“

  1. Minu arvates tuleks jĂ€lgimisega alustada kasutaja sisenemispunktist. Kui kasutaja ei nĂ€e, et rakendus töötab — on kĂ”ik, see on ebaĂ”nnestumine. Ja jĂ€lgimissĂŒsteem peaks sellest esimesena hoiatama.
  2. Ja alles siis saame infrastruktuuri jĂ€lgida. VĂ”i teha seda paralleelselt. Infrastruktuuriga on lihtsam — siin saame lĂ”puks lihtsalt paigaldada Zabbixi.
  3. Ja nĂŒĂŒd tuleb minna rakenduse juurtel, et mĂ”ista, kus miski ei toimi.

Minu peamine mĂ”te on, et jĂ€lgimine peab kĂ€ima paralleelselt arendusprotsessiga. Kui eemaldate jĂ€lgimismeeskonna teistesse ĂŒlesannetesse (CI/CD loomine, liivakasti loomine, infrastruktuuri ĂŒmberkorraldamine), hakkab jĂ€lgimine maha jÀÀma ja vĂ”ib-olla ei jĂ”ua te enam kunagi arendustele jĂ€rgi (vĂ”i peate kas varakult arenduse peatama).

KÔik tasemete kaupa

Nii nĂ€en ma jĂ€lgimissĂŒsteemi korraldamist.

1) Rakenduse tase:

  • jĂ€lgimine rakenduse Ă€riloo puhul;
  • teenuste tervise meetrikate jĂ€lgimine;
  • integratsioonijĂ€lgimine.

2) Infrastruktuuri tase:

  • orkestreerimise taseme jĂ€lgimine;
  • sĂŒsteemi tarkvara jĂ€lgimine;
  • doonori taseme jĂ€lgimine.

3) JĂ€lle rakenduse tase — aga juba inseneritootena:

  • rakenduse logide kogumine ja jĂ€lgimine;
  • APM;
  • tracing.

4) Alerteerimine:

  • hoiatamissĂŒsteemi korraldamine;
  • vahtkonna korraldamine;
  • „teadmistebaasi” ja intsidendi töötlemise töövoo korraldamine.

Oluline: me jĂ”uame jĂ€lgimise juurde mitte pĂ€rast, vaid kohe! Ei ole vaja kĂ€ivitada jĂ€lgimist ja «kuidas iganes hiljem» vĂ€lja mĂ”elda, kellele hĂ€iret teated saadetakse. Sest jĂ€lgimise ĂŒlesanne on aru saada, kus sĂŒsteemis midagi ei toimi, ja teavitada sellest Ă”igeid inimesi. Kui see jĂ€tta viimasele hetkele, saavad Ă”iged inimesed teada, et midagi on valesti, alles siis, kui telefon heliseb: «meil ei tööta mitte miski».

Rakenduse tase — Ă€riloogika jĂ€lgimine

Siin on jutt selle kohta, et kontrollitakse, kas rakendus töötab kasutaja jaoks.

See tase peaks olema loodud arendamise etapis. NĂ€iteks, meil on harilik Prometheus: ta lĂ€heb serverisse, mis tegeleb kontrollidega, kutsub endpoint’i, ja endpoint lĂ€heb ja kontrollib API-d.

Kui sageli palutakse jÀlgida avalehte, et veenduda, et sait töötab, siis programmeerijad annavad nuppu, mida saab kutsuda igal korral, kui on vaja veenduda, et API töötab. Samal ajal kirjutavad programmeerijad ka /api/test/helloworld.
Kas ainus viis veenduda, et kĂ”ik töötab? — Ei!

  • Selliste kontrollide loomine on pĂ”himĂ”tteliselt arendajate ĂŒlesanne. Üksuskatseid peaksid kirjutama programmeerijad, kes kirjutavad koodi. Sest kui sa anname selle administraatorile: «Kutt, siin on sulle kĂ”igi 25 funktsiooni API protokollide nimekiri, palun jĂ€lgi kĂ”ike!» — siis ei juhtu mitte midagi.
  • Kui teete print “hello world”, ei saa keegi kunagi teada, et API peaks ja tĂ”esti töötab. Iga API muutus peaks endaga kaasa tooma muutuse kontrollides.
  • Kui teil on juba selline probleem – peatage funktsioonid ja eraldage arendajad, kes need kontrollid kirjutavad, vĂ”i leppige kaotustega, leppige, et mitte midagi ei kontrollita ja see hakkab alla kukkuma.

Tehnilised nÔuanded:

  • Kohustuslik on korraldada vĂ€line server kontrollide korraldamiseks — peate olema kindel, et teie projekt on vĂ€lismaailmale ligipÀÀsetav.
  • Korraldage kontroll kogu API protokolli ulatuses, mitte ainult ĂŒksikute endpoint'e osas.
  • Looge prometheus-endpoint kontrollide tulemustega.

Rakenduse tase — tervise meetrikate jĂ€lgimine

NĂŒĂŒd on jutt vĂ€liste teenuste tervise meetrikatest.

Me otsustasime, et igasuguseid rakenduse „nuppe” jĂ€lgime vĂ€liste kontrollide abil, mida kutsume esile vĂ€lisest jĂ€lgimisse sĂŒsteemist. Kuid need on just need „nupud”, mida kasutaja nĂ€eb. Me soovime olla kindlad, et meie teenused töötavad. Siin on lugu parem: K8s sisaldab tervisekontrolle, et vĂ€hemalt „kuubik” veenduks, et teenus töötab. Kuid pooltest kontrollidest, mida olen nĂ€inud, on sama print „hello world”. See tĂ€hendab, et ta kutsub seda pĂ€rast juurutamist kord, vastus on, et kĂ”ik on korras – ja ongi kĂ”ik. Kui teenus vĂ€ljastab oma API-d REST-i kaudu, on tal tohutult sisenemiskohti selle API juurde, mida samuti tuleb jĂ€lgida, sest me tahame teada, et see töötab. Ja me jĂ€lgime seda juba seespidiselt.

Kuidas seda Ôigesti tehniliselt rakendada: iga teenus esitleb oma tööolekut endpointina ning Grafana (vÔi mÔne muu rakenduse) graafikutes nÀeme kÔikide teenuste staatust.

  • Iga API muudatus peaks kaasa tooma kontrollide muutmise.
  • Uuendage uusi teenuseid kohe tervise mÔÔdikute lisamisega.
  • Administraator vĂ”ib minna arendajate juurde ja paluda "lisage paar funktsiooni, et ma saaksin kĂ”ik aru ja oma jĂ€lgimisse sĂŒsteemi selle info lisada." Kuid arendajad vastavad tavaliselt: "Kaks nĂ€dalat enne vĂ€ljundit me midagi lisama ei hakka."
    Las arendajate juhid teavad, et selliseid kaotusi tuleb, las arendajate juhtkond samuti teab. Sest kui kĂ”ik kokku kukub, helistab keegi kindlasti ja nĂ”uab, et „ pidevalt kokku kukkuvat teenust” jĂ€lgitaks (c)
  • Muide, eraldage arendajad Grafana pluginate kirjutamiseks - see on administreerijatele hea abi.

Rakenduse tase - Integreerimise jÀlgimine

Integreerimise jĂ€lgimine keskendub kriitiliste Ă€risĂŒsteemide vahelise suhtluse jĂ€lgimisele.

NÀiteks on 15 teenust, mis suhtlevad omavahel. Need ei ole enam eraldiseisvad veebisaidid. St me ei saa kummagi teenuse juurde minna, saada /helloworld ja aru saada, et teenus töötab. Sest tellimuse vormistamise veebiteenus peab saatma tellimuste info bussile - bussist peab lao teenus saama selle sÔnumi ja seda edaspidiselt töötlema. E-kirjade saatmise teenus peab seda kuidagi edasi töötlema jne.

Seega me ei saa aru, klÔpsates iga eraldi teenuse peale, et see kÔik töötab. Sest meil on mingi bussi, mille kaudu kÔik suhtleb ja interakteerub.
SeetĂ”ttu peab see etapp tĂ€histama teenuste testimise etappi teiste teenustega suhtlemisel. Ei saa lihtsalt jĂ€lgida sĂ”numite vahendajat ja korraldada suhtluse jĂ€lgimist. Kui on teenus, mis edastab andmeid, ja teenus, mis neid vastu vĂ”tab, siis jĂ€lgides vahendajat nĂ€eme vaid andmeid, mis liiguvad edasi-tagasi. Isegi kui me kuidagi suudame jĂ€lgida nende andmete interaktsiooni, — et mingi tootja postitab andmed, keegi loeb need, see voog jĂ€tkab liiklemist Kafka'sse — ei anna see meile ikkagi teavet, kui ĂŒks teenus edastas sĂ”numi ĂŒhes versioonis, aga teine teenus ei oodanud seda versiooni ja jĂ€ttis selle vahele. Me ei saa sellest teada, kuna teenused ĂŒtlevad meile, et kĂ”ik töötab.

Kuidas ma soovitan tegutseda:

  • SĂŒnkroonses suhtluses: lĂ”pp-punkt esitab pĂ€ringud seotud teenustele. Ehk vĂ”tame selle lĂ”pp-punkti, kĂ€ivitame skripti teenuses, mis lĂ€bib kĂ”ik punktid ja ĂŒtleb: „ma saan seal tĂ”mmata ja seal tĂ”mmata, saan seal tĂ”mmata...“
  • AsĂŒnkroonses suhtluses: sissetulevad sĂ”numid — lĂ”pp-punkt kontrollib bussi, et leida test-sĂ”numeid ja annab töötlemise staatuse.
  • AsĂŒnkroonses suhtluses: vĂ€ljaminevad sĂ”numid — lĂ”pp-punkt saadab bussile test-sĂ”numid.

Kuidas tavaliselt toimub: meil on teenus, mis viskab andmeid bussi. Me tuleme sellesse teenusesse ja palume rÀÀkida tema integratsioonilisest tervisest. Ja kui teenus peab edastama mingi sĂ”num edasi (WebApp), siis ta edastab selle test-sĂ”numi. Ja kui me tĂ”mbame teenust tellimuste töötlemise poole, siis ta kĂ”igepealt postitab seda, mida ta saab postitada sĂ”ltumatult, ja kui on mingeid sĂ”ltuvaid asju — siis ta loeb bussist komplekti test-sĂ”numeid, mĂ”istab, mida ta saab töödelda, teatab sellest ja kui vaja, postitab neid edasi ning ĂŒtleb selle kohta — kĂ”ik on korras, ma olen elus.

Sageli kuuleme kĂŒsimust "kuidas me saame seda testida tootmisandmetega?" NĂ€iteks rÀÀgime samast tellimuste teenusest. Tellimus saadab sĂ”numeid laosse, kus tooted kirjutatakse maha: me ei saa seda testida tootmisandmetega, sest „mul hakkavad tooted maha kandma!" Lahendus: planeerige see test algfaasis. Teil on ju olemas unit-testid, mis teevad mock'e. Seega, tehke seda sĂŒgavamal tasemel, kus teil on suhtluskanal, mis ei kahjusta Ă€ri toimimist.

Infrastruktuuri tase

Infrastruktuuri jÀlgimine on asi, mis on juba ammu mÀÀratletud kui tÔeline jÀlgimine.

  • Infrastruktuuri jĂ€lgimist saab ja tuleb alustada kui eraldi protsessi.
  • Ärge alustage infrastruktuuri jĂ€lgimist töötaval projektil, isegi kui see on vĂ€ga soovitud. See on probleem, millega kĂ”ik DevOps'i spetsialistid silmitsi seisavad. "Esiteks jĂ€lgin klastrit, jĂ€lgin infrastruktuuri" – see tĂ€hendab, et ta jĂ€lgib kĂ”ige madalamat taset, aga rakendusse ei tungi. Sest rakendus on DevOps'ile arusaamatu asi. Selle on talle edastatud, ja ta ei mĂ”ista, kuidas see töötab. Kuid ta mĂ”istab infrastruktuuri ja alustab sealt. Aga ei — alati tuleks kĂ”igepealt jĂ€lgida rakendust.
  • Ärge liialdage teavituste arvuga. Arvestades kaasaegsete sĂŒsteemide keerukust, lendavad teavitused pidevalt ja selle hulga teavitustega tuleb kuidagi elada. Ja inimene, kes on valmis reageerima, vaatab sada jĂ€rgmist teavitust ja otsustab, et "ma ei taha selle ĂŒle mĂ”elda". Teavitused peaksid teavitama ainult kriitilistest asjadest.

Rakenduse tase kui Ă€riĂŒksus

Olulised punktid:

  • ELK. See on tööstusstandardi mÀÀratlemine. Kui mingil pĂ”hjusel te ei kogu logisid, alustage selle tegemist kohe.
  • APM. VĂ€limised APM-id kiireks rakenduse jĂ€lgimise katmiseks (NewRelic, BlackFire, Datadog). Saate selle asja ajutiselt paigaldada, et natuke aru saada, mis teil toimub.
  • JĂ€lgimine. KĂŒmnetes mikroteenustes peate jĂ€lgima kĂ”ike, sest pĂ€ring ei ela enam iseseisvalt. Hiljem juurde lisamine on vĂ€ga keeruline, seega on parem kavandada jĂ€lgimine arenduses kohe — see on arendajate töö ja tööriist. Kui pole veel rakendanud - rakendage! Vaadake Jaeger/Zipkin

Teavitamine

  • TeavitussĂŒsteemi loomine: jĂ€lgimise tingimustes peab olema ĂŒhtne teavitussĂŒsteem. Grafanas on see vĂ”imalik. LÀÀnes kasutatakse kĂ”ikjal PagerDuty'd. Teated peavad olema arusaadavad (nĂ€iteks, kust nad tulid
). Ja on soovitatav kontrollida, et teated tĂ”epoolest kohale jĂ”uavad.
  • Vahetuste sĂŒsteemi loomine: hĂ€ired ei tohiks tulla kĂ”igile (muud moodi reageerivad kĂ”ik koos vĂ”i ei reageeri keegi). Vahetuse ajal peavad olema ka arendajad: mÀÀrake kindlasti vastutusalad, koostage selged juhised ja kirjutage sellesse, kellele tĂ€pselt esmaspĂ€eval ja kolmapĂ€eval helistada ning kellele teisipĂ€eval ja reedel (muud moodi ei helistata aga suurte hĂ€dade korral — kartuses, et vĂ”etakse ĂŒles, segatakse: inimesed ei armasta helistada ja Ă€ratada teisi, eriti öösel). Ja selgitage, et abi kĂŒsimine ei ole ebakompetentsuse nĂ€itaja ("ma kĂŒsin abi — tĂ€hendab, et ma olen halb töötaja"), julgustage abitootmisi.
  • Teadmiste baasi ja juhtumite töötlemise töövoo loomine: iga tĂ”sise juhtumi korral peab olema kavandatud postmortem; ajutise abinĂ”una peavad olema fikseeritud toimingud, mis lahendavad juhtumi. Ja looge praktika, et korduvad hĂ€ired on patt; need tuleb fikseerida koodis vĂ”i infrastruktuuri töödes.

Tehnoloogiakogum

Kujutage ette, et meie tehnoloogia on jÀrgmine:

  • andmete kogumine — Prometheus + Grafana;
  • logide analĂŒĂŒs — ELK;
  • APM-i vĂ”i jĂ€lgimise jaoks — Jaeger (Zipkin).

HĂ€vitav jĂ€lgimine? — Elagu jĂ€lgimine

ValikuvĂ”imalused ei ole kriitilised. Sest kui olete alguses aru saanud, kuidas sĂŒsteemi jĂ€lgida, ja koostanud plaani, hakkate hiljem valima tööriistu vastavalt oma nĂ”udmistele. KĂŒsimus on, mida te alguses jĂ€lgida valisite. Sest vĂ”ib-olla ei sobi tööriist, mille valisite alguses, teie nĂ”udmistele ĂŒldse.

MÔned tehnilised aspektid, mida ma viimasel ajal igal pool nÀen:

Prometheust surutakse Kubernetesesse — kes selle vĂ€lja mĂ”tles?! Kui teie klaster kokku kukub, mida teete? Kui teil on keeruline klaster sees, peab töötama mingi jĂ€lgimissĂŒsteem sees ja mingi — vĂ€ljas, mis kogub andmeid klastrist.

Klastri sees kogume logisid ja kĂ”ike muud. Kuid jĂ€lgimissĂŒsteem peab olema vĂ€ljas. VĂ€ga sageli, kui klastris on Prometheus, mis on paigaldatud sisse, on seal ka sĂŒsteeme, mis teevad vĂ€liseid kontrollimisi veebisaidi töö kohta. Ja kui teie ĂŒhendus vĂ€lismaailmaga katkeb ja rakendus ei tööta? Tundub, et teie sees on kĂ”ik korras, kuid kasutajatele ei ole sellest kasu.

JĂ€reldused

  • JĂ€lgimise arendamine ei tĂ€henda lihtsalt utiliitide installimist, vaid tarkvaratoote arendamist. 98% tĂ€napĂ€evastest jĂ€lgimistest on koodimine. Koodimine teenustes, koodimine vĂ€liste kontrollide jaoks, vĂ€liste teenuste testimine ja nii edasi.
  • Ärge kahetsege arendajate aega jĂ€lgimiseks: see vĂ”ib vĂ”tta kuni 30% nende tööst, kuid on seda vÀÀrt.
  • DevOps'id, Ă€rge muretsege, kui te ei saa midagi jĂ€lgida, sest mĂ”ned asjad on ĂŒldse teistsugune mĂ”tteviis. Te ei olnud programmeerija, aga jĂ€lgimise töö on just nende vastutus.
  • Kui projekt juba töötab ja pole jĂ€lgitud (ja te olete juht), eraldage ressursid jĂ€lgimiseks.
  • Kui toode on juba tootmises ja te olete DevOps, kellele öeldi «seadistada jĂ€lgimist», proovige selgitada juhtkonnale seda, millest ma rÀÀkisin.

See on laiendatud versioon ettekandest konverentsil Saint Highload++.

Kui teid huvitavad minu ideed ja mĂ”tted IT-st ja selle ĂŒmber, siis siin on vĂ”imalus lugeda kanalit 🙂

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster