Ka Huli Hana, OpenTracing a me Jaeger

Ka Huli Hana, OpenTracing a me Jaeger

Hoʻohana mākou i ka hoʻolālā microservice i kā mākou papahana. Ke hiki mai nā bottlenecks hana, nui ka manawa i hoʻopau ʻia i ka nānā ʻana a me ka hoʻopaʻa ʻana i nā lāʻau. Ke hoʻopaʻa inoa i nā manawa o nā hana pākahi i kahi faila log, he mea paʻakikī ke hoʻomaopopo i ka mea i alakaʻi ai i ke kāhea ʻana o kēia mau hana, e nānā i ke ʻano o nā hana a i ʻole ka hoʻololi manawa o kekahi hana e pili ana i kekahi i nā lawelawe like ʻole.

No ka ho'ēmiʻana i ka hana lima, ua hoʻoholo mākou e hoʻohana i kekahi o nā mea hana huli. E pili ana pehea a me ke kumu e hiki ai iā ʻoe ke hoʻohana i ka tracing a pehea mākou i hana ai, a e kūkākūkā ʻia ma kēia ʻatikala.

He aha nā pilikia e hiki ke hoʻoponopono ʻia me ka huli ʻana

  1. E ʻimi i nā bottlenecks hana i loko o ka lawelawe hoʻokahi a i ka lāʻau hoʻokō holoʻokoʻa ma waena o nā lawelawe komo āpau. ʻo kahi laʻana:
    • Nui nā kelepona pōkole ma waena o nā lawelawe, no ka laʻana, i geocoding a i kahi waihona.
    • Kakali I/O lōʻihi, e like me ka hoʻololi ʻana i ka pūnaewele a i ʻole ka heluhelu disk.
    • Hoʻopau ʻikepili lōʻihi.
    • ʻO nā hana lōʻihi e pono ai ka cpu.
    • ʻAʻole pono nā ʻāpana code no ka loaʻa ʻana o ka hopena hope loa a hiki ke hoʻoneʻe ʻia a hoʻopaneʻe paha.
  2. Hoʻomaopopo maopopo i ke kaʻina o ka mea i kapa ʻia a me ka mea e hana ʻia ke hana ʻia ka hana.
    Ka Huli Hana, OpenTracing a me Jaeger
    Hiki ke ʻike ʻia, no ka laʻana, ua hele mai ka noi i ka lawelawe WS -> ua hoʻohui ka lawelawe WS i ka ʻikepili ma o ka lawelawe R -> a laila hoʻouna aku i kahi noi i ka lawelawe V -> ua hoʻouka ka lawelawe V i ka nui o nā ʻikepili mai ka lawelawe R -> hele i ka lawelawe P -> ua hele hou ka lawelawe P i ka lawelawe R -> ʻaʻole i mālama ka lawelawe V i ka hopena a hele i ka lawelawe J -> a laila hoʻihoʻi i ka pane i ka lawelawe WS, kahi mea ʻē aʻe i ka helu ʻana.
    Me ka loaʻa ʻole o ia ʻano a i ʻole nā ​​palapala kikoʻī no ke kaʻina holoʻokoʻa, paʻakikī loa ka hoʻomaopopo ʻana i ka mea e hana nei ke nānā ʻoe i ke code no ka manawa mua, a ua hoʻopuehu ʻia ke code ma nā lawelawe like ʻole a hūnā ʻia ma hope o kahi hui o nā bins a me nā interface.
  3. ʻOhi ʻike e pili ana i ka lāʻau hoʻokō no ka nānā ʻana i hoʻopaneʻe ʻia. I kēlā me kēia pae o ka hoʻokō ʻana, hiki iā ʻoe ke hoʻohui i ka ʻike i ka trace i loaʻa i kēia pae a laila e noʻonoʻo i ke ʻano o ka ʻikepili hoʻokomo i alakaʻi i kahi ʻano like. ʻo kahi laʻana:
    • ID mea hoʻohana
    • Nā kuleana
    • ʻAno o ke ala i koho ʻia
    • Kuhi a i ʻole hoʻokō hewa
  4. Ka hoʻololi ʻana i nā meheu i ʻāpana o nā ana a me ka nānā hou ʻana ma ke ʻano o nā ana.

