Service Tracing, OpenTracing ary Jaeger

Service Tracing, OpenTracing ary Jaeger

Mampiasa maritrano microservice izahay amin'ny tetikasanay. Rehefa mitranga ny bottleneck amin'ny fampandehanana dia mandany fotoana betsaka amin'ny fanaraha-maso sy ny famakafakana ny logs. Rehefa mampiditra ny fotoanan'ny asa tsirairay ao anaty rakitra iray dia sarotra ny mahatakatra ny nahatonga ny fiantsoana ireo hetsika ireo, ny fanaraha-maso ny filaharan'ny hetsika na ny fiovan'ny fotoanan'ny hetsika iray mifandraika amin'ny serivisy hafa.

Mba hampihenana ny asa tanana dia nanapa-kevitra ny hampiasa ny iray amin'ireo fitaovana fanaraha-maso izahay. Momba ny fomba sy ny antony ahafahanao mampiasa tracing sy ny fomba nanaovanay izany, ary hodinihina ato amin'ity lahatsoratra ity.

Inona no olana azo vahana amin'ny tracing

  1. Mitadiava bottlenecks fampandehanana na ao anatin'ny serivisy tokana na ao amin'ny hazo famonoana manontolo eo anelanelan'ny serivisy rehetra mandray anjara. Ohatra:
    • Antso maro misesy fohy eo amin'ny serivisy, ohatra, amin'ny geocoding na amin'ny angon-drakitra.
    • Miandry I/O lava, toy ny fifindrana amin'ny tambazotra na famakiana kapila.
    • Fizarana data lava.
    • Fampandehanana maharitra mila cpu.
    • Fizarana kaody tsy ilaina hahazoana ny vokatra farany ary azo esorina na ahemotra.
  2. Fantaro mazava tsara amin'ny filaharana inona no antsoina ary inona no mitranga rehefa vita ny fandidiana.
    Service Tracing, OpenTracing ary Jaeger
    Hita fa, ohatra, ny fangatahana dia tonga tao amin'ny serivisy WS -> ny serivisy WS dia nanampy ny angon-drakitra tamin'ny alΓ lan'ny serivisy R -> avy eo dia nandefa fangatahana tany amin'ny serivisy V -> ny serivisy V dia nampiditra angon-drakitra betsaka avy amin'ny serivisy. R serivisy -> nandeha tany amin'ny serivisy P -> ny serivisy P dia nandeha nankany amin'ny serivisy R -> ny serivisy V dia tsy niraharaha ny vokatra ary nandeha tamin'ny serivisy J -> ary avy eo dia namerina ny valin'ny serivisy WS, raha nanohy ny kajy zavatra hafa tao ny ambadika.
    Raha tsy misy soritra na antontan-taratasy amin'ny antsipiriany momba ny dingana iray manontolo, dia sarotra be ny mahatakatra ny zava-mitranga rehefa mijery voalohany ny kaody, ary miparitaka amin'ny serivisy samihafa ny kaody ary miafina ao ambadiky ny fako sy ny interface.
  3. Fanangonana vaovao momba ny hazo famonoana ho an'ny fanadihadiana nahemotra manaraka. Amin'ny dingana tsirairay amin'ny famonoana dia azonao atao ny manampy fampahalalana amin'ny trace izay misy amin'ity dingana ity ary fantaro avy eo hoe inona no angon-drakitra fampidirana nitarika tranga mitovy. Ohatra:
    • Anara-mpampiasa
    • zo
    • Karazana fomba nofantenana
    • Log na famonoana hadisoana
  4. Famadihana ny dian ho ampahany amin'ny metrika ary famakafakana fanampiny efa miendrika metrika.

Inona no trace afaka miditra. androm

Ao amin'ny fanaraha-maso dia misy ny foto-kevitry ny elanelam-potoana, izany dia analogue amin'ny log iray, mankany amin'ny console. Ny spa dia manana:

  • Anarana, matetika ny anaran'ny fomba notanterahina
  • Ny anaran'ny serivisy izay namoronana ny elanelam-potoana
  • ID tokana manokana
  • Karazana fampahalalana meta amin'ny endriky ny fanalahidy/sarobidy izay nidirana tao anatiny. Ohatra, ny masontsivana fomba na ny fomba niafara tamin'ny fahadisoana na tsia
  • Fotoana fanombohana sy fiafarana amin'ity vanim-potoana ity
  • ID span ray aman-dreny

Ny elanelam-potoana tsirairay dia alefa any amin'ny mpanangom-bokatra mba hotehirizina ao amin'ny angon-drakitra mba hojerena any aoriana raha vao vita ny fanatanterahana azy. Amin'ny ho avy, azonao atao ny manangana hazo amin'ny velarana rehetra amin'ny alΓ lan'ny fampifandraisana amin'ny id ray aman-dreny. Rehefa mamakafaka ianao dia afaka mahita, ohatra, ny fotoana rehetra amin'ny serivisy sasany izay naharitra elaela kokoa. Fanampin'izay, amin'ny fandehanana any amin'ny velarana manokana, jereo ny hazo iray manontolo eo ambony sy eo ambanin'io elanelana io.

