Raadinta adeegga, OpenTracing iyo Jaeger

Raadinta adeegga, OpenTracing iyo Jaeger

Waxaan mashruucyadayada ku isticmaalnaa qaab-dhismeedka microservice. Marka caqabadaha waxqabadku dhacaan, waqti badan ayaa lagu bixiyaa la socodka iyo falanqaynta diiwaannada. Marka la galiyo wakhtiyada hawlgallada shaqsiga ah galka log, inta badan way adagtahay in la fahmo waxa keenay u yeedhida hawlgaladan, si loola socdo isku xigxiga ficilada ama wakhtiga wareejinta hal hawlgal marka loo eego adeegyada kala duwan.

Si loo yareeyo shaqada gacanta, waxaan go'aansanay inaan isticmaalno mid ka mid ah qalabka raadinta. Ku saabsan sida iyo sababta aad u isticmaali karto raadinta iyo sida aan u sameynay, waxaana lagu falanqeyn doonaa maqaalkan.

Waa maxay dhibaatooyinka lagu xallin karo raadinta

  1. Ka hel caqabadaha wax qabad ee hal adeeg gudaheed iyo dhammaan geedka fulinta inta u dhaxaysa dhammaan adeegyada ka qaybqaadashada. Tusaale ahaan:
    • Wicitaano badan oo gaagaaban oo xiriir ah ayaa udhaxeeya adeegyada, tusaale ahaan, xaga juqraafiga ama xogta xogta.
    • I/O dheer ayaa sugaya, sida wareejinta shabakada ama akhrinta saxanka.
    • Qiimaynta xogta dheer
    • Hawlgallada dheer ee u baahan CPU.
    • Qaybaha koodka ee aan loo baahnayn si loo helo natiijada kama dambaysta ah oo laga saari karo ama dib loo dhigi karo.
  2. Si cad u fahan sida ay isugu xigto waxa loo yaqaan iyo waxa dhacaya marka qaliinka la sameeyo.
    Raadinta adeegga, OpenTracing iyo Jaeger
    Waxaa la arki karaa, tusaale ahaan, Codsiga wuxuu ku yimid adeegga WS -> adeegga WS wuxuu ku kabay xogta iyada oo loo marayo adeegga R -> ka dibna codsi u diray adeegga V -> adeegga V ayaa ka soo buuxiyay xog badan Adeegga R -> wuxuu aaday adeegga P -> adeegga P wuxuu mar kale u aaday adeegga R -> adeegga V ayaa iska indhatiray natiijadii oo aaday adeegga J -> oo kaliya ka dibna ku soo celiyay jawaabta adeegga WS, iyadoo la sii wado xisaabinta wax kale asalka.
    Iyadoo aan la helin raad raac ama dukumeenti faahfaahsan oo ku saabsan geeddi-socodka oo dhan, aad bay u adag tahay in la fahmo waxa dhacaya marka la eego koodhka markii ugu horeysay, iyo koodka ayaa ku kala firirsan adeegyo kala duwan oo lagu qariyo gadaasha qashinka iyo is-dhexgalka.
  3. Uruurinta macluumaadka ku saabsan geedka fulinta ee falanqaynta dib loo dhigay. Marxalad kasta oo fulin ah, waxaad ku dari kartaa macluumaadka raadraaca la heli karo marxaladan ka dibna waxaad ogaan kartaa xogta la galiyay ee keentay dhacdo la mid ah. Tusaale ahaan:
    • Aqoonsiga isticmaale
    • Xuquuqda
    • Nooca habka la doortay
    • Gelida ama qaladka fulinta
  4. U rogida raadadka qayb-hoosaadyo cabbiro iyo falanqayn dheeraad ah oo horeba u ahaa qaab cabbir.

Waa maxay raad geli kara Baaxadda

Raadinta waxaa jira fikradda taako, kani waa analooga hal log, oo ku socda console-ka. HBS waxay leedahay:

  • Magaca, badanaa magaca habka la fuliyay
  • Magaca adeegga kaas oo taako la soo saaray
  • Aqoonsi gaar ah oo u gaar ah
  • Nooc ka mid ah macluumaadka meta oo ah qaab fure/qiimo ah oo la geliyey. Tusaale ahaan, habka cabbiraadda ama habka ayaa ku dhammaaday khalad iyo in kale
  • Bilawga iyo dhamaadka wakhtiyadan
  • Aqoonsiga muddada waalidka

