Binciken Sabis, OpenTracing da Jaeger

Binciken Sabis, OpenTracing da Jaeger

Muna amfani da gine-ginen microservice a cikin ayyukanmu. Lokacin da ƙwanƙolin aikin ya faru, ana ɗaukar lokaci mai yawa don saka idanu da tantance rajistan ayyukan. Lokacin shigar da lokutan ayyukan mutum ɗaya zuwa fayil ɗin log, yawanci yana da wahala a fahimci abin da ya haifar da kiran waɗannan ayyukan, don bin jerin ayyuka ko canjin lokaci na wani aiki dangane da wani a cikin ayyuka daban-daban.

Don rage aikin hannu, mun yanke shawarar amfani da ɗayan kayan aikin ganowa. Game da yadda da kuma dalilin da ya sa za ku iya amfani da bincike da kuma yadda muka yi shi, kuma za a tattauna a wannan labarin.

Wadanne matsaloli za a iya magance su tare da ganowa

  1. Nemo ƙwanƙolin aikin duka a cikin sabis guda ɗaya kuma a cikin bishiyar aiwatar da duka tsakanin duk sabis ɗin shiga. Misali:
    • Yawancin gajerun kira a jere tsakanin sabis, misali, zuwa geocoding ko zuwa bayanan bayanai.
    • Dogon I/O yana jira, kamar canja wurin hanyar sadarwa ko karanta diski.
    • Dogon nazarin bayanai.
    • Dogayen ayyukan da ke buƙatar CPU.
    • Sassan lambar da ba a buƙata don samun sakamako na ƙarshe kuma ana iya cirewa ko jinkirtawa.
  2. A bayyane a cikin wane jerin abin da ake kira da abin da ke faruwa lokacin da aka yi aikin.
    Binciken Sabis, OpenTracing da Jaeger
    Ana iya ganin cewa, alal misali, Buƙatar ta zo ga sabis na WS -> sabis ɗin WS ya ƙara bayanai ta hanyar sabis ɗin R -> sannan aika buƙatun zuwa sabis na V -> sabis na V ya ɗora bayanai da yawa daga sabis ɗin R -> ya tafi sabis na P -> sabis na P ya sake zuwa sabis ɗin R -> sabis na V ya yi watsi da sakamakon kuma ya tafi sabis ɗin J -> sannan sai kawai ya dawo da sabis ɗin WS, yayin da aka ci gaba da yin wani abu.
    Ba tare da irin wannan alama ko cikakkun bayanai ga dukan tsari ba, yana da matukar wahala a fahimci abin da ke faruwa lokacin da kuka kalli lambar a karon farko, kuma lambar ta warwatse a cikin ayyuka daban-daban kuma an ɓoye a bayan tarin bins da musaya.
  3. Tarin bayanai game da bishiyar kisa don binciken da aka jinkirta na gaba. A kowane mataki na aiwatarwa, zaku iya ƙara bayanai zuwa ga alamar da ke akwai a wannan matakin sannan ku gano menene shigar da bayanan ya haifar da irin wannan yanayin. Misali:
    • ID mai amfani
    • Hakoki
    • Nau'in hanyar da aka zaɓa
    • Shiga ko kuskuren aiwatarwa
  4. Juya alamomi zuwa wani yanki na ma'auni da ƙarin bincike riga a cikin nau'i na awo.

Wani alama zai iya shiga. Tsawon

A cikin ganowa akwai manufar tazara, wannan analogue ne na log ɗaya, zuwa na'ura mai kwakwalwa. Gidan spa yana da:

  • Suna, yawanci sunan hanyar da aka aiwatar
  • Sunan sabis ɗin da aka samar da tazara
  • ID na musamman na mallaka
  • Wani nau'in bayanan meta a cikin hanyar maɓalli/daraja da aka shigar a ciki. Misali, sigogin hanya ko hanyar sun ƙare da kuskure ko a'a
  • Lokacin farawa da ƙarewa don wannan tazara
  • ID tazarar iyaye

Ana aika kowane tazara zuwa ga mai tarawa don adanawa a cikin ma'ajin bayanai don sake dubawa daga baya da zarar ya gama aiwatar da shi. A nan gaba, zaku iya gina bishiyar kowane fanni ta hanyar haɗa ta ID na iyaye. Lokacin bincike, zaku iya samun, alal misali, duk tazara a wasu sabis waɗanda suka ɗauki fiye da ɗan lokaci. Bugu da ari, ta hanyar zuwa takamaiman tazara, duba dukkan bishiyar sama da ƙasa wannan tazara.

Binciken Sabis, OpenTracing da Jaeger