Service Tracing, OpenTracing ary Jaeger

Opentrace, Jagger ary ny fomba nampiharanay izany tamin'ny tetikasanay

Misy ny fenitra iraisana opentrace, izay mamaritra ny fomba sy ny tokony hanangonana, nefa tsy mifamatotra amin'ny fanarahana fampiharana manokana amin'ny fiteny rehetra. Ohatra, ao amin'ny Java, ny asa rehetra miaraka amin'ny dian dia atao amin'ny alΓ lan'ny Opentrace API mahazatra, ary eo ambaniny, ohatra, Jaeger na fampiharana tsy misy dikany tsy misy na inona na inona azo afenina.
Mampiasa izahay Hunter ho fampiharana ny Opentrace. Izy io dia ahitana singa maromaro:

Service Tracing, OpenTracing ary Jaeger

  • Jaeger-agent dia mpandraharaha eo an-toerana izay matetika apetraka amin'ny milina tsirairay ary ny serivisy dia miditra ao amin'ny seranan-tsambo mahazatra eo an-toerana. Raha tsy misy mpandraharaha, dia matetika ny soritr'aretina rehetra amin'ity milina ity dia kilemaina
  • Jaeger-collector - ny mpiasa rehetra dia mandefa trace voaangona ho azy, ary mametraka azy ireo ao amin'ny tahiry voafantina
  • Ny angon-drakitra no cassandra tiany indrindra, saingy mampiasa elasticsearch izahay, misy fampiharana ho an'ny angon-drakitra roa hafa ary fampiharana ao anaty fitadidiana izay tsy mitahiry na inona na inona amin'ny kapila.
  • Jaeger-query dia serivisy mankany amin'ny angon-drakitra ary mamerina ireo trace efa voaangona ho an'ny fanadihadiana
  • Jaeger-ui dia interface tsara amin'ny tranonkala hikaroka sy hijerena traces, mankany amin'ny jaeger-query

Service Tracing, OpenTracing ary Jaeger

Ny singa iray misaraka dia azo antsoina hoe fampiharana ny opentrace jaeger ho an'ny fiteny manokana, izay handefasana span amin'ny jaeger-agent.
Mampifandray an'i Jagger amin'ny Java dia midina amin'ny fampiharana ny interface io.opentracing.Tracer, aorian'izay dia hanidina any amin'ny tena agent ny trace rehetra amin'izany.

Service Tracing, OpenTracing ary Jaeger

Ho an'ny singa lohataona ihany koa, azonao atao ny mampifandray opentracing-spring-cloud-starter ary fampiharana avy amin'i Jaeger opentracing-spring-jaeger-cloud-starter izay handrindra ho azy ny tracing ho an'ny zavatra rehetra mandalo amin'ireo singa ireo, ohatra ny fangatahana http amin'ny mpanara-maso, ny fangatahana amin'ny database amin'ny alΓ lan'ny jdbc, sns.

Traces log in Java

Any amin'ny toerana ambony indrindra dia tsy maintsy mamorona ny Span voalohany, azo atao ho azy izany, ohatra, amin'ny fanaraha-maso ny lohataona rehefa misy fangatahana voaray, na amin'ny tanana raha tsy misy. Ampitaina amin'ny alalan'ny Scope etsy ambany. Raha te-hanampy Span ny iray amin'ireo fomba etsy ambany, dia alainy ny activeSpan amin'izao fotoana izao ao amin'ny Scope, mamorona Span vaovao ary milaza fa ny ray aman-dreniny no activeSpan vokatr'izany, ary mahatonga ny Span vaovao ho mavitrika. Rehefa miantso tolotra ivelany dia ampitaina amin'izy ireo ny elanelam-pandrosoana ankehitriny, ary ireo tolotra ireo dia mamorona velarana vaovao mifandraika amin'io fe-potoana io.
Ny asa rehetra dia mandeha amin'ny ohatra Tracer, azonao atao ny mahazo izany amin'ny alΓ lan'ny mekanika DI, na GlobalTracer.get () ho fari-piainana manerantany raha tsy mandeha ny mekanika DI. Amin'ny alΓ lan'ny default, raha tsy natomboka ny tracer dia hiverina ny NoopTracer izay tsy manao na inona na inona.
Fanampin'izay, azo avy amin'ny tracer amin'ny alΓ lan'ny ScopeManager ny sahan'izao fotoana izao, misy sehatra vaovao noforonina avy amin'ny ankehitriny miaraka amin'ny famatorana ny elanelam-potoana vaovao, ary avy eo dia mikatona ny Sakotra noforonina, izay manidy ny elanelam-pamoronana ary mamerina ny Saka teo aloha amin'ny ny fanjakana mavitrika. Ny sehatra dia mifamatotra amin'ny kofehy iray, ka rehefa fandaharana maromaro misy kofehy, dia tsy tokony hadinoinao ny mamindra ny elanelam-pandrefesana amin'ny kofehy hafa, ho an'ny fampahavitrihana bebe kokoa ny Sahan'ny kofehy iray hafa mifandraika amin'io elanelana io.

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

