Service Tracing, OpenTracing thiab Jaeger

Service Tracing, OpenTracing thiab Jaeger

Hauv peb cov haujlwm peb siv microservice architecture. Thaum muaj kev tsis sib haum xeeb tshwm sim, ntau lub sij hawm siv rau kev saib xyuas thiab txheeb xyuas cov cav. Thaum nkag mus rau lub sijhawm ntawm kev ua haujlwm ntawm tus kheej rau hauv cov ntaub ntawv teev cia, feem ntau nyuaj rau kev nkag siab txog dab tsi ua rau kev hu xovtooj ntawm cov haujlwm no, txhawm rau taug qab cov txheej txheem ntawm kev ua lossis lub sijhawm hloov pauv ntawm ib qho haujlwm txheeb ze rau lwm qhov hauv cov kev pabcuam sib txawv.

Txhawm rau txo qis kev ua haujlwm ntawm tes, peb txiav txim siab siv ib qho ntawm cov cuab yeej taug qab. Yuav ua li cas thiab rau dab tsi koj tuaj yeem siv tracing thiab peb ua li cas nws yuav tau tham hauv kab lus no.

Cov teeb meem dab tsi tuaj yeem daws tau los ntawm kev taug qab?

  1. Nrhiav kev ua haujlwm tsis muaj zog ob qho tib si hauv ib qho kev pabcuam thiab hla tag nrho cov ntoo ua tiav ntawm txhua qhov kev pabcuam koom nrog. Piv txwv li:
    • Muaj ntau qhov kev hu luv luv ntawm cov kev pabcuam, piv txwv li, mus rau geocoding lossis mus rau database.
    • Ntev I / O tos, xws li hloov cov ntaub ntawv hauv lub network lossis nyeem ntawv los ntawm disk.
    • Ntev parsing.
    • Kev ua haujlwm ntev uas xav tau CPU.
    • Tshooj cai uas tsis xav tau kom tau txais qhov txiaj ntsig kawg thiab tuaj yeem raug tshem tawm lossis khiav ncua.
  2. Kom nkag siab meej txog qhov kev txiav txim hu ua dab tsi thiab yuav ua li cas thaum ua haujlwm.
    Service Tracing, OpenTracing thiab Jaeger
    Nws tuaj yeem pom tau tias, piv txwv li, Kev Thov tuaj rau WS kev pabcuam -> WS kev pabcuam ntxiv cov ntaub ntawv los ntawm R pabcuam -> tom qab ntawd xa daim ntawv thov mus rau V pabcuam -> V pabcuam rub tawm ntau cov ntaub ntawv los ntawm kev pabcuam. R pabcuam -> mus rau P pabcuam -> qhov kev pabcuam P rov mus rau kev pabcuam R -> pabcuam V tsis quav ntsej qhov tshwm sim thiab mus rau kev pabcuam J -> thiab tsuas yog tom qab ntawd rov qab teb rau kev pabcuam WS, thaum txuas ntxiv suav lwm yam hauv keeb kwm.
    Yog tsis muaj cov kab los yog cov ntaub ntawv ntxaws ntxaws rau tag nrho cov txheej txheem, nws yog qhov nyuaj heev kom nkag siab txog qhov tshwm sim tom qab saib tus lej thawj zaug, thiab cov lej tau tawg mus thoob plaws cov kev pabcuam sib txawv thiab muab zais tom qab ib pawg ntawm taum thiab kev sib tshuam.
  3. Kev sau cov ntaub ntawv hais txog tsob ntoo ua tiav rau kev soj ntsuam tom qab ncua. Nyob rau txhua theem ntawm kev ua tiav, koj tuaj yeem ntxiv cov ntaub ntawv uas muaj nyob rau ntawm theem no mus rau txoj kab thiab tom qab ntawd txheeb xyuas cov ntaub ntawv tawm tswv yim dab tsi coj mus rau qhov xwm txheej zoo li no. Piv txwv li:
    • Tus neeg siv ID
    • Txoj Cai
    • Hom kev xaiv
    • Log lossis ua yuam kev
  4. Hloov cov kab mus rau hauv ib qho kev ntsuas me me thiab kev tshuaj xyuas ntxiv hauv daim ntawv metrics.

