Service Tracing, OpenTracing ndi Jaeger

Service Tracing, OpenTracing ndi Jaeger

Timagwiritsa ntchito kamangidwe ka microservice muma projekiti athu. Zikavuta kugwira ntchito, nthawi yochuluka imathera pakuwunika ndi kugawa zipika. Mukalowetsa nthawi ya zochitika za munthu aliyense pa fayilo ya chipika, nthawi zambiri zimakhala zovuta kumvetsetsa zomwe zidapangitsa kuti ntchitoyi ichitike, kutsata ndondomeko ya zochitika kapena kusintha kwa nthawi ya ntchito imodzi yokhudzana ndi ina mu mautumiki osiyanasiyana.

Kuti tichepetse ntchito yamanja, tinaganiza zogwiritsa ntchito imodzi mwa zida zotsatirira. Zamomwe mungagwiritsire ntchito kufufuza ndi momwe tinachitira, ndipo tidzakambirana m'nkhaniyi.

Ndi mavuto ati omwe angathetsedwe ndi kufufuza

  1. Pezani zolepheretsa muntchito imodzi komanso mumtengo wonse wokonzekera pakati pa mautumiki onse omwe akutenga nawo mbali. Mwachitsanzo:
    • Mafoni afupiafupi otsatizana pakati pa mautumiki, mwachitsanzo, ku geocoding kapena ku database.
    • Kudikirira kwa I/O kwautali, monga kusamutsa kwa netiweki kapena kuwerenga kwa disk.
    • Kusanthula kwa data yayitali.
    • Ntchito zazitali zomwe zimafuna CPU.
    • Magawo a code omwe safunikira kuti apeze zotsatira zomaliza ndipo akhoza kuchotsedwa kapena kuchedwa.
  2. Kumvetsetsa bwino zomwe zimatchedwa zomwe zimatchedwa komanso zomwe zimachitika opaleshoniyo ikachitika.
    Service Tracing, OpenTracing ndi Jaeger
    Zitha kuwoneka kuti, mwachitsanzo, Pempho lidabwera ku ntchito ya WS -> ntchito ya WS idawonjezera deta kudzera mu R service -> kenako idatumiza pempho ku V service -> V service idanyamula zambiri kuchokera ku R. service -> anapita ku P service -> utumiki wa P unapitanso ku utumiki R -> utumiki V unanyalanyaza zotsatira zake ndikupita ku utumiki J -> ndipo kenako anabwezera yankho ku utumiki WS, ndikupitiriza kuwerengera china chake mu maziko.
    Popanda kufufuza koteroko kapena zolemba zambiri za ndondomeko yonseyi, n'zovuta kumvetsa zomwe zikuchitika mukamawona kachidindo kwa nthawi yoyamba, ndipo kachidindo kameneka kamamwazikana m'mautumiki osiyanasiyana ndikubisidwa kuseri kwa nkhokwe ndi ma interfaces.
  3. Kusonkhanitsa zambiri za mtengo wakupha kuti muwunike motsatira. Pa gawo lililonse la kuphedwa, mutha kuwonjezera zidziwitso pazotsatira zomwe zikupezeka pakadali pano ndikuwona zomwe zidapangitsa kuti zikhale zofanana. Mwachitsanzo:
    • Dzina Lolowera
    • Ufulu
    • Mtundu wa njira yosankhidwa
    • Kulakwitsa kwa log kapena kukonza
  4. Kusandutsa zotsatila kukhala kagawo kakang'ono ka ma metrics ndi kusanthula kwina komwe kuli kale mu mawonekedwe a ma metrics.

Zomwe mungalembe. Span

Potsata pali lingaliro la span, iyi ndi analogue ya chipika chimodzi, ku console. Spa ili ndi:

  • Dzina, nthawi zambiri dzina la njira yomwe idachitidwa
  • Dzina la ntchito yomwe nthawi yayitali idapangidwira
  • ID yanu yapadera
  • Mtundu wina wa chidziwitso cha meta mumtundu wa kiyi / mtengo womwe walowetsedwamo. Mwachitsanzo, magawo a njira kapena njirayo inatha ndi cholakwika kapena ayi
  • Nthawi zoyambira ndi zomaliza za nthawi iyi
  • ID ya makolo

Nthawi iliyonse imatumizidwa kwa osonkhanitsa span kuti isungidwe mu database kuti iwunikenso pambuyo pake ikangomaliza kuphedwa. M'tsogolomu, mutha kupanga mtengo wamitundu yonse polumikiza ndi id ya makolo. Mukasanthula, mutha kupeza, mwachitsanzo, nthawi zonse muutumiki wina zomwe zidatenga nthawi yayitali. Kupitilira apo, popita kunthawi yayitali, onani mtengo wonsewo pamwamba ndi pansi pa chitalikirachi.

Service Tracing, OpenTracing ndi Jaeger

Opentrace, Jagger ndi m'mene tidazigwiritsira ntchito pama projekiti athu

