Ịchọ ọrụ, OpenTracing na Jaeger

Ịchọ ọrụ, OpenTracing na Jaeger

Anyị na-eji microservice architecture na ọrụ anyị. Mgbe mkpọmkpọ ọrụ na-eme, a na-eji oge dị ukwuu nleba anya na ịkọwa ndekọ. Mgbe ị na-edebanye oge nke ọrụ onye ọ bụla na faịlụ log, ọ na-esikarị ike ịghọta ihe butere ịkpọku ọrụ ndị a, soro usoro nke omume ma ọ bụ ngbanwe oge nke otu ọrụ metụtara onye ọzọ na ọrụ dị iche iche.

Iji wedata ọrụ aka, anyị kpebiri iji otu n'ime ngwaọrụ nyocha. Banyere otú na ihe mere i nwere ike isi jiri tracing na otú anyị si mee ya, a ga-atụlekwa n’isiokwu a.

Kedu nsogbu enwere ike idozi site na nchọta

  1. Chọta ihe mgbochi arụmọrụ ma n'ime otu ọrụ yana n'osisi ogbugbu niile n'etiti ọrụ niile na-ekere òkè. Ọmụmaatụ:
    • Ọtụtụ oku dị mkpirikpi nsoro dị n'etiti ọrụ, dịka ọmụmaatụ, na geocoding ma ọ bụ na nchekwa data.
    • Ogologo I/O na-echere, dị ka ịnyefe netwọkụ ma ọ bụ ịgụ diski.
    • Ntụle data ogologo.
    • Ogologo arụmọrụ chọrọ CPU.
    • Akụkụ nke koodu na-adịghị mkpa iji nweta nsonaazụ ikpeazụ na enwere ike iwepụ ma ọ bụ gbuo oge.
  2. Ghọta nke ọma n'usoro ihe a na-akpọ na ihe na-eme mgbe a na-arụ ọrụ ahụ.
    Ịchọ ọrụ, OpenTracing na Jaeger
    Enwere ike ịhụ na, dịka ọmụmaatụ, arịrịọ ahụ bịara na ọrụ WS -> ọrụ WS gbakwunyere data site na ọrụ R -> wee ziga arịrịọ na ọrụ V -> ọrụ V kwajuru ọtụtụ data site na Ọrụ R -> gara ọrụ P -> ọrụ P gara ọzọ ọrụ R -> ọrụ V leghaara nsonaazụ ya wee gaa ọrụ J -> naanị wee weghachi nzaghachi na ọrụ WS, ebe ọ na-aga n'ihu ịgbakọ ihe ọzọ na ndabere.
    Enweghị akara dị otú ahụ ma ọ bụ akwụkwọ zuru ezu maka usoro ahụ dum, ọ na-esiri ike ịghọta ihe na-eme mgbe ị na-ele koodu ahụ anya na nke mbụ, na koodu ahụ gbasasịa n'ofe ọrụ dị iche iche ma zoo n'azụ ụyọkọ bins na interfaces.
  3. Mkpokọta ozi gbasara osisi ogbugbu maka nyocha echere na-esote. N'oge ogbugbu ọ bụla, ị nwere ike itinye ozi na nchọta dị na ọkwa a wee chọpụta ihe ntinye data butere n'ọnọdụ yiri nke ahụ. Ọmụmaatụ:
    • Njirimara Onye Ọrụ
    • Ikike
    • Ụdị usoro ahọpụtara
    • Ndebanye aha ma ọ bụ njehie igbu
  4. Na-atụgharị akara ka ọ bụrụ akụkụ nke metrik na nyocha ndị ọzọ ugbua n'ụdị metrik.

Kedu ihe nchọta nwere ike ịbanye. Ogologo oge