Dab tsi tracing tuaj yeem teev. Span

Nyob rau hauv tracing muaj lub tswvyim ntawm ncua, qhov no yog ib qho analogue ntawm ib lub cav rau lub console. Span muaj:

  • Lub npe, feem ntau yog lub npe ntawm txoj kev uas tau ua tiav
  • Lub npe ntawm qhov kev pab cuam qhov kev ncua tau tsim
  • Tus kheej tshwj xeeb ID
  • Qee cov ntaub ntawv meta hauv daim ntawv tseem ceeb / tus nqi uas tau suav nrog hauv nws. Piv txwv li, txoj kev tsis muaj los yog seb txoj kev xaus nrog qhov yuam kev lossis tsis
  • Lub sijhawm pib thiab xaus ntawm qhov kev ua tiav no
  • Parent span ID

Txhua qhov span raug xa mus rau span collector kom tau txais kev cawmdim nyob rau hauv cov ntaub ntawv rau tom qab saib sai li sai tau thaum nws ua tiav nws qhov kev ua tiav. Nyob rau hauv lub neej yav tom ntej, koj tuaj yeem tsim ib tsob ntoo ntawm txhua qhov txuas los ntawm kev txuas lawv los ntawm niam txiv ID. Thaum txheeb xyuas, koj tuaj yeem pom, piv txwv li, tag nrho cov kev ncua hauv qee qhov kev pabcuam uas siv sijhawm ntau dua. Tom qab ntawd, mus rau ib ntu tshwj xeeb, saib tag nrho tsob ntoo saum toj no thiab hauv qab no span.

Service Tracing, OpenTracing thiab Jaeger

Opentrace, Jagger thiab peb siv nws li cas rau peb cov haujlwm

Muaj ib tug qauv Opentrace, uas piav qhia yuav ua li cas thiab dab tsi yuav tsum tau sau, yam tsis tau khi los ntawm kab mus rau ib qho kev siv tshwj xeeb hauv ib hom lus. Piv txwv li, nyob rau hauv Java, tag nrho cov ua hauj lwm nrog ib tug taug qab yog nqa tawm los ntawm ib tug ntau Opentrace API, thiab nyob rau hauv qab nws yuav tsum tau muab zais, piv txwv li, Jaeger los yog ib tug khoob qhov kev siv uas tsis muaj dab tsi.
Peb siv Mus yos hav zoov raws li kev siv ntawm Opentrace. Nws muaj ntau yam khoom siv:

Service Tracing, OpenTracing thiab Jaeger

  • Jaeger-tus neeg sawv cev yog tus neeg sawv cev hauv zos uas feem ntau tau teeb tsa ntawm txhua lub tshuab thiab cov kev pabcuam raug nkag rau hauv nws ntawm qhov chaw nres nkoj hauv zos. Yog tias tsis muaj tus neeg sawv cev, ces cov kab ntawm txhua qhov kev pabcuam ntawm lub tshuab no feem ntau raug tua
  • Jaeger-collector - txhua tus neeg sawv cev xa cov cim sau rau nws, thiab nws tso rau hauv cov ntaub ntawv xaiv
  • Database - lawv nyiam ib qho yog cassandra, tab sis peb siv elasticsearch, muaj kev siv rau ob peb lwm cov ntaub ntawv thiab kev siv hauv nco uas tsis txuag dab tsi rau disk.
  • Jaeger-query yog ib qho kev pabcuam uas nkag mus rau hauv cov ntaub ntawv thiab muab cov ntaub ntawv sau tseg rau kev tshuaj xyuas
  • Jaeger-ui yog lub web interface rau kev tshawb nrhiav thiab saib cov kab, nws khiav hauv jaeger-query

Service Tracing, OpenTracing thiab Jaeger

Ib qho kev sib cais tuaj yeem hu ua qhov kev siv opentrace jaeger rau cov lus tshwj xeeb, los ntawm cov spans raug xa mus rau jaeger-tus neeg sawv cev.
Txuas Jagger hauv Java nqis los rau kev siv io.opentracing.Tracer interface, tom qab ntawd tag nrho cov kab los ntawm nws yuav ya mus rau tus neeg sawv cev tiag.

