Service Tracing, OpenTracing uye Jaeger

Service Tracing, OpenTracing uye Jaeger

Isu tinoshandisa microservice architecture mumapurojekiti edu. Kana mabhodhoro ekuita achiitika, nguva yakawanda inopedzwa kutarisa uye kupatsanura matanda. Paunenge uchiisa nguva dzekushanda kwemunhu kune regi faira, zvinowanzonetsa kunzwisisa kuti chii chakatungamira mukuchemedzerwa kweaya maoparesheni, kuronda kutevedzana kwezviito kana nguva yekuchinja kweimwe oparesheni inoenderana neimwe mumasevhisi akasiyana.

Kuti tideredze basa remaoko, takasarudza kushandisa chimwe chezvishandiso zvekutevera. Nezve kuti sei uye nei uchigona kushandisa kutsvaga uye kuti takazviita sei, uye zvichakurukurwa muchinyorwa chino.

Ndeapi matambudziko anogona kugadziriswa nekutsvaga

  1. Tsvaga mabhodhoro ekuita mukati mesevhisi imwe chete uye mumuti wese wekuuraya pakati pesevhisi iri kutora chikamu. Semuyenzaniso:
    • Mazhinji mapfupi anoteedzana mafoni pakati pemasevhisi, semuenzaniso, kune geocoding kana kune dhatabhesi.
    • Yakareba I/O inomirira, senge network kutamiswa kana disk kuverenga.
    • Yakareba data parsing.
    • Kushanda kwenguva refu kunoda CPU.
    • Zvikamu zvekodhi izvo zvisingadiwi kuwana mhedzisiro yekupedzisira uye zvinogona kubviswa kana kunonoka.
  2. Nyatsonzwisisa munhevedzano chii chinonzi uye chii chinoitika kana oparesheni ichiitwa.
    Service Tracing, OpenTracing uye Jaeger
    Zvinogona kuoneka kuti, semuenzaniso, Chikumbiro chakauya kune WS sevhisi -> iyo WS sevhisi yakawedzera iyo data kuburikidza neR sevhisi -> ndokutumira chikumbiro kune V sevhisi -> iyo V sevhisi yakatakura yakawanda data kubva R sevhisi -> yakaenda kuP sevhisi -> iyo P sevhisi yakaenda zvakare kushumiro R -> sevhisi V yakafuratira mhedzisiro ndokuenda kushumiro J -> ndokuzongodzosera mhinduro kune sevhisi WS, ichienderera mberi kuverenga chimwe chinhu mukati. kumashure.
    Pasina tsvakiridzo yakadaro kana magwaro akadzama ehurongwa hwese, zvakanyanya kuoma kunzwisisa zviri kuitika kana uchitarisa kodhi kekutanga, uye iyo kodhi inopararira kune akasiyana masevhisi uye yakavanzwa kuseri kweboka remabhini uye maficha.
  3. Kuunganidzwa kweruzivo nezve muti wekuurayisa kune inotevera deferred analysis. Pane imwe neimwe nhanho yekuuraya, iwe unogona kuwedzera ruzivo kune kuteedzera kunowanikwa pane ino nhanho uye wobva waona kuti chii chekuisa data chakatungamira kune yakafanana mamiriro. Semuyenzaniso:
    • User ID
    • Kodzero
    • Rudzi rwenzira yakasarudzwa
    • Log kana kukanganisa kukanganisa
  4. Kushandura maronda kuita subset yemametrics uye kumwe kuongorora kwatova muchimiro chemetrics.

Ndeipi trace inogona kurodha. Span

Mukutsvaga pane pfungwa yespan, iyi analogue yerogi imwe, kune iyo console. Iyo spa ine:

  • Zita, kazhinji zita renzira yakaitwa
  • Zita rebasa rakagadzirwa
  • Yakasarudzika ID
  • Imwe mhando yeruzivo rwemeta muchimiro chekiyi / kukosha kwakapinda mairi. Semuyenzaniso, nzira parameters kana nzira yakapera nekukanganisa kana kwete
  • Nguva dzekutanga nekupera dzenguva iyi
  • ID yevabereki

Imwe neimwe span inotumirwa kumuunganidzi wespan kuti ichengetwe mudhatabhesi kuti iongororwe gare gare kana ichinge yapedza kuita kwayo. Mune ramangwana, unogona kuvaka muti wese spans nekubatanidza nemubereki id. Paunenge uchiongorora, unogona kuwana, semuenzaniso, zvese spans mune rimwe sevhisi zvakatora nguva inopfuura imwe nguva. Uyezve, nekuenda kune imwe span chaiyo, ona muti wose pamusoro uye pazasi ichi span.

Service Tracing, OpenTracing uye Jaeger