He aha ka trace hiki ke hoʻopaʻa inoa. Span

Ma ka huli ʻana aia ka manaʻo o kahi span, ʻo ia kahi analogue o hoʻokahi log, i ka console. Aia ka spa:

  • Ka inoa, ka inoa maʻamau o ke ʻano hana i hana ʻia
  • Ka inoa o ka lawelawe i hana ʻia ai ka span
  • ID kū hoʻokahi ponoʻī
  • ʻO kekahi ʻano ʻike meta ma ke ʻano o kahi kī/waiwai i hoʻopaʻa ʻia i loko. No ka laʻana, ua pau nā ʻano hana a i ʻole ke ʻano me ka hewa a i ʻole
  • Nā manawa hoʻomaka a hoʻopau no kēia manawa
  • ID o nā mākua

Hoʻouna ʻia kēlā me kēia span i ka mea hōʻiliʻili span e mālama ʻia i loko o ka waihona no ka nānā hou ʻana i ka wā i pau ai kāna hoʻokō. I ka wā e hiki mai ana, hiki iā ʻoe ke kūkulu i kahi kumulāʻau o nā ʻāpana āpau ma ka hoʻopili ʻana me ka id makua. I ka nānā ʻana, hiki iā ʻoe ke loaʻa, no ka laʻana, nā spans āpau i kekahi lawelawe i ʻoi aku ma mua o kekahi manawa. Eia kekahi, ma ka hele ʻana i kahi kiko kikoʻī, e ʻike i ka lāʻau holoʻokoʻa ma luna a ma lalo o kēia kiko.

Ka Huli Hana, OpenTracing a me Jaeger

Opentrace, Jagger a pehea mākou i hoʻokō ai no kā mākou papahana

Aia kahi maʻamau maʻamau opentrace, e wehewehe ana i ke ʻano a me ka mea e ʻohi ʻia ai, me ka ʻole o ka hoʻopaʻa ʻia ʻana ma ka huli ʻana i kahi hoʻokō kikoʻī ma kekahi ʻōlelo. No ka laʻana, ma Java, hana ʻia nā hana āpau me nā traces ma o ka Opentrace API maʻamau, a ma lalo o ia, no ka laʻana, ʻo Jaeger a i ʻole kahi hoʻokō paʻa ʻole ʻaʻole hiki ke hūnā ʻia.
Ke hoʻohana nei mākou ʻO Jaeger ma ke ʻano he hoʻokō o Opentrace. Aia i loko o kekahi mau ʻāpana:

Ka Huli Hana, OpenTracing a me Jaeger

  • ʻO Jaeger-agent kahi luna kūloko i hoʻokomo pinepine ʻia ma kēlā me kēia mīkini a hoʻopaʻa ʻia nā lawelawe i loko o ia ma ke awa paʻamau kūloko. Inā ʻaʻohe ʻelele, a laila hoʻopau ʻia nā ʻāpana o nā lawelawe āpau ma kēia mīkini
  • ʻO Jaeger-collector - hoʻouna nā luna āpau i nā ʻāpana i hōʻiliʻili ʻia iā ia, a waiho iā lākou i loko o ka waihona i koho ʻia.
  • ʻO ka waihona ʻo kā lākou cassandra makemake, akā hoʻohana mākou i ka elasticsearch, aia nā hoʻokō no kekahi mau ʻikepili ʻē aʻe a me kahi hoʻokō hoʻomanaʻo e mālama ʻole i kekahi mea i ka disk.
  • ʻO Jaeger-query kahi lawelawe e hele ai i ka waihona a hoʻihoʻi i nā meheu i hōʻiliʻili ʻia no ka nānā ʻana
  • ʻO Jaeger-ui kahi pūnaewele pūnaewele no ka ʻimi ʻana a me ka nānā ʻana i nā meheu, hele ia i ka jaeger-query

Ka Huli Hana, OpenTracing a me Jaeger

Hiki ke kapa ʻia kahi ʻāpana ʻokoʻa i ka hoʻokō ʻana o opentrace jaeger no nā ʻōlelo kikoʻī, kahi e hoʻouna ʻia ai nā span i jaeger-agent.
Hoʻohui iā Jagger ma Java iho mai i ka hoʻokō ʻana i ka interface io.opentracing.Tracer, a ma hope o ia mea e lele ai nā meheu a pau i ka ʻelele maoli.