Service Tracing, OpenTracing thiab Jaeger

Koj tseem tuaj yeem txuas cov khoom caij nplooj ntoos hlav opentracing-caij nplooj ntoos hlav-cloud-starter thiab kev siv los ntawm Jaeger opentracing-caij nplooj ntoos hlav-jaeger-cloud-starter uas yuav cia li teeb tsa kev taug qab rau txhua yam uas dhau los ntawm cov khoom no, piv txwv li http thov rau cov tswj hwm, thov rau cov ntaub ntawv ntawm jdbc, thiab lwm yam.

Sau cov kab hauv Java

Qhov chaw nyob rau sab saum toj tus thawj Span yuav tsum tau tsim, qhov no tuaj yeem ua tiav, piv txwv li los ntawm lub caij nplooj ntoos hlav tswj thaum tau txais kev thov, lossis manually yog tias tsis muaj. Nws kis tau los ntawm Scope hauv qab no. Yog tias qee txoj hauv qab no xav ntxiv Span, nws yuav siv sijhawm tam sim no activeSpan los ntawm Scope, tsim Span tshiab thiab hais tias nws niam txiv tau txais activeSpan, thiab ua rau Span tshiab nquag. Thaum cov kev pabcuam sab nraud raug hu, qhov kev ua haujlwm tam sim no raug xa mus rau lawv, thiab cov kev pabcuam no tsim cov spans tshiab txuas rau qhov ncua sij hawm no.
Txhua txoj haujlwm dhau los ntawm Tracer piv txwv; koj tuaj yeem tau txais los ntawm DI mechanism, lossis GlobalTracer.get() ua qhov hloov pauv thoob ntiaj teb yog tias DI mechanism tsis ua haujlwm. Los ntawm lub neej ntawd, yog tias tus tracer tsis tau pib, NoopTracer yuav raug xa rov qab uas tsis muaj dab tsi.
Tom ntej no, qhov tam sim no tau txais los ntawm tus neeg taug qab los ntawm ScopeManager, qhov tshiab tau tsim los ntawm qhov tam sim no nrog qhov txuas tshiab txuas nrog, thiab tom qab ntawd qhov tsim Scope raug kaw, uas kaw qhov tsim ncua sij hawm thiab rov qab Scope yav dhau los rau lub xeev nquag. . Scope yog khi rau ib tug xov, yog li thaum multi-threaded programming, koj yuav tsum nco ntsoov hloov lub active span mus rau lwm cov xov, rau ntxiv activation ntawm Scope ntawm lwm cov xov txuas rau qhov ncua sij hawm no.

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)) {
                ...
            }
        });
    }
}

Rau kev ua haujlwm ntau txoj xov, kuj tseem muaj TracedExecutorService thiab cov ntaub ntawv zoo sib xws uas tau xa mus rau qhov tam sim no mus rau cov xov thaum khiav haujlwm asynchronous:

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

Rau kev thov sab nraud http muaj TracingHttpClient

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