Opentrace, Jagger uye mashandisiro atakaita mapurojekiti edu

Pane mwero wakafanana opentrace, iyo inotsanangura kuti sei uye chii chinofanira kuunganidzwa, pasina kusungirirwa nekutsvaga kune imwe nzira yekushandisa mune chero mutauro. Semuyenzaniso, muJava, basa rese rine zviteshi rinoitwa kuburikidza neyakajairwa Opentrace API, uye pasi payo, semuenzaniso, Jaeger kana isina chinhu default kuita iyo isingaite chinhu inogona kuvanzwa.
Tiri kushandisa Muvhimi sekushandiswa kweOpentrace. Inosanganisira zvinhu zvakati wandei:

Service Tracing, OpenTracing uye Jaeger

  • Jaeger-agent mumiririri wepano anowanzo kuisirwa pamushini wega wega uye masevhisi anopinzwa mauri pachiteshi chenzvimbo. Kana pasina mumiririri, zvino kuteera kwese masevhisi pamushini uyu kunowanzo kuvharwa
  • Jaeger-muunganidzi - vese vamiririri vanotumira akaunganidzwa traces kwairi, uye inovaisa mune yakasarudzwa dhatabhesi
  • Iyo dhatabhesi ndiyo yavo yavanoda cassandra, asi isu tinoshandisa elasticsearch, kune mashandisirwo emamwe akati wandei dhatabhesi uye in-memory kuita iyo isingachengetedze chero chinhu kudhisiki.
  • Jaeger-query ibasa rinoenda kune dhatabhesi uye rinodzoka rakatounganidzwa maronda ekuongorora
  • Jaeger-ui iwebhu interface yekutsvaga uye yekuona zviteshi, inoenda kune jaeger-mubvunzo.

Service Tracing, OpenTracing uye Jaeger

Chimwe chikamu chakasiyana chinogona kunzi kuitiswa kweopentrace jaeger yemitauro chaiyo, kuburikidza iyo spans inotumirwa kune jaeger-agent.
Kubatanidza Jagger muJava inosvika pakushandisa iyo io.opentracing.Tracer interface, mushure mezvo zvese zvinoteedzera kuburikidza nazvo zvichabhururuka kuenda kune chaiyo mumiriri.

Service Tracing, OpenTracing uye Jaeger

Uyewo nokuda kwechikamu chechitubu, unogona kubatanidza opentracing-spring-cloud-starter uye kuita kubva kuna Jaeger opentracing-spring-jaeger-cloud-starter iyo inozogadzirisa kutsvaga kwese kunopfuura nepakati pezvikamu izvi, semuenzaniso http zvikumbiro kune vatongi, zvikumbiro kune dhatabhesi kuburikidza nejdbc, nezvimwe.

Inotsvaga matanda muJava

Pane imwe nzvimbo padanho repamusoro, yekutanga Span inofanira kugadzirwa, izvi zvinogona kuitwa otomatiki, semuenzaniso, nemutongi wechirimo kana chikumbiro chagamuchirwa, kana nemaoko kana pasina. Inobva yafambiswa kuburikidza neScope iri pazasi. Kana chero nzira iri pazasi ichida kuwedzera Span, zvinotora yazvino activeSpan kubva kuScope, inogadzira Span nyowani uye inoti mubereki wayo ndiye anokonzeresa activeSpan, uye inoita kuti Span itsva ishande. Pakudaidza masevhisi ekunze, iyo yazvino inoshanda span inopfuudzwa kwavari, uye iwo masevhisi anogadzira mitsva mitsva inoenderana neichi span.
Basa rese rinopfuura nemumuenzaniso weTracer, unogona kuiwana kuburikidza neDI mechanical, kana GlobalTracer.get () seshanduko yepasi rose kana DI michina ikasashanda. By default, kana tracer isati yatangwa, NoopTracer inodzoka iyo isingaite chinhu.
Kupfuurirazve, chiyero chazvino chinowanikwa kubva kutracer kuburikidza neScopeManager, chiyero chitsva chinogadzirwa kubva kune chazvino chine chinosungirirwa chespan nyowani, uye ipapo iyo yakagadzirwa Scope inovharwa, iyo inovhara yakasikwa span uye inodzosera yapfuura Scope ku. mamiriro anoshanda. Chiyero chakasungirirwa kune shinda, saka kana akawanda-akarukwa programming, haufanire kukanganwa kuendesa iyo inoshanda span kune imwe shinda, kuti uenderere mberi activation yeChiyero cheimwe shinda nekutarisa ichi span.

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

Kune akawanda-akarukwa hurongwa, kune zvakare TracedExecutorService uye akafanana wrappers anongoendesa otomatiki nguva iripo kune shinda kana asynchronous mabasa atanga:

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