Ka Huli Hana, OpenTracing a me Jaeger

No ka ʻāpana puna, hiki iā ʻoe ke hoʻohui opentracing-spring-cloud-starter a me ka hoʻokō mai Jaeger opentracing-spring-jaeger-cloud-starter ka mea e hoʻonohonoho maʻalahi i ka huli ʻana no nā mea āpau e hele i kēia mau ʻāpana, no ka laʻana, noi http i nā mea hoʻoponopono, noi i ka waihona ma o jdbc, etc.

ʻO ka hoʻopaʻa inoa ʻana ma Java

Ma kahi o ka pae kiʻekiʻe, pono e hana ʻia ka Span mua, hiki ke hana maʻalahi, no ka laʻana, e ka mea hoʻoponopono puna ke loaʻa kahi noi, a i ʻole ma ka lima inā ʻaʻohe. A laila lawe ʻia ma o ka Scope ma lalo nei. Inā makemake kekahi o nā ʻano ma lalo nei e hoʻohui i kahi Span, lawe ia i ka activeSpan o kēia manawa mai ka Scope, hana i kahi Span hou a ʻōlelo ʻo kona makua ka hopena activeSpan, a hoʻoikaika i ka Span hou. Ke kelepona ʻana i nā lawelawe o waho, hāʻawi ʻia ka manawa hana o kēia manawa iā lākou, a ua hana kēlā mau lawelawe i nā kikoʻī hou e pili ana i kēia manawa.
Ke hele nei nā hana a pau ma ka laʻana Tracer, hiki iā ʻoe ke loaʻa ma o ka mīkini DI, a i ʻole GlobalTracer.get () ma ke ʻano he hoʻololi honua inā ʻaʻole hana ka mīkini DI. Ma ka maʻamau, inā ʻaʻole i hoʻomaka ʻia ka tracer, e hoʻi mai ʻo NoopTracer ʻaʻohe mea.
Eia kekahi, ua loaʻa ka laulā o kēia manawa mai ka tracer ma o ScopeManager, ua hana ʻia kahi kikoʻī hou mai ka mea i kēia manawa me ka hoʻopaʻa ʻana o ka span hou, a laila pani ʻia ka Scope i hana ʻia, e pani ana i ka span i hana ʻia a hoʻihoʻi i ka Scope mua i ke kūlana hana. Hoʻopaʻa ʻia ka Scope i kahi kaula, no laila, i ka wā e hoʻolālā ʻia ai ka multi-threaded programming, mai poina ʻoe e hoʻololi i ke kiko hana i kahi lola ʻē aʻe, no ka hoʻāla hou ʻana i ka Scope o kahi loina ʻē aʻe me ka kuhikuhi ʻana i kēia 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)) {
                ...
            }
        });
    }
}

No ka papahana multi-threaded, aia pū kekahi TracedExecutorService a me nā mea hoʻopili like e hoʻouna koke i ka manawa o kēia manawa i ke kaula ke hoʻomaka ʻia nā hana asynchronous:

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

No nā noi http waho aia HoʻopiliHttpClient

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