Opentrace, Jagger da yadda muka aiwatar da shi don ayyukanmu

Akwai ma'auni gama gari bude ido, wanda ke bayyana yadda da abin da ya kamata a tattara, ba tare da an ɗaure shi ta hanyar gano takamaiman aiwatarwa a kowane harshe ba. Misali, a cikin Java, duk aiki tare da burbushi ana aiwatar da su ta hanyar Opentrace API na gama gari, kuma a ƙarƙashinsa, alal misali, Jaeger ko aikin tsoho mara komai wanda ba zai iya ɓoyewa ba.
Muna amfani Mafarauci a matsayin aiwatar da Opentrace. Ya ƙunshi abubuwa da yawa:

Binciken Sabis, OpenTracing da Jaeger

  • Jaeger-agent wakili ne na gida wanda yawanci ana girka akan kowace na'ura kuma ana shigar da sabis a cikinta akan tashar tsoho na gida. Idan babu wakili, to alamun duk sabis akan wannan na'ura yawanci a kashe su
  • Jaeger-collector - duk wakilai suna aika da alamun da aka tattara zuwa gare shi, kuma yana sanya su cikin bayanan da aka zaɓa.
  • Ma'ajin bayanai shine cassandra da suka fi so, amma muna amfani da elasticsearch, akwai aiwatarwa don wasu ma'aunin bayanan bayanai da kuma aiwatar da ƙwaƙwalwar ajiya wanda baya ajiye komai a diski.
  • Jaeger-query sabis ne da ke zuwa rumbun adana bayanai kuma ya dawo da alamun da aka riga aka tattara don bincike
  • Jaeger-ui sigar yanar gizo ce don bincike da duba alamun, tana zuwa jaeger-query

Binciken Sabis, OpenTracing da Jaeger

Za a iya kiran wani bangare daban na aiwatar da buɗaɗɗen jaeger don takamaiman harsuna, ta inda ake aika tazara zuwa jaeger-agent.
Haɗa Jagger a cikin Java ya sauko don aiwatar da aikin io.opentracing.Tracer, bayan haka duk alamun ta hanyarsa za su tashi zuwa ainihin wakili.

Binciken Sabis, OpenTracing da Jaeger

Hakanan don bangaren bazara, zaku iya haɗawa opentracing-spring-Cloud-starter da aiwatarwa daga Jaeger budewa-spring-jaeger-Cloud-starter wanda zai daidaita ta atomatik don duk abin da ya wuce ta waɗannan abubuwan, misali buƙatun http ga masu sarrafawa, buƙatun zuwa rumbun adana bayanai ta hanyar jdbc, da sauransu.

Alamomin shiga cikin Java

Wani wuri a matakin sama, dole ne a ƙirƙiri Taɗi na farko, ana iya yin wannan ta atomatik, misali, ta mai kula da bazara lokacin da aka karɓi buƙata, ko da hannu idan babu. Sa'an nan kuma ana watsa shi ta hanyar Wurin da ke ƙasa. Idan kowace hanya da ke ƙasa tana son ƙara tazara, tana ɗaukar Span na yanzu mai aiki daga Matsakaicin, ƙirƙirar sabon Span kuma ya ce iyayensa shine sakamakon aikiSpan, kuma yana sa sabon Span yana aiki. Lokacin kiran sabis na waje, ana mika musu tazarar aiki na yanzu, kuma waɗannan ayyukan suna haifar da sabbin tazara dangane da wannan tazara.
Duk aikin yana tafiya ta hanyar Tracer misali, zaku iya samun ta ta hanyar DI, ko GlobalTracer.get () azaman mai canzawa na duniya idan tsarin DI baya aiki. Ta hanyar tsoho, idan ba a fara fara gano mai binciken ba, NoopTracer zai dawo wanda ba ya yin komai.
Bugu da ari, ana samun iyakar halin yanzu daga mai ganowa ta hanyar ScopeManager, an ƙirƙiri sabon ikon daga na yanzu tare da ɗaure sabon tazara, sa'an nan kuma an rufe Wurin da aka ƙirƙira, wanda ke rufe tazarar da aka ƙirƙira kuma ya dawo da Matsakaicin baya zuwa yanayin aiki. An ɗaure iyaka da zaren, don haka lokacin da ake yin shirye-shirye masu zare da yawa, kar ka manta da canja wurin aiki zuwa wani zaren, don ƙarin kunna Tasirin wani zaren tare da la'akari da wannan tazara.

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

Don shirye-shirye masu zare da yawa, akwai kuma TracedExecutorService da makamantan su waɗanda ke tura tazarar yanzu zuwa zaren kai tsaye lokacin da aka ƙaddamar da ayyukan asynchronous:

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