Teeb meem peb ntsib

  • Taum thiab DI tsis tas yuav ua haujlwm yog tias tus tracer tsis siv hauv kev pabcuam lossis cov khoom siv, ces Autowired Tracer yuav tsis ua haujlwm thiab koj yuav tau siv GlobalTracer.get().
  • Cov lus piav qhia tsis ua haujlwm yog tias nws tsis yog ib feem lossis kev pabcuam, lossis yog tias txoj kev hu los ntawm tus qauv nyob sib ze ntawm tib chav kawm. Koj yuav tsum tau ceev faj, xyuas seb ua haujlwm li cas, thiab siv phau ntawv qhia kev tsim yog tias @Traced tsis ua haujlwm. Koj tseem tuaj yeem txuas ntxiv compiler rau java annotations, ces nws yuav tsum ua haujlwm txhua qhov chaw.
  • Nyob rau hauv lub caij nplooj ntoos hlav qub thiab caij nplooj ntoos hlav khau raj, opentraing caij nplooj ntoos hlav huab nws pib-configuration tsis ua hauj lwm vim kab mob nyob rau hauv DI, ces yog hais tias koj xav kom cov kab nyob rau hauv lub caij nplooj ntoos hlav Cheebtsam ua hauj lwm cia li, koj yuav ua tau los ntawm analogy nrog. 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
  • Sim nrog cov peev txheej tsis ua haujlwm hauv groovy; koj yuav tsum siv sim thaum kawg.
  • Txhua qhov kev pabcuam yuav tsum muaj nws tus kheej spring.application.name nyob rau hauv uas cov cim yuav raug nkag. Yuav ua li cas hais txog lub npe cais rau kev muag khoom thiab kev sim, yog li tsis txhob sib xyaw ua ke.
  • Yog tias koj siv GlobalTracer thiab tomcat, ces tag nrho cov kev pabcuam khiav hauv lub tomcat no muaj ib qho GlobalTracer, yog li lawv txhua tus yuav muaj tib lub npe kev pabcuam.
  • Thaum ntxiv cov cim rau ib txoj hauv kev, koj yuav tsum nco ntsoov tias nws tsis raug hu ua voj voog ntau zaus. Koj yuav tsum tau ntxiv ib qho kab ke rau txhua qhov kev hu, uas yuav sau tag nrho lub sijhawm ua haujlwm. Txwv tsis pub, tshaj load yuav raug tsim.
  • Ib zaug nyob rau hauv jaeger-ui lawv tau thov loj heev rau ntau cov kab thiab, txij li thaum lawv tsis tos kom teb, lawv tau ua dua. Yog li ntawd, jaeger-query pib noj ntau lub cim xeeb thiab ua rau qeeb qeeb. Pab los ntawm restarting jaeger-query

Sampling, khaws cia thiab saib cov cim

Muaj peb hom taug sampling:

  1. Const uas xa thiab txuag tag nrho cov kab.
  2. Probabilistic uas lim cov cim nrog qee qhov tshwm sim.
  3. Ratemiting uas txwv tus naj npawb ntawm cov kab ib ob. Koj tuaj yeem teeb tsa cov kev teeb tsa no ntawm tus neeg siv khoom, xws li ntawm jaeger-tus neeg sawv cev lossis ntawm tus sau. Tam sim no peb siv const 1 hauv pawg valuator vim tsis muaj ntau qhov kev thov, tab sis lawv siv sijhawm ntev. Nyob rau hauv lub neej yav tom ntej, yog hais tias qhov no tso ib tug tsis tsim nyog load rau hauv lub system, koj muaj peev xwm txwv nws.

Yog tias koj siv cassandra, los ntawm lub neej ntawd nws khaws cov cim tsuas yog ob hnub. Peb siv ywj siab nrhiav thiab cov cim tau khaws cia rau tag nrho lub sijhawm thiab tsis raug tshem tawm. Ib qho kev ntsuas cais tau tsim rau txhua hnub, piv txwv li jaeger-service-2019-03-04. Nyob rau hauv lub neej yav tom ntej, koj yuav tsum configure tsis siv neeg ntxuav ntawm cov kab qub.

Txhawm rau saib cov cim koj yuav tsum:

  • Xaiv qhov kev pabcuam uas koj xav lim cov kab, piv txwv li tomcat7-default rau qhov kev pabcuam uas khiav hauv Tomcat thiab tsis tuaj yeem muaj nws lub npe.
  • Tom ntej no, xaiv qhov kev ua haujlwm, lub sijhawm ua haujlwm thiab lub sijhawm ua haujlwm yam tsawg kawg nkaus, piv txwv li los ntawm 10 vib nas this, tsuas yog siv sijhawm ntev.
    Service Tracing, OpenTracing thiab Jaeger
  • Mus rau ib qho ntawm cov kab thiab pom dab tsi tau qeeb nyob rau ntawd.
    Service Tracing, OpenTracing thiab Jaeger

Tsis tas li ntawd, yog tias qee qhov kev thov id paub, tom qab ntawd koj tuaj yeem nrhiav tau ib txoj hauv kev los ntawm tus ID no los ntawm kev tshawb nrhiav tag, yog tias tus ID no tau nkag rau hauv qhov ntev ntawm txoj kab.

Ntaub ntawv

Cov khoom

Video

Tau qhov twg los: www.hab.com

Ntxiv ib saib