Ho an'ny fandaharana maromaro misy kofehy, dia misy ihany koa ny TracedExecutorService sy ireo fonosana mitovy amin'izany izay mamindra ho azy ny elanelam-potoana ankehitriny amin'ny kofehy rehefa atomboka ny asa asynchronous:

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

Ho an'ny fangatahana http ivelany dia misy TracingHttpClient

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

Olana natrehanay

  • Ny tsaramaso sy DI dia tsy mandeha foana raha tsy ampiasaina amin'ny serivisy na singa iray ny tracer Autowired Mety tsy mandeha ny Tracer ary tsy maintsy mampiasa GlobalTracer.get().
  • Tsy mandeha ny fanamarihana raha tsy singa na serivisy, na raha antsoina amin'ny fomba mifanila amin'ny kilasy iray ilay fomba. Mila mitandrina tsara ianao amin'ny fijerena izay mety ary ampiasao ny famoronana trace manual raha tsy mandeha ny @Traced. Azonao atao koa ny mampiditra compiler fanampiny ho an'ny java annotations, dia tokony hiasa na aiza na aiza izy ireo.
  • Ao amin'ny lohataona taloha sy lohataona boot, ny opentraing spring cloud autoconfiguration dia tsy mandeha noho ny bibikely ao amin'ny DI, dia raha tianao ny mandeha ho azy ny dian'ny singa lohataona dia azonao atao izany amin'ny alΓ lan'ny fanoharana amin'ny 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
  • Andramo amin'ny loharano dia tsy miasa amin'ny groovy, tsy maintsy mampiasa try farany ianao.
  • Ny serivisy tsirairay dia tsy maintsy manana spring.application.name manokana izay hidirana ny dian. Inona no atao hoe misaraka anarana ho an`ny fivarotana sy ny fitsapana, mba tsy hanelingelina azy ireo miaraka.
  • Raha mampiasa GlobalTracer sy tomcat ianao, dia manana GlobalTracer iray ny serivisy rehetra mandeha amin'ity tomcat ity, ka hanana anarana serivisy mitovy izy rehetra.
  • Rehefa manampy trace amin'ny fomba iray dia mila mahazo antoka ianao fa tsy antsoina imbetsaka ao anaty loop. Ilaina ny manampy soritra mahazatra ho an'ny antso rehetra, izay miantoka ny fotoana fiasana manontolo. Raha tsy izany, dia hisy enta-mavesatra be loatra.
  • Indray mandeha tany jaeger-ui, be loatra ny fangatahana natao ho an'ny soritra marobe, ary satria tsy niandry valiny izy ireo dia nanao izany indray. Vokatr'izany dia nanomboka nihinana fitadidiana be ny jaeger-query ary nampihena ny elastika. Manampy amin'ny famerenana ny jaeger-query

Sampling, fitehirizana ary fijerena soritra

Misy karazany telo sampling traces:

  1. Const izay mandefa sy mitahiry ny trace rehetra.
  2. Probabilistic izay manivana ny dian amin'ny mety ho azo.
  3. Ratelimiting izay mametra ny isan'ny dian isan-tsegondra. Azonao atao ny manitsy ireo toe-javatra ireo amin'ny mpanjifa, na amin'ny jaeger-agent na amin'ny mpanangona. Amin'izao fotoana izao dia mampiasa const 1 izahay ao amin'ny stack valuator, satria tsy dia be loatra ny fangatahana, fa maharitra ela izy ireo. Amin'ny ho avy, raha hampihatra enta-mavesatra be loatra amin'ny rafitra izany, dia azonao atao ny mametra izany.

Raha mampiasa cassandra ianao, dia mitahiry trace mandritra ny roa andro fotsiny izy io. Mampiasa izahay electeur ary ny dian dia voatahiry mandritra ny fotoana rehetra ary tsy voafafa. Misy index mitokana dia noforonina isan'andro, ohatra jaeger-service-2019-03-04. Amin'ny ho avy dia mila manamboatra fanadiovana mandeha ho azy amin'ny dian taloha ianao.

Mba hijerena ireo trace dia mila:

  • Safidio ny serivisy tianao hanivana ny dian, ohatra, tomcat7-default ho an'ny serivisy izay mandeha ao amin'ny tomcat ary tsy manana ny anarany manokana.
  • Avy eo safidio ny fandidiana, ny elanelam-potoana ary ny ora fiasana kely indrindra, ohatra, manomboka amin'ny 10 segondra, mba hanaovana famonoana lava.
    Service Tracing, OpenTracing ary Jaeger
  • Mankanesa any amin'ny iray amin'ireo dian ary jereo izay miadana ao.
    Service Tracing, OpenTracing ary Jaeger

Ary koa, raha fantatra ny id fangatahana sasany, dia afaka mahita trace amin'ity id ity ianao amin'ny alΓ lan'ny fikarohana tag, raha toa ka tafiditra ao anatin'ny elanelam-potoana io id io.

tahirin-kevitra

Articles

Π’ΠΈΠ΄Π΅ΠΎ

Source: www.habr.com

Add a comment