Nā pilikia i loaʻa iā mākou

  • ʻAʻole hana mau ʻo Beans a me DI inā ʻaʻole hoʻohana ʻia ka tracer i kahi lawelawe a i ʻole ʻāpana, a laila Uea auto ʻAʻole hana ʻo Tracer a pono ʻoe e hoʻohana iā GlobalTracer.get().
  • ʻAʻole hana nā annotations inā ʻaʻole ia he ʻāpana a lawelawe paha, a i ʻole ke kāhea ʻia ke ʻano mai kahi ala pili o ka papa like. Pono ʻoe e makaʻala i ka hana a hoʻohana i ka hana trace manual inā ʻaʻole hana ʻo @Traced. Hiki iā ʻoe ke hoʻopili i kahi compiler hou no nā annotations java, a laila pono lākou e hana ma nā wahi āpau.
  • I ka pūnāwai kahiko a me ka pūnāwai kāmaʻa, ʻaʻole hana ka opentraing spring cloud autoconfiguration ma muli o nā pōpoki i DI, a laila inā makemake ʻoe i nā ʻāpana i nā ʻāpana puna e hana maʻalahi, hiki iā ʻoe ke hana ma ka hoʻohālikelike me 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
  • E ho'āʻo me nā kumuwaiwai ʻaʻole e hana ma groovy, pono ʻoe e hoʻohana i ka hoʻāʻo hope.
  • Pono e loaʻa i kēlā me kēia lawelawe kāna punawai.application.name ma lalo o kahi e hoʻopaʻa ʻia ai nā meheu. He aha ka inoa kaʻawale no ke kūʻai aku a me ka hoʻāʻo, i ʻole e hoʻopilikia pū me lākou.
  • Inā hoʻohana ʻoe i GlobalTracer a me tomcat, a laila loaʻa i nā lawelawe āpau e holo ana i kēia tomcat hoʻokahi GlobalTracer, no laila e loaʻa iā lākou ka inoa lawelawe like.
  • I ka hoʻohui ʻana i nā ala i kahi ʻano, pono ʻoe e hōʻoia ʻaʻole i kāhea ʻia i nā manawa he nui i kahi loop. Pono e hoʻohui i hoʻokahi trace maʻamau no nā kelepona a pau, e hōʻoiaʻiʻo ana i ka nui o ka manawa hana. A i ʻole, e hana ʻia kahi haʻahaʻa keu.
  • I ka manawa ma jaeger-ui, ua noi nui ʻia no ka nui o nā meheu, a ʻoiai ʻaʻole lākou i kali i ka pane, ua hana hou lākou. ʻO ka hopena, ua hoʻomaka ka jaeger-query e ʻai i ka nui o ka hoʻomanaʻo a hoʻolohi i ka elastic. Kōkua ʻia e ka hoʻomaka hou ʻana i ka jaeger-query

Ka laʻana, ka mālama ʻana a me ka nānā ʻana i nā meheu

ʻEkolu ʻano hōʻailona hōʻailona:

  1. Const nāna e hoʻouna a mālama i nā meheu āpau.
  2. Probabilistic nāna e kānana i nā meheu me kekahi mea hiki.
  3. Ratelimiting ka mea e kaupalena ana i ka heluna o na meheu no kekona. Hiki iā ʻoe ke hoʻonohonoho i kēia mau hoʻonohonoho ma ka mea kūʻai aku, ma ka jaeger-agent a i ʻole ka mea ʻohi. I kēia manawa, hoʻohana mākou i ka const 1 i ka waihona waiwai, no ka mea ʻaʻole nui nā noi, akā lōʻihi ka manawa. I ka wā e hiki mai ana, inā e hoʻokau nui kēia i ka ʻōnaehana, hiki iā ʻoe ke kaupalena iā ia.

Inā ʻoe e hoʻohana i ka cassandra, a laila ma ka maʻamau e mālama i nā traces no nā lā ʻelua. Ke hoʻohana nei mākou ʻasticlaau a mālama ʻia nā meheu no nā manawa a pau a ʻaʻole holoi ʻia. Hoʻokumu ʻia kahi helu ʻokoʻa no kēlā me kēia lā, no ka laʻana jaeger-service-2019-03-04. I ka wā e hiki mai ana, pono ʻoe e hoʻonohonoho i ka hoʻomaʻemaʻe maʻemaʻe o nā traces kahiko.

No ka ʻike ʻana i nā traces pono ʻoe:

  • E koho i ka lawelawe āu e makemake ai e kānana i nā meheu, no ka laʻana, tomcat7-default no kahi lawelawe e holo nei i ka tomcat a ʻaʻole hiki ke loaʻa kona inoa ponoʻī.
  • A laila koho i ka hana, ka manawa manawa a me ka liʻiliʻi o ka manawa hana, no ka laʻana mai 10 kekona, e lawe i nā hana lōʻihi wale nō.
    Ka Huli Hana, OpenTracing a me Jaeger
  • E hele i kekahi o nā meheu a ʻike i ka mea e lohi ana ma laila.
    Ka Huli Hana, OpenTracing a me Jaeger

Eia kekahi, inā ʻike ʻia kekahi id noi, a laila hiki iā ʻoe ke loaʻa i kahi trace e kēia id ma o ka huli ʻana i ka tag, inā i hoʻopaʻa ʻia kēia id i ka trace span.

ʻO ka palapala

Articles

wikiō

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka