
Meie ettevĂ”te tegeleb alates 2008. aastast peamiselt infrastruktuuride haldamise ja ööpĂ€evaringse tehnilise toe pakkumisega veebiprojektidele: meil on ĂŒle 400 kliendi, mis moodustab umbes 15% Venemaa e-kaubandusest. SeetĂ”ttu on meie toena pakutav arhitektuur vĂ€ga mitmekesine. Kui midagi lĂ€heb katki, oleme kohustatud seda 15 minuti jooksul parandama. Kuid et mĂ”ista, et avarii on toimunud, tuleb projekti jĂ€lgida ja reageerida intsidentidele. Kuidas seda aga teha?
Ma arvan, et korraliku jĂ€lgimissĂŒsteemi puudumine toob kaasa hĂ€dasid. Kui hĂ€dasid ei oleks, siis seisneks mu kĂ”ne ĂŒhes lauses: "Palun installige Prometheus + Grafana ja pluginad 1, 2, 3." Kahjuks ei toimi see enam niimoodi. Peamine probleem on selles, et kĂ”ik usuvad endiselt millegisse, mis eksisteeris 2008. aastal, arvestades tarkvarakomponente.
Seoses jĂ€lgimissĂŒsteemi korraldamisega julgen öelda, et... hĂ€sti korraldatud jĂ€lgimise projekte ei eksisteeri. Ja olukord on nii halb, et kui midagi kukub, on oht, et see jÀÀb mĂ€rkamatuks â kĂ”ik on ju kindlad, et "kĂ”ike jĂ€lgitakse".
VÔib-olla jÀlgitakse kÔike. Aga kuidas?
Me kĂ”ik oleme kokku puutunud jĂ€rgnevate lugudega: töötab ĂŒks devops, ĂŒks admin, kelle poole tuleb arendajate meeskond ja ĂŒtleb â "me oleme vĂ€lja andnud, nĂŒĂŒd jĂ€lgi". Mida jĂ€lgida? Kuidas see töötab?
Okei. JĂ€lgime vanamoodsalt. Aga see on juba muutunud ja selgub, et sa jĂ€lgisid teenust A, mis muutus teenuseks B, mis suhtleb teenusega C. Kuid arendajate meeskond ĂŒtleb sulle: "Pane tarkvara paika, see peab ju kĂ”ik jĂ€lgima!"
Nii et mis on muutunud? â KĂ”ik on muutunud!
2008. aasta. KÔik on suurepÀrane
On paar Entwickler, ĂŒks server, ĂŒks andmebaasi server. Sealt see kĂ”ik algab. Meil on teatud info, seadistame Zabbixi, Nagios'e, Cacti. Ja seejĂ€rel seadistame arusaadavad alertid CPU, kĂ”vakettade töö, kettaruumi kohta. Teeme ka paar kĂ€sitsi kontrolli, et veenduda, et veebileht vastab ja tellimused jĂ”uavad andmebaasi. Ja kĂ”ik â oleme enam-vĂ€hem kaitstud.
Kui vĂ”rrelda tol ajal administratori tehtud töömahu, mis oli seotud jĂ€lgimise tagamisega, siis 98% sellest oli automaatne: inimene, kes tegeleb jĂ€lgimisega, peab mĂ”istma, kuidas Zabbixi seadistada, kuidas teda konfigureerida ja seadistada alertid. Ainult 2% â vĂ€lised kontrollid: et veebileht vastab ja teeb pĂ€ringuid andmebaasi, et uued tellimused on saabunud.

2010. aasta. Koormus kasvab.
Me hakkame veebiteenuseid skaleerima, lisame otsingumootori. Tahame olla kindlad, et tootekataloog sisaldab kĂ”iki tooteid. Ja et tooteotsing töötab. Et andmebaas töötab, et tellimused tehakse, et veebileht reageerib vĂ€ljastpoolt ja vastab kahel pool. serverite ja kasutaja ei visata veebilehelt vĂ€lja, kuni ta ĂŒmber jaotatakse teisele serverile jne. Entiteetide arv suureneb.
Kestus, mis on seotud infrastruktuuriga, jÀÀb endiselt juhataja peas kĂ”ige olulisemaks. Ăhus on endiselt idee, et inimene, kes tegeleb jĂ€lgimisega, on see, kes installib Zabbixi ja suudab seda konfigureerida.
Kuid samal ajal ilmuvad tööd vÀliste auditite lÀbiviimiseks, otsingumootori indekseerija pÀringute skriptide komplekti loomiseks, skriptide komplekti, et kontrollida, kas indekseerimisel toimub muudatusi, ning skriptide komplekti, mis kontrollivad, et teenusele edastatakse kaupu jne.