Pali muyezo wamba opentrace, yomwe imalongosola momwe ndi zomwe ziyenera kusonkhanitsidwa, popanda kumangirizidwa ndikutsata ndondomeko yeniyeni m'chinenero chilichonse. Mwachitsanzo, ku Java, ntchito zonse zokhala ndi zizindikiro zimachitika kudzera pa Opentrace API wamba, ndipo pansi pake, mwachitsanzo, Jaeger kapena kukhazikitsa kopanda kanthu komwe sikungabisike.
Tikugwiritsa ntchito Mlenje ngati kukhazikitsa Opentrace. Zili ndi zigawo zingapo:

Service Tracing, OpenTracing ndi Jaeger

  • Jaeger-agent ndi wothandizira wakomweko yemwe nthawi zambiri amayikidwa pamakina aliwonse ndipo ntchito zimalowetsedwamo padoko losakhazikika lapafupi. Ngati palibe wothandizira, ndiye kuti kutsata kwa ntchito zonse pamakinawa kumakhala kozimitsa
  • Jaeger-Collector - othandizira onse amatumiza zotsatizana zomwe zasonkhanitsidwa, ndipo zimawayika munkhokwe yosankhidwa
  • Nawonso database ndi cassandra yawo yomwe amakonda, koma timagwiritsa ntchito elasticsearch, pali zokhazikitsidwa pazosungidwa zina zingapo ndikukhazikitsa kukumbukira komwe sikusunga chilichonse ku disk.
  • Jaeger-query ndi ntchito yomwe imapita ku database ndikubweza zomwe zasonkhanitsidwa kale kuti ziwunikidwe
  • Jaeger-ui ndi mawonekedwe apaintaneti osaka ndikuwonera, imapita ku jaeger-query

Service Tracing, OpenTracing ndi Jaeger

Chigawo chosiyana chitha kutchedwa kukhazikitsidwa kwa opentrace jaeger m'zilankhulo zinazake, momwe magawo amatumizidwa ku jaeger-agent.
Kulumikiza Jagger ku Java imatsikira pakukhazikitsa mawonekedwe a io.opentracing.Tracer, pambuyo pake njira zonse zodutsamo zidzawulukira kwa wothandizira weniweni.

Service Tracing, OpenTracing ndi Jaeger

Komanso gawo la masika, mutha kulumikizana opentracing-spring-cloud-starter ndi kukhazikitsidwa kwa Jaeger opentracing-spring-jaeger-cloud-starter zomwe zidzasintha zokha kufufuza zonse zomwe zimadutsa zigawozi, mwachitsanzo http zopempha kwa olamulira, zopempha ku database kudzera jdbc, ndi zina zotero.

Imatsata kulowa mu Java

Kwinakwake pamtunda wapamwamba, Span yoyamba iyenera kupangidwa, izi zikhoza kuchitika zokha, mwachitsanzo, ndi woyang'anira kasupe pamene pempho likulandiridwa, kapena pamanja ngati palibe. Kenako imafalitsidwa kudzera mu Scope pansipa. Ngati njira iliyonse ili m'munsiyi ikufuna kuwonjezera Span, zimatengera ActiveSpan yomwe ilipo panopa kuchokera ku Scope, imapanga Span yatsopano ndikuti kholo lake ndilomwe limayambitsa Span, ndikupanga Span yatsopanoyo kugwira ntchito. Poyimba mautumiki akunja, nthawi yomwe ikugwira ntchito imaperekedwa kwa iwo, ndipo mautumikiwa amapanga mipata yatsopano potengera nthawi iyi.
Ntchito zonse zimadutsa mu chitsanzo cha Tracer, mutha kuzipeza kudzera mu makina a DI, kapena GlobalTracer.get () ngati kusintha kwapadziko lonse ngati makina a DI sagwira ntchito. Mwachikhazikitso, ngati tracer sinayambike, NoopTracer ibwerera zomwe sizichita kalikonse.
Kupitilira apo, kuchuluka kwapano kumapezeka kuchokera ku tracer kudzera pa ScopeManager, mawonekedwe atsopano amapangidwa kuchokera pakali pano ndikumangirira kwanthawi yayitali, kenako Scope yomwe idapangidwa imatsekedwa, yomwe imatseka nthawi yomwe idapangidwa ndikubwezeretsa Scope yapitayi ku. chikhalidwe chogwira ntchito. Kuchuluka kumangiriridwa ku ulusi, kotero mukapanga mapulogalamu amitundu yambiri, musaiwale kusamutsa nthawi yogwira kupita ku ulusi wina, kuti mutsegulenso Scope ya ulusi wina potengera kutalika uku.

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

Pamapulogalamu okhala ndi ulusi wambiri, palinso TracedExecutorService ndi zokutira zofananira zomwe zimangopititsa patsogolo ulusi pomwe ntchito za asynchronous zimayambitsidwa:

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