N'ịchọgharị enwere echiche nke ogologo oge, nke a bụ analog nke otu log, na njikwa. Spa nwere:

  • Aha, na-abụkarị aha usoro e gburu
  • Aha ọrụ nke ewepụtara ogologo oge
  • NJ pụrụ iche nke onwe
  • Ụfọdụ ụdị ozi meta n'ụdị igodo/uru nke abanyela na ya. Dịka ọmụmaatụ, parampat usoro ma ọ bụ usoro ahụ kwụsịrị na njehie ma ọ bụ na ọ bụghị
  • Oge mmalite na njedebe maka ogologo oge a
  • NJ oge nne na nna

A na-eziga ogologo oge ọ bụla na onye na-anakọta spa ka ọ chekwaa ya na nchekwa data maka nyochaa ma emechaa ozugbo o mechachara ya. N'ọdịnihu, ị nwere ike wuo osisi nke oge niile site na ijikọ site na ID nne na nna. Mgbe ị na-enyocha, ị nwere ike ịhụ, dịka ọmụmaatụ, ogologo oge niile na ọrụ ụfọdụ were ihe karịrị oge. Ọzọkwa, site n'ịga n'otu oge, hụ osisi dum n'elu na n'okpuru ogologo a.

Ịchọ ọrụ, OpenTracing na Jaeger

Opentrace, Jagger na otu anyị siri mejuputa ya maka ọrụ anyị

Enwere ọkọlọtọ nkịtị oghere oghere, nke na-akọwa ka esi na ihe a ga-anakọta, na-enweghị ikekọta ya site na nchọta na mmejuputa a kapịrị ọnụ n'asụsụ ọ bụla. Dịka ọmụmaatụ, na Java, a na-arụ ọrụ niile na traces site na Opentrace API nkịtị, na n'okpuru ya, dịka ọmụmaatụ, Jaeger ma ọ bụ mmejuputa efu efu nke na-emeghị ihe ọ bụla nwere ike zoo.
Anyị na-eji Dinta dị ka mmejuputa Opentrace. Ọ nwere ọtụtụ components:

Ịchọ ọrụ, OpenTracing na Jaeger

  • Jaeger-agent bụ onye nnọchi anya mpaghara nke a na-etinyekarị na igwe ọ bụla yana abanye na ya na ọdụ ụgbọ mmiri mpaghara. Ọ bụrụ na enweghị onye nnọchi anya, mgbe ahụ, akara ọrụ niile dị na igwe a na-enwekarị nkwarụ
  • Jaeger-na-anakọta - ndị ọrụ niile na-ezigara ya ihe anakọtara, ma tinye ha na nchekwa data ahọpụtara.
  • Ebe nchekwa data bụ cassandra kacha amasị ha, mana anyị na-eji elasticsearch, enwere mmejuputa maka ọdụ data abụọ ndị ọzọ yana mmejuputa ebe nchekwa nke na-adịghị echekwa ihe ọ bụla na diski.
  • Jaeger-query bụ ọrụ na-aga na nchekwa data wee weghachite akara ndị anakọtara maka nyocha
  • Jaeger-ui bụ ihe webụsaịtị maka ịchọ na ikiri akara, ọ na-aga na jaeger-query.

Ịchọ ọrụ, OpenTracing na Jaeger

Enwere ike ịkpọ akụkụ dị iche iche mmejuputa opentrace jaeger maka asụsụ dị iche iche, site na nke a na-ezigara ogologo oge na jaeger-agent.
Jikọọ Jagger na Java na-agbadata iji mejuputa interface io.opentracing.Tracer, mgbe nke a gasịrị, usoro niile sitere na ya ga-efega na onye ọrụ ahụ n'ezie.

Ịchọ ọrụ, OpenTracing na Jaeger

Ọzọkwa maka akụkụ mmiri, ị nwere ike jikọọ opentracing-mmiri-igwe ojii-amalite na mmejuputa iwu sitere na Jaeger opentracing-spring-jaeger-cloud-starter nke ga-ahazi tracing na-akpaghị aka maka ihe ọ bụla na-agafe na ihe ndị a, dịka ọmụmaatụ arịrịọ http maka ndị njikwa, arịrịọ na nchekwa data site na jdbc, wdg.