Taako kasta waxa loo diraa taako ururiyaha si loogu kaydiyo kaydka xogta si dib loogu eego isla marka uu dhameeyo fulintiisa. Mustaqbalka, waxaad dhisi kartaa geed dhan walba ah adiga oo ku xiraya aqoonsiga waalidka. Marka la falanqeynayo, waxaad heli kartaa, tusaale ahaan, dhammaan taako ka mid ah adeegyada qaarkood oo qaatay wax ka badan wakhti. Dheeraad ah, adoo aadaya taako gaar ah, arag geedka dhan ee korka iyo hoostiisa taaggan.

Raadinta adeegga, OpenTracing iyo Jaeger

Opentrace, Jagger iyo sida aan ugu fulinay mashaariicdayada

Waxaa jira halbeeg guud daah furnaan, kaas oo qeexaya sida iyo waxa la ururinayo, iyada oo aan lagu xidhin raadraaca hirgelinta gaar ah ee luqad kasta. Tusaale ahaan, Java, dhammaan shaqada raadraaca waxaa lagu fuliyaa iyada oo loo marayo Opentrace API-ga caadiga ah, iyo hoostiisa, tusaale ahaan, Jaeger ama hirgelin faaruq ah oo faaruq ah oo aan waxba qaban karin lama qarin karo.
Waxaan isticmaaleynaa Jaeger sida hirgelinta Opentrace. Waxay ka kooban tahay dhawr qaybood:

Raadinta adeegga, OpenTracing iyo Jaeger

  • Jaeger-agent waa wakiil maxalli ah oo inta badan lagu rakibo mishiin kasta oo adeegyadu waxa ay galaan dekedda caadiga ah ee deegaanka. Haddii aysan jirin wakiil, markaas raadadka dhammaan adeegyada mashiinkaan badanaa waa naafo
  • Jaeger-Collector - dhammaan wakiillada waxay u soo diraan raad ururin, waxayna ku dhejiyaan xogta la doortay.
  • Kaydka kaydku waa cassandra ay door bidaan, laakiin waxaanu isticmaalnaa elasticsearch, waxa jira hirgelinyo dhawr kayd oo kale ah iyo hirgelinta xusuusta aan waxba ku kaydin diskka
  • Jaeger-query waa adeeg taga kaydka xogta oo soo celisa raadadkii hore loo soo ururiyay si loo baaro
  • Jaeger-ui waa shabakad shabakadeed oo loogu talagalay raadinta iyo daawashada raadadka, waxay aadaysaa jaeger-query

Raadinta adeegga, OpenTracing iyo Jaeger

Qayb gaar ah ayaa lagu magacaabi karaa hirgelinta jaeger-ka furan ee luuqadaha gaarka ah, kaas oo taako loo diro wakiilka jaeger-ka.
Isku xirka Jagger ee Java waxay hoos ugu dhacdaa hirgelinta io.opentracing.Tracer interface, ka dib dhammaan raadadka iyada oo loo duuli doono wakiilka dhabta ah.

Raadinta adeegga, OpenTracing iyo Jaeger

Sidoo kale qaybta guga, waxaad ku xidhi kartaa furitaanka-guga-daruur-bilowga iyo fulinta ka Jaeger furitaanka-guga-jaeger-daruur-bilaabaha kaas oo si toos ah u habayn doona raadinta wax kasta oo soo mara qaybahan, tusaale ahaan codsiyada http ee kontaroolayaasha, codsiyada database-ka iyada oo loo marayo jdbc, iwm.

Raad gasha Java

