Savos projektos mÄs izmantojam mikropakalpojumu arhitektÅ«ru. Ja rodas veiktspÄjas vÄjÄs vietas, daudz laika tiek pavadÄ«ts žurnÄlu uzraudzÄ«bai un parsÄÅ”anai. ReÄ£istrÄjot atseviŔķu darbÄ«bu laikus žurnÄla failÄ, parasti ir grÅ«ti saprast, kas noveda pie Å”o darbÄ«bu izsaukÅ”anas, izsekot darbÄ«bu secÄ«bai vai vienas operÄcijas laika nobÄ«dei attiecÄ«bÄ pret citu dažÄdos pakalpojumos.
Lai samazinÄtu roku darbu, mÄs nolÄmÄm izmantot vienu no izsekoÅ”anas rÄ«kiem. Par to, kÄ un kÄpÄc varat izmantot izsekoÅ”anu un kÄ mÄs to darÄ«jÄm, un tas tiks apspriests Å”ajÄ rakstÄ.
KÄdas problÄmas var atrisinÄt ar izsekoÅ”anu
Atrodiet veiktspÄjas vÄjÄs vietas gan vienÄ pakalpojumÄ, gan visÄ izpildes kokÄ starp visiem iesaistÄ«tajiem pakalpojumiem. PiemÄram:
Daudz Ä«su secÄ«gu zvanu starp pakalpojumiem, piemÄram, Ä£eokodÄÅ”anai vai datu bÄzei.
Ilga I/O gaidÄ«Å”ana, piemÄram, tÄ«kla pÄrsÅ«tÄ«Å”ana vai diska nolasÄ«Å”ana.
Ilga datu parsÄÅ”ana.
Ilgas darbÄ«bas, kurÄm nepiecieÅ”ams centrÄlais procesors.
Koda sadaļas, kas nav vajadzÄ«gas gala rezultÄta iegÅ«Å”anai un kuras var noÅemt vai aizkavÄt.
Skaidri saproti, kÄdÄ secÄ«bÄ ko sauc un kas notiek, kad tiek veikta operÄcija.
Redzams, ka, piemÄram, PieprasÄ«jums ieradÄs WS servisÄ -> WS serviss papildinÄja datus caur R servisu -> pÄc tam nosÅ«tÄ«ja pieprasÄ«jumu V servisam -> V serviss ielÄdÄja daudz datu no R serviss -> aizgÄja uz P servisu -> P serviss atkal devÄs uz servisu R -> serviss V ignorÄja rezultÄtu un devÄs uz servisu J -> un tikai tad atgrieza atbildi uz servisu WS, turpinot rÄÄ·inÄt ko citu fons.
Ja nav Å”Ädas izsekoÅ”anas vai detalizÄtas dokumentÄcijas visam procesam, ir ļoti grÅ«ti saprast, kas notiek, pirmo reizi aplÅ«kojot kodu, un kods ir izkaisÄ«ts pa dažÄdiem pakalpojumiem un paslÄpts aiz tvertnÄm un saskarnÄm.
InformÄcijas vÄkÅ”ana par izpildes koku turpmÄkai atliktajai analÄ«zei. KatrÄ izpildes posmÄ varat pievienot informÄciju izsekojamÄ«bai, kas ir pieejama Å”ajÄ posmÄ, un pÄc tam noskaidrot, kuri ievades dati noveda pie lÄ«dzÄ«ga scenÄrija. PiemÄram:
LietotÄja ID
tiesības
IzvÄlÄtÄs metodes veids
ŽurnÄla vai izpildes kļūda
Izsekojumu pÄrvÄrÅ”ana metrikas apakÅ”kopÄ un turpmÄka analÄ«ze jau metrikas veidÄ.
KÄdas pÄdas var pieteikt. Spin
Izsekojot pastÄv laiduma jÄdziens, tas ir viena baļķa analogs konsolei. Spa ir:
Nosaukums, parasti izpildÄ«tÄs metodes nosaukums
Pakalpojuma nosaukums, kurÄ tika Ä£enerÄts diapazons
Savs unikÄlais ID
Kaut kÄda metainformÄcija atslÄgas/vÄrtÄ«bas veidÄ, kas tajÄ ir reÄ£istrÄta. PiemÄram, metodes parametri vai metode beidzÄs ar kļūdu vai nÄ
Å Ä« perioda sÄkuma un beigu laiks
VecÄku diapazona ID
Katrs diapazons tiek nosÅ«tÄ«ts uz diapazona savÄcÄju, lai to saglabÄtu datu bÄzÄ vÄlÄkai pÄrskatÄ«Å”anai, tiklÄ«dz tas ir pabeidzis izpildi. NÄkotnÄ varat izveidot visu laidumu koku, izveidojot savienojumu, izmantojot vecÄku ID. AnalizÄjot, jÅ«s varat atrast, piemÄram, visus dažu pakalpojumu posmus, kas prasÄ«ja vairÄk nekÄ noteiktu laiku. TurklÄt, pÄrejot uz noteiktu laidumu, skatiet visu koku virs un zem Ŕī laiduma.
Opentrace, Jagger un tas, kÄ mÄs to ieviesÄm savos projektos
Ir kopÄ«gs standarts opentrace, kurÄ ir aprakstÄ«ts, kÄ un kas ir jÄapkopo, un tas nav saistÄ«ts ar konkrÄtu implementÄciju jebkurÄ valodÄ. PiemÄram, Java viss darbs ar trasÄÅ”anu tiek veikts, izmantojot parasto Opentrace API, un zem tÄ var paslÄpt, piemÄram, Jaeger vai tukÅ”u noklusÄjuma implementÄciju, kas neko nedara.
MÄs lietojam Vilnas triko kÄ Opentrace ievieÅ”ana. Tas sastÄv no vairÄkiem komponentiem:
Jaeger-agent ir vietÄjais aÄ£ents, kas parasti tiek instalÄts katrÄ datorÄ, un pakalpojumi tiek pieteikti tajÄ vietÄjÄ noklusÄjuma portÄ. Ja aÄ£enta nav, visu pakalpojumu pÄdas Å”ajÄ maŔīnÄ parasti tiek atspÄjotas
Jaeger-collector - visi aÄ£enti nosÅ«ta savÄktÄs pÄdas uz to, un tas ievieto tos izvÄlÄtajÄ datu bÄzÄ
DatubÄze ir viÅu vÄlamÄ cassandra, bet mÄs izmantojam elasticsearch, ir implementÄcijas dažÄm citÄm datu bÄzÄm un atmiÅÄ esoÅ”a implementÄcija, kas neko nesaglabÄ diskÄ.
Jaeger-query ir pakalpojums, kas pÄriet uz datu bÄzi un atgriež jau savÄktÄs pÄdas analÄ«zei
Jaeger-ui ir tÄ«mekļa saskarne pÄdu meklÄÅ”anai un apskatei, tÄ pÄriet uz jaeger vaicÄjumu
AtseviŔķu komponentu var saukt par opentrace jaeger ievieÅ”anu konkrÄtÄm valodÄm, caur kuru spans tiek nosÅ«tÄ«tas uz jaeger-agent. Jagger savienoÅ”ana Java io.opentracing.Tracer interfeiss ir jÄievieÅ”, pÄc tam visas pÄdas caur to aizlidos uz Ä«sto aÄ£entu.
ArÄ« atsperes komponentam var pieslÄgt opentracing-spring-cloud-starter un ievieÅ”ana no Jaeger opentracing-spring-jaeger-cloud-starter kas automÄtiski konfigurÄs izsekoÅ”anu visam, kas iet caur Å”iem komponentiem, piemÄram, http pieprasÄ«jumi kontrolieriem, pieprasÄ«jumi datu bÄzei, izmantojot jdbc utt.
Trases reÄ£istrÄÅ”ana Java
Kaut kur augÅ”ÄjÄ lÄ«menÄ« ir jÄizveido pirmais Span, to var izdarÄ«t automÄtiski, piemÄram, atsperes kontrolieris, kad tiek saÅemts pieprasÄ«jums, vai manuÄli, ja tÄda nav. PÄc tam tas tiek pÄrsÅ«tÄ«ts, izmantojot tÄlÄk norÄdÄ«to darbÄ«bas jomu. Ja kÄda no tÄlÄk norÄdÄ«tajÄm metodÄm vÄlas pievienot diapazonu, tÄ Åem paÅ”reizÄjo ActiveSpan no tvÄruma, izveido jaunu diapazonu un saka, ka tÄ vecÄkais ir iegÅ«tais ActiveSpan, un padara jauno diapazonu aktÄ«vu. Izsaucot ÄrÄjos pakalpojumus, paÅ”reizÄjais aktÄ«vais diapazons tiek nodots tiem, un Å”ie pakalpojumi izveido jaunus diapazonus, atsaucoties uz Å”o diapazonu.
Viss darbs notiek caur Tracer gadÄ«jumu, to var iegÅ«t, izmantojot DI mehÄnismu vai GlobalTracer.get () kÄ globÄlo mainÄ«go, ja DI mehÄnisms nedarbojas. PÄc noklusÄjuma, ja tracer nav inicializÄts, NoopTracer atgriezÄ«sies, kas neko nedara.
TÄlÄk paÅ”reizÄjais tvÄrums tiek iegÅ«ts no trasera caur ScopeManager, no paÅ”reizÄjÄ tiek izveidots jauns ar jaunÄ diapazona iesieÅ”anu, un pÄc tam izveidotais tvÄrums tiek aizvÄrts, kas aizver izveidoto diapazonu un atgriež iepriekÅ”Äjo tvÄrumu aktÄ«vajÄ stÄvoklÄ«. DarbÄ«bas joma ir piesaistÄ«ta pavedienam, tÄpÄc, programmÄjot vairÄku pavedienu, nedrÄ«kst aizmirst pÄrsÅ«tÄ«t aktÄ«vo laidumu uz citu pavedienu, lai turpmÄk aktivizÄtu cita pavediena darbÄ«bas jomu, atsaucoties uz Å”o laidumu.
VairÄku pavedienu programmÄÅ”anai ir arÄ« TracedExecutorService un lÄ«dzÄ«gi iesaiÅotÄji, kas automÄtiski pÄrsÅ«ta paÅ”reizÄjo diapazonu uz pavedienu, kad tiek palaisti asinhronie uzdevumi:
private ExecutorService executor = new TracedExecutorService(
Executors.newFixedThreadPool(10), GlobalTracer.get()
);
HttpClient httpClient = new TracingHttpClientBuilder().build();
ProblÄmas, ar kurÄm saskÄrÄmies
PupiÅas un DI ne vienmÄr darbojas, ja marÄ·ieris netiek izmantots servisÄ vai komponentÄ Autovadu savienojums Tracer var nedarboties, un jums bÅ«s jÄizmanto GlobalTracer.get().
AnotÄcijas nedarbojas, ja tas nav komponents vai pakalpojums, vai ja metode tiek izsaukta no tÄs paÅ”as klases blakus metodes. Jums ir jÄbÅ«t uzmanÄ«giem, lai pÄrbaudÄ«tu, kas darbojas, un jÄizmanto manuÄla izsekoÅ”anas izveide, ja @Traced nedarbojas. Varat arÄ« pievienot papildu kompilatoru java anotÄcijÄm, tad tÄm vajadzÄtu darboties visur.
MÄÄ£iniet ar resursiem nedarbojas groovy, jums ir jÄizmanto mÄÄ£inÄt beidzot.
Katram pakalpojumam ir jÄbÅ«t savam spring.application.name, ar kuru tiks reÄ£istrÄtas pÄdas. Ko dara atseviŔķs nosaukums pÄrdoÅ”anai un pÄrbaudei, lai tie netraucÄtu kopÄ.
Ja izmantojat GlobalTracer un runcis, tad visiem pakalpojumiem, kas darbojas Å”ajÄ runci, ir viens GlobalTracer, tÄpÄc tiem visiem bÅ«s viens un tas pats pakalpojuma nosaukums.
Pievienojot metodei pÄdas, jums jÄpÄrliecinÄs, ka tÄ netiek izsaukta daudzas reizes ciklÄ. Visiem izsaukumiem ir jÄpievieno viena kopÄja izsekoÅ”ana, kas garantÄ kopÄjo darba laiku. PretÄjÄ gadÄ«jumÄ tiks izveidota pÄrmÄrÄ«ga slodze.
Reiz JÄger-ui tika izteikti pÄrÄk lieli pieprasÄ«jumi par lielu skaitu pÄdu, un, tÄ kÄ viÅi negaidÄ«ja atbildi, viÅi to izdarÄ«ja vÄlreiz. TÄ rezultÄtÄ jaeger vaicÄjums sÄka Äst daudz atmiÅas un palÄninÄt elastÄ«bu. PalÄ«dzÄja restartÄt jaeger-query
Izsekojumu paraugu ÅemÅ”ana, uzglabÄÅ”ana un apskate
VarbÅ«tÄ«bas, kas filtrÄ pÄdas ar noteiktu varbÅ«tÄ«bu.
RatelimitÄÅ”ana, kas ierobežo pÄdu skaitu sekundÄ. Å os iestatÄ«jumus var konfigurÄt klientÄ vai nu jaeger-agent, vai savÄcÄjÄ. Tagad vÄrtÄtÄju kaudzÄ mÄs izmantojam const 1, jo pieprasÄ«jumu nav ļoti daudz, taÄu tie aizÅem daudz laika. NÄkotnÄ, ja tas radÄ«s pÄrmÄrÄ«gu slodzi sistÄmai, varat to ierobežot.
Ja izmantojat cassandra, pÄc noklusÄjuma tas saglabÄ pÄdas tikai divas dienas. MÄs lietojam elastÄ«gÄ meklÄÅ”ana un pÄdas tiek saglabÄtas visu laiku un netiek dzÄstas. Katrai dienai tiek izveidots atseviŔķs rÄdÄ«tÄjs, piemÄram, jaeger-service-2019-03-04. NÄkotnÄ jums ir jÄkonfigurÄ automÄtiska veco pÄdu tÄ«rÄ«Å”ana.
Lai skatÄ«tu pÄdas, jums ir nepiecieÅ”ams:
Atlasiet pakalpojumu, ar kuru vÄlaties filtrÄt pÄdas, piemÄram, tomcat7-default pakalpojumam, kas darbojas tomcat un kuram nevar bÅ«t sava nosaukuma.
PÄc tam atlasiet darbÄ«bu, laika intervÄlu un minimÄlo darbÄ«bas laiku, piemÄram, no 10 sekundÄm, lai veiktu tikai ilgas izpildes.
Dodieties uz kÄdu no pÄdÄm un paskatieties, kas tur palÄninÄs.
TurklÄt, ja ir zinÄms kÄds pieprasÄ«juma ID, varat atrast izsekoÅ”anu pÄc Ŕī ID, izmantojot tagu meklÄÅ”anu, ja Å”is ID ir reÄ£istrÄts izsekoÅ”anas diapazonÄ.