Usoro nbanye na Java

N'ebe dị n'ogo dị elu, a ghaghị ịmepụta Span mbụ, nke a nwere ike ime ya na-akpaghị aka, dịka ọmụmaatụ, site na onye na-ahụ maka mmiri mgbe a nabatara arịrịọ, ma ọ bụ aka ya ma ọ bụrụ na ọ dịghị. A na-ebunye ya site na oke n'okpuru. Ọ bụrụ na usoro ọ bụla dị n'okpuru chọrọ ịgbakwunye Span, ọ na-ewepụ Span na-arụ ọrụ ugbu a site na Scope, mepụta Span ọhụrụ wee kwuo na nne na nna ya na-esi na ya pụta, ma mee ka Span ọhụrụ na-arụ ọrụ. Mgbe ị na-akpọ ọrụ mpụga, a na-enyefe ha ogologo oge na-arụ ọrụ ugbu a, ọrụ ndị ahụ na-emepụta oge ọhụrụ na-ezo aka na nke a.
Ọrụ niile na-aga site na ihe atụ Tracer, ị nwere ike nweta ya site na usoro DI, ma ọ bụ GlobalTracer.get () dị ka mgbanwe zuru ụwa ọnụ ma ọ bụrụ na usoro DI anaghị arụ ọrụ. Site na ndabara, ọ bụrụ na ebidobeghị tracer, NoopTracer ga-alaghachi nke na-emeghị ihe ọ bụla.
Ọzọkwa, a na-enweta ohere dị ugbu a site na onye na-achọpụta ihe site na ScopeManager, a na-emepụta oghere ọhụrụ site na nke dị ugbu a nke nwere njikọ nke ọhụụ ọhụrụ ahụ, mgbe ahụ, a na-emechi oghere nke e kere eke, nke na-emechi oge a na-emepụta ma weghachite njedebe gara aga. steeti nọ n'ọrụ. A na-ejikọta oke na eri, yabụ mgbe mmemme multi-threaded, ị ga-echefu ịnyefe span na-arụ ọrụ na eri ọzọ, maka ịmalite ọrụ nke Scope nke eriri ọzọ na-ezo aka na nke a.

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

Maka mmemme multi-threaded, enwekwara TracedExecutorService na ihe mkpuchi yiri ya na-ebuga ogologo oge dị ugbu a na eri mgbe arụrụ ọrụ asynchronous:

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

Maka arịrịọ http mpụga enwere ỊchọtaHttpClient

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