Meel heerka sare ah, Baabka ugu horreeya waa in la abuuraa, tan si toos ah ayaa loo samayn karaa, tusaale ahaan, kantaroolaha guga marka codsiga la helo, ama gacanta haddii aanu midna jirin. Ka dib waxaa lagu kala qaadaa iyadoo loo marayo Baaxadda hoose. Haddi habka hoose uu rabo in lagu daro Span, waxa ay ka qaadanaysaa Baaxadda firfircoon ee hadda jirta, waxa ay abuurtaa taako cusub oo sheegta in waalidku yahay natiijadii Span-ka firfircoon, oo waxa uu ka dhigayaa Span-ka cusub mid firfircoon. Markaad wacdo adeegyada dibadda, wakhtiga firfircoon ee hadda jira ayaa loo gudbiyaa iyaga, adeegyadaasna waxay abuuraan taako cusub iyada oo la tixraacayo muddadan.
Dhammaan shaqadu waxay martaa tusaale ahaan Tracer, waxaad ka heli kartaa habka DI, ama GlobalTracer.get () sida doorsoome caalami ah haddii habka DI uusan shaqayn. Sida caadiga ah, haddii raadiyaha aan la bilaabin, NoopTracer ayaa soo laaban doona kaas oo aan waxba qaban.
Intaa waxaa dheer, baaxadda hadda jirta waxaa laga helayaa raadiyaha iyada oo loo marayo ScopeManager, baaxad cusub ayaa laga abuurayaa kan hadda jira oo leh xiritaan dhererka cusub, ka dibna Baaxadda la abuuray waa la xirayaa, taas oo xireysa taako la abuuray oo soo celisa Baaxaddii hore gobolka firfircoon. Baaxadda waxay ku xidhan tahay dun, marka marka la samaynayo barnaamijyo badan oo taxane ah, waa inaadan iloobin inaad u wareejiso taako firfircooni dun kale, si aad u sii hawlgeliso Baaxadda dun kale iyada oo la tixraacayo taako kale.

io.opentracing.Tracer tracer = ...; // GlobalTracer.get()

void DoSmth () {
   try (Scope scope = tracer.buildSpan("DoSmth").startActive(true)) {
      ...
   }
}
void DoOther () {
    Span span = tracer.buildSpan("someWork").start();
    try (Scope scope = tracer.scopeManager().activate(span, false)) {
        // Do things.
    } catch(Exception ex) {
        Tags.ERROR.set(span, true);
        span.log(Map.of(Fields.EVENT, "error", Fields.ERROR_OBJECT, ex, Fields.MESSAGE, ex.getMessage()));
    } finally {
        span.finish();
    }
}

void DoAsync () {
    try (Scope scope = tracer.buildSpan("ServiceHandlerSpan").startActive(false)) {
        ...
        final Span span = scope.span();
        doAsyncWork(() -> {
            // STEP 2 ABOVE: reactivate the Span in the callback, passing true to
            // startActive() if/when the Span must be finished.
            try (Scope scope = tracer.scopeManager().activate(span, false)) {
                ...
            }
        });
    }
}

Barnaamijyada xadhkaha badan leh, waxa kale oo jira TracedExecutorService iyo duubo la mid ah kuwaas oo si toos ah ugu sii gudbiya taako hadda dunta marka hawlo isku mid ah la bilaabo:

private ExecutorService executor = new TracedExecutorService(
    Executors.newFixedThreadPool(10), GlobalTracer.get()
);

Codsiyada http dibadda ah waxaa jira RaadintaHttpClient

HttpClient httpClient = new TracingHttpClientBuilder().build();