Don buƙatun http na waje akwai BincikenHttpClient

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

Matsalolin da muka fuskanta

  • Wake da DI ba koyaushe suke aiki ba idan ba a yi amfani da mai binciken a cikin sabis ko ɓangaren ba, to Mai sarrafa kansa Tracer bazai aiki ba kuma dole ne kuyi amfani da GlobalTracer.get().
  • Bayanin ba ya aiki idan ba sashe ko sabis ba, ko kuma idan an kira hanyar ta hanyar maƙwabta na aji ɗaya. Dole ne ku yi hankali don bincika abin da ke aiki kuma ku yi amfani da ƙirƙirar binciken da hannu idan @Traced baya aiki. Hakanan zaka iya haɗa ƙarin mai tarawa don bayanin java, sannan yakamata suyi aiki a ko'ina.
  • A cikin tsohon bazara da bazara boot, buɗewar girgije autoconfiguration ba ya aiki saboda kwari a cikin DI, to, idan kuna son alamun abubuwan da ke cikin bazara suyi aiki ta atomatik, zaku iya yin ta ta hanyar kwatance tare da 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
  • Gwada tare da albarkatun baya aiki a cikin groovy, dole ne ku yi amfani da gwadawa a ƙarshe.
  • Dole ne kowane sabis ya sami nasa spring.application.name a ƙarƙashinsa wanda za'a shigar da alamun. Menene sunan daban don siyarwa da gwajin, don kada ku tsoma baki tare da su tare.
  • Idan kuna amfani da GlobalTracer da tomcat, to duk ayyukan da ke gudana a cikin wannan tomcat suna da GlobalTracer guda ɗaya, don haka duk suna da sunan sabis iri ɗaya.
  • Lokacin ƙara alamun hanya, kuna buƙatar tabbatar da cewa ba a kiran ta sau da yawa a cikin madauki. Wajibi ne don ƙara alamar gama gari ɗaya don duk kira, wanda ke ba da garantin jimlar lokacin aiki. In ba haka ba, za a ƙirƙiri nauyi mai yawa.
  • Da zarar a cikin jaeger-ui, an yi manyan buƙatun don ɗimbin alamomi, kuma tun da ba su jira amsa ba, sun sake yin hakan. Sakamakon haka, jaeger-query ya fara cin ƙwaƙwalwar ajiya mai yawa kuma ya rage jinkirin roba. An taimaka ta sake kunna jaeger-query

Samfurori, adanawa da duba alamun

Akwai iri uku samfurin alamu:

  1. Const wanda ke aikawa da adana duk alamu.
  2. Mai yuwuwa wanda ke tace alamun tare da wasu yuwuwar da aka bayar.
  3. Ƙididdigar ƙididdigewa wanda ke iyakance adadin lambobi a cikin daƙiƙa guda. Kuna iya saita waɗannan saitunan akan abokin ciniki, ko dai akan jaeger-agent ko akan mai tarawa. Yanzu muna amfani da const 1 a cikin tari mai ƙima, tunda babu buƙatun da yawa, amma suna ɗaukar lokaci mai tsawo. A nan gaba, idan wannan zai haifar da nauyin da ya wuce kima akan tsarin, zaku iya iyakance shi.

Idan kuna amfani da cassandra, to ta hanyar tsoho yana adana alamun kawai na kwanaki biyu. Muna amfani maganin roba kuma ana adana alamun har abada kuma ba a goge su ba. An ƙirƙiri wani fihirisar dabam don kowace rana, misali jaeger-service-2019-03-04. A nan gaba, kuna buƙatar saita tsaftacewa ta atomatik na tsofaffin alamun.

Don duba alamun kuna buƙatar:

  • Zaɓi sabis ɗin da kuke son tace alamun, misali, tomcat7-default don sabis ɗin da ke gudana a cikin tomcat kuma ba zai iya samun sunansa ba.
  • Sannan zaɓi aikin, tazarar lokaci da mafi ƙarancin lokacin aiki, misali daga daƙiƙa 10, don ɗaukar dogon kisa kawai.
    Binciken Sabis, OpenTracing da Jaeger
  • Jeka ɗaya daga cikin alamun kuma duba abin da ke raguwa a can.
    Binciken Sabis, OpenTracing da Jaeger

Har ila yau, idan an san wasu buƙatun id, to, za ku iya samun alamar ta wannan id ta hanyar bincike ta tag, idan an shigar da wannan id a cikin tazarar alama.

Rubutun

Articles

Video

source: www.habr.com

Add a comment