Pange tÀhele: ma kirjutasin kolm korda "skriptide komplekt". See tÀhendab, et jÀlgimise eest vastutav ei ole enam lihtsalt see, kes installib Zabbixi. See on inimene, kes hakkab kodeerima. Kuid meeskonna peas ei muutu siiani midagi.
Aga maailm muutub ja keerulisemaks. Lisanduvad virtualiseerimise kihid, mitu uut sĂŒsteemi. Need hakkavad omavahel suhtlema. Kes ĂŒtles âkĂ€ib mikroteenuste Ă”hk?â Kuid iga teenus nĂ€eb endiselt vĂ€lja nagu eraldi sait. Me saame sellele ligi ja mĂ”ista, et see pakub vajalikku teavet ning töötab iseseisvalt. Ja kui oled administraator, kes pidevalt tegeleb projektiga, mis on kestnud 5-7-10 aastat, siis need teadmised kogunevad: ilmub uus tase â sa oled selle teadvustanud, tuleb veel ĂŒks tase â sa oled selle teadvustanudâŠ

Aga harva keegi toetab projekti 10 aastat.
Monitooringumehe CV
Oletame, et sa said uude idufirmasse, kus kohe oli 20 arendajat, kirjutati 15 mikroteenust, ja sina oled administraator, kellele öeldakse: "Ehita CI/CD. Paluuuuun." Sa ehitasid CI/CD ja Àkki kuuled: "Meil on keeruline töötada tootmises 'kubikus', aru saamata, kuidas seal rakendus töötab. Tee meile see 'kubik' sama 'liivakasti' sisse."
Te loob sandkasten selle kuubiku sees. Teile öeldakse kohe: âMe tahame andmebaasi, mis uuendatakse iga pĂ€ev tootmisest, et mĂ”ista, kas see töötab andmebaasil, kuid samas mitte rikuda tootmisandmebaasi.â
Te elate selles kĂ”iges. Kaks nĂ€dalat on jÀÀnud vĂ€ljaandmiseni, teile öeldakse: âNĂŒĂŒd peaksime seda kĂ”ike jĂ€lgima...â See tĂ€hendab jĂ€lgida klastristruktuuri, jĂ€lgida mikroteenuste arhitektuuri, jĂ€lgida koostööd vĂ€liste teenustega...
Ja kolleegid tuletavad meelde lihtsat schaemat ja ĂŒtlevad: âSiin on ju kĂ”ik selge! Pane paika programm, mis seda kĂ”ike jĂ€lgib.â Jah, jah: Prometheus + Grafana + lisamoodulid.
Ja nad lisavad: âSul on kaks nĂ€dalat, tee nii, et kĂ”ik oleks usaldusvÀÀrne.â
Paljudes projektides, mida me nĂ€eme, on jĂ€lgimise jaoks mÀÀratud ĂŒks inimene. Kujutage ette, et soovime kaheks nĂ€dalaks palgata inimesi, kes tegeleb jĂ€lgimisega, ja koostame talle CV. Milliste oskustega peaks see inimene olema, arvestades kĂ”ike, mida oleme varem öelnud?
- Ta peab mÔistma jÀlgimist ja riistvara infrastruktuuri spetsiifikat.
- Ta peab mĂ”istma Kubernetes'e jĂ€lgimise eripĂ€ra (ja kĂ”ik tahavad âkuubikutâ, sest see vĂ”imaldab kĂ”igest eemaldunde, ning adminn haldab kĂ”ike muud) â tema enda, selle infrastruktuuri ja kujundama, kuidas jĂ€lgida rakendusi selle sees.
- Ta peab mĂ”istma, et teenused suhtlevad omavahel eriviisidel ning teadma teenustevahelise suhtluse spetsiifikat. On tĂ€iesti reaalsed projektid, kus osa teenuseid suhtleb sĂŒnhroonselt, sest teisiti ei saa. NĂ€iteks, backend töötab REST'i ja gRPC kaudu, et suhelda katalooge teenusega, saada tooteid nimekiri ja tagasi tuua. Siin ei saa oodata. Teiste teenustega töötab ta asĂŒnkroonselt. Edastada tellimus kullerteenusele, saata kiri jne.
Te juba ilmselt tunnete end kogu selle pĂ€rast segaduses? Ent adminn, kellel on seda jĂ€lgida, on veel rohkem segaduses. - Ta peab olema suuteline Ă”igesti planeerima ja planeerima â kuna tööd on aina rohkem ja rohkem.
- SeetÔttu peab ta looma strateegia loodud teenusest, et aru saada, kuidas seda konkreetselt jÀlgida. Tal on vaja arusaamist projekti arhitektuurist ja selle arengust, samuti tehnoloogiatest, mida arenduses kasutatakse.
Tuletame meelde tĂ€iesti normaalset olukorda: osa teenustest on php-s, osa teenustest Go-s, osa teenustest JS-is. Nad töötavad omavahel mingil moel koos. Sealt tuli termin 'mikroteenus': eraldi sĂŒsteeme on nii palju, et arendajad ei suuda projekti tervikuna mĂ”ista. Ăks meeskonna osa kirjutab JS-is teenuseid, mis töötavad iseenesest ja ei tea, kuidas ĂŒlejÀÀnud sĂŒsteem töötab. Teine osa kirjutab teenuseid Pythonis ja ei puuduta, kuidas teised teenused töötavad, nad on oma valdkonnas isoleeritud. Kolmas kirjutab teenuseid php-s vĂ”i millegagi muuga.
Need 20 inimest on jagatud 15 teenusele ning olemas on vaid ĂŒks admin, kes peab kĂ”ik selle lĂ€bi mĂ”istma. Peatu! Me just jagasime sĂŒsteemi 15 mikroteenuseks, sest 20 inimest ei saa kogu sĂŒsteemi aru.
Kuid seda tuleb kuidagi jÀlgida...
KokkuvĂ”ttes on ĂŒks inimene, kelle pea mahub kĂ”ik, mida terve arendajate meeskond ei suuda mĂ”ista, ja ta peab siiski teadma ning oskama kĂ”ike, mida me eespool nĂ€itasime â raudne infrastruktuur, Kubernetes infrastruktuur jne.
Mida siin öelda... Houston, meil on probleemid.
Kaasaegse tarkvaraprojekti seire on iseenesest tarkvaraprojekt.
Valeusku, et seire on tarkvara, loob meile usu imedesse. Kahjuks imesid ei ole. Ei tohi paigaldada Zabbixi ja loota, et kĂ”ik töötab. Pole mĂ”tet paigaldada Grafanat ja loota, et kĂ”ik on hĂ€sti. Suurem osa ajast kulub teenuste töö kontrollimiseks ja nendevaheliseks suhtluseks, samuti vĂ€liste sĂŒsteemide töö kontrollimiseks. Tegelikult kulub 90% ajast mitte skriptide kirjutamisele, vaid tarkvara arendamisele. Sellega peaks tegelema meeskond, kes mĂ”istab projekti tööd.
Kui selles olukorras panna ĂŒks inimene seirele, siis juhtub katastroof. Ja see juhtub igal pool.
NÀiteks on mitmeid teenuseid, mis rÀÀgivad omavahel lÀbi Kafka. Kui tellimus saabub, saadame tellimuse sÔnumi Kafkasse. On teenus, mis kuulab tellimuse teavet ja teostab kaupade saatmise. On teenus, mis kuulab tellimuse teavet ja saadab kasutajale e-kirja. Ja siis ilmub veel hulk teenuseid ja me hakkame segadusse minema.
Aga kui te anate selle administraatorile ja arendajatele hetkel, kui enne vĂ€ljalaskmist on jÀÀnud vĂ€he aega, peab inimesel olema aega selle koosoleku protokolliga tutvuda. See tĂ€hendab, et sellise ulatusega projekt vĂ”tab mĂ€rkimisvÀÀrselt aega ja sĂŒsteemi vĂ€ljatöötamisse peab see olema sisse arvestatud.
Kuid tihti, eriti algajates ettevĂ”tetes, nĂ€eme, et jĂ€lgimine lĂŒkatakse edasi. "Praegu teeme Proof of Concept'i, kĂ€ivitame sellega, las see kukub â oleme valmis ohverdama. Ja siis jĂ€lgime kĂ”ike seda." Kui (vĂ”i juhul, kui) projekt hakkab kasumit tooma, soovib Ă€ri veel rohkem funktsioone arendada â sest see on ju hakanud töötama, seega on vaja veel rohkem tekitada! Ja olete punktis, kus kĂ”igepealt tuleb jĂ€lgida kĂ”ike eelnevat, mis ei vĂ”ta 1% ajast, vaid palju rohkem. Ja muide, jĂ€lgimiseks on vaja arendajaid, keda on lihtsam suunata uusi funktsioone looma. LĂ”puks kirjutatakse uusi funktsioone, kĂ”ik kuhjub, ja te olete lĂ”putus ummikus.
Kuidas siis jÀlgida projekti alates algusest ning mida teha, kui teil on projekt, mida on vaja jÀlgida, ja te ei tea, kust alustada?
Esiteks, tuleb planeerida.
LĂŒĂŒriline kĂ”rvalekalle: sageli alustatakse infrastruktuuri jĂ€lgimisest. NĂ€iteks meie Kubernetesega. Alustame sellest, et paigaldame Prometheuse koos Grafanaga, installime pluginid 'kuubiku' jĂ€lgimiseks. Mitte ainult arendajatel, vaid ka administraatoritel on kurb praktika: 'Paigaldame selle plugina, eks see plugin teab, kuidas seda teha.' Inimesed armastavad alustada lihtsate ja arusaadavate asjadega, mitte oluliste tegevustega. Ja infrastruktuuri jĂ€lgimine on just selline lihtne tegevus.
Esialgu otsustage, mida ja kuidas soovite jĂ€lgida, seejĂ€rel valige sobiv tööriist, kuna teised inimesed ei saa teie eest mĂ”elda. Ja kas nad peaksidki? Teised inimesed mĂ”tlesid enda, universaalsete sĂŒsteemide peale â vĂ”i ei mĂ”elnud ĂŒldse, kui seda plugina kirjutati. Ja see, et sellel pluginil on 5000 kasutajat, ei tĂ€henda, et see toob mingit kasu. VĂ”ib-olla saate 5001-ks lihtsalt seetĂ”ttu, et seal oli juba 5000 inimest.
Kui olete alustanud oma rakenduse infrastruktuuri ja tagasilise jĂ€lgimise jĂ€relevalvet ning see on lĂ”petanud vastamise, kaotavad kĂ”ik kasutajad ĂŒhenduse mobiilirakendusega. TĂ”useb veateade. Teie juurde tullakse ja kĂŒsitakse: âRakendus ei tööta, millega te siin tegelete?â â âMe jĂ€lgime.â â âKuidas te jĂ€lgite, kui ei nĂ€e, et rakendus ei tööta?!â
- Arvan, et jĂ€lgimist tuleks alustada eelkĂ”ige kasutaja sisenemispunktist. Kui kasutaja ei nĂ€e, et rakendus töötab â on see ebaĂ”nnestumine. Ja jĂ€lgimissĂŒsteem peab sellest eelkĂ”ige teavitama.
- Ja alles siis saame jĂ€lgida infrastruktuuri. VĂ”i teha seda paralleelselt. Infrastruktuuriga on lihtsam â siin saame lĂ”puks lihtsalt paigaldada zabbixi.
- Ja nĂŒĂŒd tuleb minna rakenduse juurte juurde, et mĂ”ista, kus miski ei tööta.
Minu peamine mĂ”te on see, et jĂ€lgimine peaks kĂ€ima paralleelselt arendamise protsessiga. Kui te hajutate jĂ€lgimismeeskonna teistele ĂŒlesannetele (CI/CD loomine, liivakast, infrastruktuuri ĂŒmberkorraldamine), hakkab jĂ€lgimine maha jÀÀma ja te ei pruugi kunagi arendust taas pĂŒĂŒdma hakata (vĂ”i varem vĂ”i hiljem peate selle peatama).
KÔik tasemetel
Nii nĂ€en ma monitooringusĂŒsteemi ĂŒlesehitust.
1) Rakenduse tase:
- rakenduse Àri-logi jÀlgimine;
- teenuste health-metrika jÀlgimine;
- integratsioonimonitooring.
2) Infrastruktuuri tase:
- orkestreerimistase jÀlgimine;
- sĂŒsteemilise tarkvara jĂ€lgimine;
- riistvara taseme jÀlgimine.
3) Taas rakenduse tase â kuid inseneritootena:
- rakenduse logide kogumine ja vaatamine;
- APM;
- tracing.
4) Alerteerimine:
- teavitussĂŒsteemi korraldamine;
- valve sĂŒsteemi korraldamine;
- teadmistebaasi ja sĂŒndmuste töötlemise töövoo korraldamine.
Oluline: jĂ”uame alerteerimise juurde kohe, mitte hiljem! Ei tohi kĂ€ivitada monitooringut ja mĂ”elda, kellele alerdid minema hakkavad, hiljem. Sest monitooringu ĂŒlesanne on mĂ”ista, kus sĂŒsteemis midagi ei tööta, ja anda sellest vajalikule rahvale teada. Kui see jĂ€tab viimasele, siis vajalikud inimesed saavad teada, et midagi on valesti, ainult kĂ”ne tĂ”ttu: "meil ei tööta miski."
Rakenduse tase â Ă€ri-loogika jĂ€lgimine
Siin on jutt rakenduse töötamise fakti kontrollimisest kasutaja jaoks.
See tase tuleb teha arenduse etapis. NĂ€iteks, meil on hĂŒpoteetiline Prometheus: ta pÀÀseb serverisse, mis tegeleb kontrollidega, kutsub endpointi, ja endpoint lĂ€heb ja kontrollib API-d.
Kui sageli kĂŒsitakse, et monitorida ajaloolist lehte, et veenduda, et sait töötab, annavad programmeerijad kĂ€siraamat, mida saab iga kord tĂ”mmata, kui tuleb veenduda, et API töötab. Ja programmeerijad kirjutavad samal ajal /api/test/helloworld.
Kuidas olla kindel, et kĂ”ik töötab? â Ei!
- Selliste kontrollide loomine on pĂ”himĂ”tteliselt arendajate ĂŒlesanne. Ăksuste testid peaksid kirjutama need programmeerijad, kes kirjutavad koodi. Sest kui sa annad adminile 'KĂŒsimus, siin on API protokollide nimekiri kĂ”igist 25 funktsioonist, palun kontrolli kĂ”ik!' â ei saa midagi, ei tule sellest midagi.
- Kui teete print 'hello world', ei saa keegi kunagi teada, et API peaks ja tÔesti töötab. Iga API muutmine peab endaga kaasa tooma kontrollide muutmise.
- Kui teil on juba see probleem â peatage funktsioonid ja mÀÀrake arendajad, kes need kontrollid kirjutavad, vĂ”i leppige kaotustega, leppige sellega, et mitte midagi ei kontrollita ja see hakkab kukkuma.
Tehnilised nÔuanded:
- Korrigeerige kindlasti vĂ€list serverit kontrollide korraldamiseks â peate kindel olema, et teie projekt on vĂ€lismaailmale ligipÀÀsetav.
- Organiseerige kontroll kÔigi API protokollide jaoks, mitte ainult eraldi lÔpp-punktide jaoks.
- Looge prometheus-lÔpppunkt kontrollide tulemuste jaoks.
Rakendustasand â tervisemÔÔdikute jĂ€lgimine
NĂŒĂŒd rÀÀgime teenuste vĂ€listest tervisemÔÔdikutest.
Oleme otsustanud, et jĂ€lgime kĂ”iki rakenduse "kĂ€epidemeid" vĂ€listest kontrollidest, mida kutsume vĂ€lja vĂ€lisest jĂ€lgimissĂŒsteemist. Kuid need on just need "kĂ€epidemed", mida kasutaja "nĂ€eb". Soovime olla kindlad, et meie teenused töötavad. Siin on asi parem: K8s-l on tervise kontrollid, et vĂ€hemalt "kuubik" saaks veenduda, et teenus töötab. Kuid pool testidest, mida olen nĂ€inud, on see sama print âhello worldâ. Ehk siis, ta kĂŒsib ĂŒhe korra pĂ€rast juurutamist, tal vastati, et kĂ”ik on korras â ja kĂ”ik. Teenusel, kui ta REST-is oma API-d vĂ€ljastab, on tohutult palju sissepÀÀsupunkte sellel API-l, mida samuti tuleb jĂ€lgida, sest soovime teada, et see töötab. JĂ€lgime seda juba seestpoolt.
Kuidas seda tehniliselt Ôigesti ellu viia: iga teenus esitab endpoint'i oma praeguse töökindluse kohta, ja Grafana (vÔi mÔne muu rakenduse) graafikutel nÀeme kÔigi teenuste staatust.
- Iga API muudatus peaks endaga kaasa tooma kontrollide muudatused.
- Uue teenuse loomisel lisage kohe ka health-mÔÔdikud.
- Administraator vĂ”ib minna arendajate juurde ja paluda: "lisage mulle paar funktsiooni, et ma kĂ”ik saaksin aru ja saaksin selle oma jĂ€lgimissĂŒsteemi lisada." Kuid arendajad vastavad tavaliselt: "Kaks nĂ€dalat enne vĂ€ljaandmist me midagi lisama ei hakka."
Olgu arendajate juhid teadlikud, et sellised kaotused on vÔimalikud, ja ka arendajate juhtkond peaks seda teadma. Sest kui kÔik kokku kukub, siis keegi helistab ja nÔuab jÀlgida "alati kokku kukkuvat teenust" (c) - Muide, suunake arendajad Grafana plugin'ite kirjutamisele - see oleks administratiividele suureks abiks.
Rakenduse tase - IntegreerimisjÀlgimine
IntegreerimisjĂ€lgimine keskendub Ă€rikriitiliste sĂŒsteemide vahelise suhtluse jĂ€lgimisele.
NĂ€iteks on olemas 15 teenust, mis omavahel suhtlevad. Need ei ole enam eraldi veebisaidid. See tĂ€hendab, et me ei saa teenust lihtsalt kokku tĂ”mmata, saada /helloworld ja mĂ”ista, et teenus töötab. Sest tellimuste töötlemise veebiteenus peab saatma tellimuste info bussile â bussilt peab laohaldusteenus selle sĂ”numi kĂ€tte saama ja sellega edasi töötama. Ja e-kirjade saatmise teenus peab seda kuidagi edasi töötama jne.
Seega ei saa me aru, klÔpsates igas erinevas teenuses, et kÔik see töötab. Sest meil on mingi buss, mille kaudu kÔik suhtleb ja koordineerib oma tegevust.
SeetĂ”ttu peaks see etapp tĂ€histama teenuste testimise etappi, mis suhtlevad teiste teenustega. Ei saa nĂ”uda, et jĂ€lgitud sĂ”numite vahendaja korraldaks suhtluse jĂ€lgimise. Kui on teenus, mis edastab andmeid, ja teenus, mis need andmed vastu vĂ”tab, nĂ€eme vahendaja jĂ€lgimisel ainult andmeid, mis liiguvad edasi-tagasi. Isegi kui me Ă”nnestuks mingil viisil jĂ€lgida nende andmete vahelist interaktsiooni â et mingi tootja postitab andmeid, keegi neid loeb, ja see voog jĂ€tkub Kafka's â ei anna see meile ikkagi teavet, kui ĂŒks teenus saatis sĂ”numi ĂŒhes versioonis ja teine teenus ei oodanud seda versiooni ning jĂ€ttis selle vahele. Me ei saa sellest teada, sest teenused ĂŒtlevad meile, et kĂ”ik töötab.
Kuidas soovitan teha:
- SĂŒnkroonse suhtluse puhul: lĂ”pp-punkt teeb pĂ€ringud seotud teenustele. See tĂ€hendab, et me vĂ”tame selle lĂ”pp-punkti, kĂ€ivitame skripti teenuses, mis lĂ€heb lĂ€bi kĂ”ikide punktide ja ĂŒtleb: âma saan sealt kĂ€ivitada, ja sealt kĂ€ivitada, saan sealt kĂ€ivitada...â
- AsĂŒnkroonses suhtluses: sissetulevad sĂ”numid â lĂ”pp-punkt kontrollib bussilt test-sĂ”numite olemasolu ja annab töötlemise staatuse.
- AsĂŒnkroonses suhtluses: vĂ€ljaminevad sĂ”numid â lĂ”pp-punkt saadab bussile test-sĂ”numid.
Nagu tavaliselt: meil on teenus, mis saadab andmeid bussi. Me tuleme selle teenuse juurde ja palume rÀÀkida selle integratsiooni tervisest. Ja kui teenus peab edasi saatma mingi sĂ”numi kuhugi (WebApp), siis ta saadab selle test-sĂ”numi edasi. Ja kui me tĂ”ukame teenust OrderProcessing poole, postitab ta esmalt, mida ta saab iseseisvalt postitada, ja kui on mingeid sĂ”ltuvaid asju, siis ta loeb bussilt reas test-sĂ”numeid, mĂ”istab, mida ta saab töödelda, teatab sellest ja kui vaja, postitab need edasi ning ĂŒtleb selle kohta â kĂ”ik okei, ma olen elus.
VĂ€ga sageli kuuleme kĂŒsimust "kuidas saame seda testida tootmisandmetel?" NĂ€iteks rÀÀgime tellimuste teenusest. Tellimus saadab sĂ”numeid laos, kus tooted arvestatakse maha: me ei saa testida seda tootmisandmetel, sest "mul arvestatakse tooted maha!" Lahendus: planeerige kogu see test algfaasis. Teil on ju 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 juba ammu tuntud kui tÔeline jÀlgimine.
- Infrastruktuuri jÀlgimist saab ja tuleb kÀivitada kui eraldi protsess.
- Ăra alusta infrastruktuuri jĂ€lgimisega töötavas projektis, isegi kui see on vĂ€ga soovitav. See on vaev kĂ”ikide DevOps'i spetsialistide jaoks. "Esiteks jĂ€lgin klastrit, jĂ€lgin infrastruktuuri" â tĂ€hendab, et kĂ”igepealt jĂ€lgitakse seda, mis on allpool, ja rakendusse ei minda. Sest rakendus on DevOps'ile arusaamatu asi. Tal on see antud ja ta ei saa aru, kuidas see töötab. Infrastruktuur on aga talle tuttav ja ta alustab selle jĂ€lgimisega. Kuid ei â alati tuleb kĂ”igepealt jĂ€lgida rakendust.
- Ărge liialdage hĂ€iretega. Arvestades kaasaegsete sĂŒsteemide keerukust, lendavad hĂ€ired pidevalt ning sellest kuhjast tuleb kuidagi elada. Ja hĂ€iriv inimene vaadates sajat hĂ€iret otsustab: "ei taha selle ĂŒle mĂ”elda". HĂ€ired peaksid teavitama ainult kriitilistest asjadest.
Rakenduse taseme kui Àrielemendi
Peamised punktid:
- ELK. See on tööstusstandard. Kui mingil pÔhjusel te ei koonda logisid, alustage kiiresti selle tegemist.
- APM. VÀlimised APM-id kui kiire viis rakenduse jÀlgimise sulgemiseks (NewRelic, BlackFire, Datadog). Saate ajutiselt selle asja paigaldada, et kuidagi aru saada, mis teiega toimub.
- JĂ€lgimine. KĂŒmnetes mikroteenustes peate jĂ€lgima kĂ”ike, kuna pĂ€ring ei ela enam eraldi. Hiljem lisamine on vĂ€ga keeruline, seega on parem kohe arenduses jĂ€lgimine ette planeerida â see on töö ja arendajate tööriist. Kui ei ole veel rakendatud â rakendage kindlasti! Vaata Jaeger/Ziipkin.
HĂ€ired
- TeavitussĂŒsteemi korraldamine: monitoring'i tingimustes peab olema ĂŒhtne teavituste saatmise sĂŒsteem, nĂ€iteks Grafanas. LÀÀne riikides kasutatakse kĂ”ikjal PagerDuty'd. Teavitused peavad olema arusaadavad (nt kust nad tulidâŠ). Samuti on soovitatav jĂ€lgida, et teavitused tĂ”esti kohale jĂ”uavad.
- Kohustuste sĂŒsteemi korraldamine: teated ei tohi tulla kĂ”igile (muidu reageerivad kĂ”ik vĂ”i ei reageeri keegi). On-call olema peab ka arendajatel: mÀÀrake kindlasti vastutusalad, koostage selge juhend ja kirja pange, kellele tĂ€pselt esmaspĂ€eval ja kolmapĂ€eval helistada ning kellele teisipĂ€eval ja reedel (vastasel juhul ei helistata kellelegi isegi suure hĂ€da korral â kardetakse kedagi Ă€ratada, hĂ€irida: inimesed ĂŒldiselt ei meeldi helistada ja teisi, eriti öösel, Ă€ratada). Ja selgitage, et abi kĂŒsimine ei ole ebakompetentsuse nĂ€itaja (âma kĂŒsin abi â seega olen halb töötajaâ), julgustage abi palumist.
- Teadmistebaasi ja sĂŒndmuste töötlemise töövoo korraldamine: iga tĂ”sise sĂŒndmuse puhul peab olema planeeritud tagasivaade, ajutise meetmena peavad olema fikseeritud tegevused, mis lahendavad sĂŒndmuse. Ja looge praktika, et korduvad teated on patt; neid tuleb fikseerida koodis vĂ”i infrastruktuuri töödes.
Tehnoloogiline stack
Kujutame ette, et meie tehnoloogia on jÀrgmine:
- andmete kogumine â Prometheus + Grafana;
- logifailide analĂŒĂŒs â ELK;
- APM vĂ”i jĂ€lgimise jaoks â Jaeger (Zipkin).