Dhibaatooyin aan la kulanay

  • Digirta iyo DI had iyo jeer ma shaqeeyaan haddii raadiyaha aan loo isticmaalin adeeg ama qayb, markaa Si toos ah Raadiyaha waxaa laga yaabaa inuusan shaqeynin waana inaad isticmaashaa GlobalTracer.get().
  • Qoraaladu ma shaqeeyaan haddii aysan ahayn qayb ama adeeg, ama haddii habka loogu yeero habka deriska ah ee isku fasalka ah. Waa inaad ka taxadirtaa si aad u hubiso waxa shaqaynaya oo aad isticmaasho raad abuurka gacanta haddii @Traced shaqayn waayo. Waxa kale oo aad ku lifaaqi kartaa iskudubarid dheeraad ah oo loogu talagalay sharraxaadda Java, ka dibna waa inay meel kasta ka shaqeeyaan.
  • Guga hore iyo kabo guga, is-habaynta dariiqa guga ee fur-furka ma shaqeynayo sababtoo ah dhiqlaha DI, markaa haddii aad rabto in raadadka qaybaha guga ay si toos ah u shaqeeyaan, waxaad ku samayn kartaa adigoo isbarbar dhigaya. github.com/opentracing-contrib/java-spring-jaeger/blob/master/opentracing-spring-jaeger-starter/src/main/java/io/opentracing/contrib/java/spring/jaeger/starter/JaegerAutoConfiguration.java
  • Isku day kheyraadku kuma shaqeynayo groovy, waa inaad isticmaashaa isku day ugu dambeyntii.
  • Adeeg kastaa waa inuu lahaadaa spring.application.magac u gaar ah oo raadadka lagu qori doono. Maxaa magac gaar ah u leh iibka iyo imtixaanka, si aan loo faragelin iyaga si wadajir ah.
  • Haddii aad isticmaasho GlobalTracer iyo tomcat, markaa dhammaan adeegyada ku shaqeeya tomcat-kan waxay leeyihiin hal GlobalTracer, markaa dhammaantood waxay yeelan doonaan magac adeeg oo isku mid ah.
  • Markaad ku darto raadadka habka, waxaad u baahan tahay inaad hubiso inaan marar badan loogu yeerin wareeg. Waa lagama maarmaan in lagu daro hal raad caadi ah dhammaan wicitaanada, taas oo dammaanad qaadaysa wadarta wakhtiga shaqada. Haddii kale, culeys xad dhaaf ah ayaa la abuuri doonaa.
  • Mar ay Jaeger-ui, codsiyo aad u weyn u soo jeediyeen tiro badan oo raadad ah, iyo mar haddii ay jawaabi waayeen, ayay haddana sameeyeen. Natiijo ahaan, jaeger-query wuxuu bilaabay inuu cuno xusuus badan oo uu hoos u dhigo laastikada. Waxa caawiyay dib u bilaabay jaeger-question

Samaynta, kaydinta iyo daawashada raadadka

Waxaa jira saddex nooc raadka muunad:

  1. Const kaas oo soo dira oo kaydiya dhammaan raadadka
  2. Probabilistic kaas oo shaandheynaya raadadka iyada oo ay jirto suurtogalnimo la siiyay.
  3. Qiimaynta taas oo xaddidaysa tirada raadadka ilbiriqsikii. Waxaad u habayn kartaa goobahan macmiilka, ha ahaato wakiilka jaeger ama ururiyaha. Hadda waxaan isticmaalnaa const 1 ee xirmooyinka qiimeeyaasha, maadaama aysan jirin codsiyo aad u badan, laakiin waxay qaataan waqti dheer. Mustaqbalka, haddii tani ay culeys xad dhaaf ah ku soo rogi doonto nidaamka, waad xaddidi kartaa.

Haddii aad isticmaasho cassandra, ka dib asal ahaan waxay kaydisaa raadadka laba maalmood oo keliya. Waxaan isticmaaleynaa laascaanood raadadkana waa la kaydiyaa wakhti kasta lamana tirtiro. Tusi gooni ah ayaa loo sameeyay maalin kasta, tusaale ahaan adeeg-jaeger-2019-03-04. Mustaqbalka, waxaad u baahan tahay inaad habayso nadiifinta tooska ah ee raadadkii hore.

Si aad u aragto raadadka waxaad u baahan tahay:

  • Dooro adeegga aad rabto inaad ku shaandhayso raadadka, tusaale ahaan, tomcat7-default adeeg ka dhex socda tomcat oo aan yeelan karin magaciisa.
  • Ka dib dooro hawlgalka, inta u dhaxaysa wakhtiga iyo wakhtiga ugu yar ee hawlgalka, tusaale ahaan 10 ilbiriqsi, si aad u qaadato xukun dil ah oo dheer.
    Raadinta adeegga, OpenTracing iyo Jaeger
  • Tag mid ka mid ah raadadka oo arag waxa halkaa ka gaabinaya.
    Raadinta adeegga, OpenTracing iyo Jaeger

Sidoo kale, haddii qaar ka mid ah id codsi la yaqaan, markaas waxaad ka heli kartaa raad by id this iyada oo la isticmaalayo tag search ah, haddii id this waxaa la galay taako raad.

Dukumentiyada

Articles

Video

Source: www.habr.com

Add a comment