Zopempha zakunja za http zilipo TracingHttpClient

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

Mavuto omwe tidakumana nawo

  • Nyemba ndi DI sizigwira ntchito nthawi zonse ngati chotsatira sichikugwiritsidwa ntchito kapena gawo, ndiye Zoyendetsedwa ndi mawaya Tracer mwina sangagwire ntchito ndipo muyenera kugwiritsa ntchito GlobalTracer.get().
  • Zofotokozera sizigwira ntchito ngati si gawo kapena ntchito, kapena ngati njirayo imayitanidwa kuchokera ku njira yoyandikana nayo kalasi imodzi. Muyenera kusamala kuti muwone zomwe zimagwira ntchito ndikugwiritsa ntchito kutsata kwamanja ngati @Traced sikugwira ntchito. Mutha kulumikizanso chophatikiza chowonjezera pazofotokozera za java, ndiye kuti ziyenera kugwira ntchito kulikonse.
  • M'masika akale a masika ndi masika, kutsegulira kwamtambo kwamtambo sikugwira ntchito chifukwa cha nsikidzi mu DI, ndiye ngati mukufuna kuti zotsalira zamagulu a kasupe zizigwira ntchito zokha, mutha kuchita mofananiza ndi 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
  • Yesani ndi zothandizira sizikugwira ntchito mu groovy, muyenera kugwiritsa ntchito kuyesa pomaliza.
  • Utumiki uliwonse uyenera kukhala ndi spring.application.name yake yomwe zizindikiro zidzalowetsedwa. Kodi dzina losiyana kugulitsa ndi mayeso, kuti kusokoneza iwo pamodzi.
  • Ngati mumagwiritsa ntchito GlobalTracer ndi tomcat, ndiye kuti mautumiki onse omwe akuyendetsa mu tomcat iyi ali ndi GlobalTracer imodzi, kotero onse adzakhala ndi dzina lofanana la utumiki.
  • Powonjezera zizindikiro ku njira, muyenera kuonetsetsa kuti sizimatchedwa nthawi zambiri mu lupu. Ndikofunikira kuwonjezera njira imodzi yofananira pama foni onse, zomwe zimatsimikizira nthawi yonse yogwira ntchito. Apo ayi, katundu wochuluka adzapangidwa.
  • Kamodzi ku jaeger-ui, zopempha zazikulu kwambiri zidapangidwa kuti zikhale zowerengeka, ndipo popeza sanadikire kuyankha, adazichitanso. Zotsatira zake, jaeger-query adayamba kudya kukumbukira kwambiri ndikuchepetsa zotanuka. Adathandizidwa ndikuyambitsanso jaeger-query

Sampling, kusunga ndi zowonera

Pali mitundu itatu zitsanzo zotsatsira:

  1. Const yomwe imatumiza ndikusunga zolemba zonse.
  2. Probabilistic yomwe imasefa kutsata ndikuthekera kwina.
  3. Ratelimiting yomwe imachepetsa kuchuluka kwa zotsata pamphindikati. Mutha kukonza izi pa kasitomala, kaya pa jaeger-agent kapena pa okhometsa. Tsopano timagwiritsa ntchito const 1 mu stack valuator, popeza palibe zopempha zambiri, koma zimatenga nthawi yayitali. M'tsogolomu, ngati izi zidzabweretsa katundu wambiri pa dongosolo, mukhoza kuchepetsa.

Ngati mugwiritsa ntchito cassandra, ndiye kuti mwachikhazikitso imangosunga zotsalira kwa masiku awiri. Tikugwiritsa ntchito elasticsearch ndipo zotsatira zimasungidwa nthawi zonse ndipo sizichotsedwa. Mndandanda wosiyana umapangidwa tsiku lililonse, mwachitsanzo jaeger-service-2019-03-04. M'tsogolomu, muyenera kukonza zoyeretsera zokha zakale.

Kuti muwone zotsatira zomwe mukufuna:

  • Sankhani ntchito yomwe mukufuna kusefera, mwachitsanzo, tomcat7-default pa ntchito yomwe ikuyenda mu tomcat ndipo ilibe dzina lake.
  • Kenako sankhani opareshoni, nthawi yotalikirapo komanso nthawi yocheperako, mwachitsanzo kuyambira masekondi 10, kuti mutenge nthawi yayitali yopha.
    Service Tracing, OpenTracing ndi Jaeger
  • Pitani ku chimodzi mwazotsatira ndikuwona zomwe zikucheperachepera pamenepo.
    Service Tracing, OpenTracing ndi Jaeger

Komanso, ngati id yopempha imadziwika, ndiye kuti mutha kupeza tsatanetsatane ndi id iyi kudzera mukusaka kwama tag, ngati id iyi yalowetsedwa mumayendedwe.

Zolemba

nkhani

Π’ΠΈΠ΄Π΅ΠΎ

Source: www.habr.com

Kuwonjezera ndemanga