Nsogbu ndị anyị chere ihu

  • Agwa na DI anaghị arụ ọrụ mgbe niile ma ọ bụrụ na ejighị tracer na ọrụ ma ọ bụ akụrụngwa, yabụ Eji akpaaka Tracer nwere ike ọ gaghị arụ ọrụ ma ị ga-eji GlobalTracer.get().
  • Nkọwa anaghị arụ ọrụ ma ọ bụrụ na ọ bụghị akụkụ ma ọ bụ ọrụ, ma ọ bụ ọ bụrụ na a na-akpọ usoro ahụ site na usoro agbata obi nke otu klas ahụ. Ị ga-akpachara anya ka ịlele ihe na-arụ ọrụ wee jiri akwụkwọ ntuziaka trace kere ma ọ bụrụ na @Traced anaghị arụ ọrụ. Ị nwekwara ike itinye mgbakwunye mgbakwunye maka nkọwa java, mgbe ahụ ha kwesịrị ịrụ ọrụ ebe niile.
  • Na ochie mmiri na mmiri buut, opentraing mmiri ígwé ojii autoconfiguration anaghị arụ ọrụ n'ihi ahụhụ dị na DI, mgbe ahụ ọ bụrụ na ị chọrọ ka traktị na mmiri mmiri na-arụ ọrụ na-akpaghị aka, ị nwere ike ime ya site na ntụnyere na. 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
  • Gbalịa na akụrụngwa anaghị arụ ọrụ na groovy, ị ga-eji na-agbalị akpatre.
  • Ọrụ ọ bụla ga-enwerịrị nke ya spring.application.name nke a ga-edebanye aha n'okpuru. Gịnị ka aha dị iche iche maka ire ere na ule, ka ọ ghara igbochi ha ọnụ.
  • Ọ bụrụ na ị na-eji GlobalTracer na tomcat, ọrụ niile na-agba na tomcat a nwere otu GlobalTracer, yabụ na ha niile ga-enwe otu aha ọrụ.
  • Mgbe ị na-agbakwunye usoro na usoro, ịkwesịrị ijide n'aka na a naghị akpọ ya ọtụtụ ugboro na loop. Ọ dị mkpa ịgbakwunye otu akara nkịtị maka oku niile, nke na-ekwe nkwa ngụkọta oge ọrụ. Ma ọ bụghị ya, a ga-emepụta oke ibu.
  • N'otu oge na jaeger-ui, a rịọrọ nnukwu arịrịọ maka ọnụọgụ ọnụọgụ dị ukwuu, ebe ọ bụ na ha echereghị nzaghachi, ha mere ya ọzọ. N'ihi ya, jaeger-query malitere iri ọtụtụ ebe nchekwa ma na-ebelata ngwa ngwa. Enyere aka site na ịmalitegharị ajụjụ jaeger

Nlele, ịchekwa na nlele akara

Enwere ụdị atọ nlele akara:

  1. Const nke na-eziga ma chekwaa akara niile.
  2. Ihe puru omume nke na-enyocha akara na ụfọdụ ihe puru omume.
  3. Oke nke na-amachi ọnụọgụ ọnụọgụ n'otu nkeji. Ị nwere ike hazie ntọala ndị a na onye ahịa, ma na jaeger-agent ma ọ bụ na onye nchịkọta. Ugbu a, anyị na-eji const 1 na nchịkọta valuator, ebe ọ bụ na ọ bụghị ọtụtụ arịrịọ, mana ha na-ewe ogologo oge. N'ọdịnihu, ọ bụrụ na nke a ga-ebu ibu na usoro ahụ, ị ​​nwere ike ịkwụsị ya.

Ọ bụrụ na ị na-eji cassandra, na ndabara, ọ na-echekwa naanị akara ụbọchị abụọ. Anyị na-eji ndọtị na akara na-echekwara maka oge niile na anaghị ehichapụ. A na-emepụta ndeksi dị iche maka ụbọchị ọ bụla, dịka ọmụmaatụ jaeger-service-2019-03-04. N'ọdịnihu, ịkwesịrị ịhazi nhichapụ akpaaka nke akara ochie.

Iji lelee akara ndị ị ga-achọ:

  • Họrọ ọrụ nke ịchọrọ iji nzacha akara, dịka ọmụmaatụ, tomcat7-default maka ọrụ na-agba na tomcat na enweghị ike ịnwe aha nke ya.
  • Wee họrọ ọrụ ahụ, oge etiti oge na oge ọrụ kacha nta, dịka ọmụmaatụ site na 10 sekọnd, iji mee naanị ogologo igbu.
    Ịchọ ọrụ, OpenTracing na Jaeger
  • Gaa n'otu n'ime akara ahụ wee hụ ihe na-ebelata ebe ahụ.
    Ịchọ ọrụ, OpenTracing na Jaeger

Ọzọkwa, ọ bụrụ na a maara ụfọdụ arịrịọ id, mgbe ahụ ị nwere ike ịchọta trace site na id a site na nchọ mkpado, ma ọ bụrụ na abanyela n'ụdị id a na ogologo oge.

Документация

Isiokwu

Video

isi: www.habr.com

Tinye a comment