ValikuvĂ”imalused ei ole kriitilised. Kui olete alguses aru saanud, kuidas sĂŒsteemi jĂ€lgida, ja koostanud plaani, hakkate seejĂ€rel valima tööriistu vastavalt oma nĂ”udmistele. KĂŒsimus on selles, mida otsustasite alguses jĂ€lgida. Sest vĂ”ib-olla valitud tööriist ei sobi teie vajadustega ĂŒldse.
MÔned tehnilised punktid, mida olen viimasel ajal igal pool nÀinud:
Prometheus on pandud Kubernetesesse â kes selle vĂ€lja mĂ”tles?! Kui teie klaster kokku kukub, mida teete? Kui teil on keeruline klaster sees, peaks seal töötama mingi jĂ€lgimissĂŒsteem, ja mingi â vĂ€ljaspool, mis kogub andmeid klastri seest.
Klastri sees kogume logisid ja kĂ”ike muud. Aga jĂ€lgimissĂŒsteem peaks olema vĂ€ljaspool. Sageli on klastris, kus on sisseehitatud Prometheus, ka sĂŒsteemid, mis teevad vĂ€liseid kontrollimisi. Ent kui teie ĂŒhendused vĂ€lismaailmaga katkevad ja rakendus ei tööta? Tundub, et sees on kĂ”ik korras, kuid kasutajatele ei ole see lihtsam.
JĂ€reldused
- JÀlgimise arendamine ei seisne utiliitide paigaldamises, vaid tarkvaratoote vÀljatöötamises. 98% tÀnapÀeva jÀlgimisest on koodimine. Koodimine teenustes, koodimine vÀlistes kontrollides, vÀlistes teenustes kontrollimine ja kÔikvÔimalik muu.
- Ărge raisake arendajate aega jĂ€lgimise peale: 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 vajavad hoopis teistsugust mÔtteviisi. Te ei olnud programmeerija ja jÀlgimise töö on just nende töö.
- Kui projekt juba töötab ja ei ole jĂ€lgitud (ja teie olete juhataja) â eraldage ressursid jĂ€lgimiseks.
- Kui toode on juba tootmises ja te olete devops, kellele öeldi "seadistage jĂ€lgimine" â proovige juhtkonnale selgitada, mida ma siinkohal kirjutasin.
See on pikendatud versioon ettekandest konverentsil Saint Highload++.
Kui teid huvitavad minu ideed ja mĂ”tisklused IT- ja selleteemal, siis siin on vĂ”imalus đ
Allikas: habr.com