Zvekunze http zvikumbiro zviripo TracingHttpClient

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

Matambudziko atakatarisana nawo

  • Bhinzi uye DI hazviwanzo kushanda kana tracer isingashandiswe musevhisi kana chikamu, ipapo Autowired Tracer inogona kusashanda uye uchafanirwa kushandisa GlobalTracer.get().
  • Zviziviso hazvishande kana isiri chikamu kana sevhisi, kana iyo nzira yakadanwa kubva kune yevavakidzani nzira yekirasi imwechete. Iwe unofanirwa kungwarira kutarisa kuti chii chinoshanda uye shandisa manyorero echisikigo kana @Traced isingashande. Iwe unogona zvakare kubatanidza imwe compiler ye java zvirevo, saka ivo vanofanirwa kushanda kwese.
  • Muchitubu chekare uye chitubu bhutsu, iyo yakavhurika chitubu gore autoconfiguration haishande nekuda kwebugs muDI, saka kana iwe uchida kuti zvinoteedzera zviri muchikamu chechirimo zvishande otomatiki, unogona kuzviita nekufananidza ne. 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
  • Edza nezviwanikwa hazvishande mugroovy, unofanirwa kushandisa edza pakupedzisira.
  • Sevhisi yega yega inofanirwa kunge iine yayo yega spring.application.name pasi pematanho achaiswa. Chii chinonzi zita rakaparadzana rekutengesa uye bvunzo, kuti urege kuvhiringidza pamwe chete.
  • Kana iwe ukashandisa GlobalTracer uye tomcat, saka ese masevhisi ari kushanda mune iyi tomcat ane imwe GlobalTracer, saka ivo vese vachange vaine zita rakafanana rebasa.
  • Paunenge uchiwedzera maitiro kune imwe nzira, iwe unofanirwa kuve nechokwadi kuti haina kudanwa kakawanda muchiuno. Izvo zvinodikanwa kuwedzera imwe yakajairika trace kune ese mafoni, ayo anovimbisa iyo yakazara nguva yebasa. Zvikasadaro, mutoro wakawandisa uchagadzirwa.
  • Pane imwe nguva muJaeger-ui, zvikumbiro zvakakura zvikuru zvakaitwa nokuda kwenhamba huru yemaronda, uye sezvo vasina kumirira mhinduro, vakazviita zvakare. Nekuda kweizvozvo, jaeger-query yakatanga kudya ndangariro zhinji uye inonokera pasi elastic. Kubatsirwa nekutangazve jaeger-query

Sampling, kuchengeta uye kuona zvisaririra

Kune marudzi matatu sampling traces:

  1. Const iyo inotumira uye inochengetedza zvese zvinoteedzera.
  2. Probabilistic iyo inosefa inoteedzera neimwe mikana yakapihwa.
  3. Ratelimiting iyo inoganhura nhamba yezvironda pasekondi. Iwe unogona kugadzirisa izvi zvigadziriso pamutengi, ingave pane jaeger-agent kana pane muunganidzi. Iye zvino isu tinoshandisa const 1 muvaluator stack, sezvo pasina zvikumbiro zvakawanda, asi zvinotora nguva yakareba. Mune ramangwana, kana izvi zvichizoremedza zvakanyanya pane system, unogona kuzvimisa.

Kana iwe ukashandisa cassandra, saka nekusarudzika inongochengeta zviteshi kwemazuva maviri. Tiri kushandisa elasticsearch uye mitsva inochengeterwa nguva yese uye haina kudzimwa. Indekisi yakaparadzana inogadzirwa zuva rega rega, semuenzaniso jaeger-service-2019-03-04. Mune ramangwana, iwe unofanirwa kugadzirisa otomatiki kuchenesa kwemaitiro ekare.

Kuti uone maitiro aunoda:

  • Sarudza iyo sevhisi yaunoda kusefa mitsva, semuenzaniso, tomcat7-default yesevhisi iri kushanda mu tomcat uye haigone kuve nezita rayo.
  • Wobva wasarudza kuvhiyiwa, nguva yenguva uye nguva shoma yekushanda, semuenzaniso kubva pamasekonzi gumi, kutora kuuraya kwakareba chete.
    Service Tracing, OpenTracing uye Jaeger
  • Enda kune imwe yenzira uye uone kuti chii chainonoka ipapo.
    Service Tracing, OpenTracing uye Jaeger

Zvakare, kana imwe id yekukumbira ichizivikanwa, saka iwe unogona kuwana kuteedzera neiyi id kuburikidza nekutsvaga tag, kana id iyi yaiswa mukati mekutevera span.

Zvinyorwa

Articles

Π’ΠΈΠ΄Π΅ΠΎ

Source: www.habr.com

Voeg