Sèvis Tracing, OpenTracing ak Jaeger

Sèvis Tracing, OpenTracing ak Jaeger

Nou itilize achitekti mikwosèvis nan pwojè nou yo. Lè obstak pèfòmans rive, anpil tan pase siveyans ak analize mòso bwa. Lè w anrejistre tan operasyon endividyèl yo nan yon dosye boutèy demi lit, anjeneral li difisil pou w konprann sa ki te mennen nan envoke operasyon sa yo, pou swiv sekans aksyon oswa chanjman tan yon operasyon parapò ak yon lòt nan sèvis diferan.

Pou minimize travay manyèl, nou deside sèvi ak youn nan zouti trase yo. Konsènan ki jan ak poukisa ou ka itilize trase ak ki jan nou te fè li, epi yo pral diskite nan atik sa a.

Ki pwoblèm yo ka rezoud ak trase

  1. Jwenn blokaj pèfòmans tou de nan yon sèl sèvis ak nan tout pyebwa ekzekisyon ant tout sèvis k ap patisipe yo. Pa egzanp:
    • Anpil kout apèl youn apre lòt ant sèvis, pou egzanp, nan jeokodaj oswa nan yon baz done.
    • Tan I/O tann, tankou transfè rezo oswa lekti disk.
    • Long analiz done.
    • Operasyon long ki mande CPU.
    • Seksyon kòd ki pa nesesè pou jwenn rezilta final la epi yo ka retire oswa retade.
  2. Klèman konprann nan ki sekans sa yo rele ak sa k ap pase lè operasyon an fèt.
    Sèvis Tracing, OpenTracing ak Jaeger
    Li ka wè ke, pou egzanp, demann lan te vini nan sèvis la WS -> sèvis la WS te ajoute done atravè sèvis la R -> Lè sa a, voye yon demann nan sèvis la V -> sèvis la V chaje yon anpil nan done ki soti nan R la. sèvis -> ale nan sèvis la P -> sèvis la P ale ankò nan sèvis R -> sèvis V inyore rezilta a epi li ale nan sèvis J -> epi sèlman Lè sa a, li retounen repons lan nan sèvis WS, pandan y ap kontinye kalkile yon lòt bagay nan la. background.
    San yo pa tankou yon tras oswa dokiman detaye pou tout pwosesis la, li trè difisil pou konprann sa k ap pase lè ou gade nan kòd la pou premye fwa, ak kòd la gaye nan diferan sèvis ak kache dèyè yon pakèt moun sou posode ak interfaces.
  3. Koleksyon enfòmasyon sou pye bwa ekzekisyon an pou analiz ki vin apre yo. Nan chak etap nan ekzekisyon, ou ka ajoute enfòmasyon sou tras la ki disponib nan etap sa a ak Lè sa a, konnen ki done opinyon ki mennen nan yon senaryo menm jan an. Pa egzanp:
    • ID itilizatè
    • Dwa yo
    • Kalite metòd chwazi
    • Log oswa erè ekzekisyon
  4. Vire tras nan yon sou-ansanm nan metrik ak plis analiz deja nan fòm lan nan metrik.

Ki tras ka journal. Espansyon

Nan trase gen konsèp nan yon span, sa a se yon analogue nan yon sèl boutèy demi lit, nan konsole a. Spa a gen:

  • Non, anjeneral non metòd ki te egzekite a
  • Non sèvis kote yo te pwodwi span an
  • Pwòp idantite inik
  • Gen kèk kalite enfòmasyon meta nan fòm lan nan yon kle/valè ki te konekte nan li. Pou egzanp, paramèt metòd oswa metòd la te fini ak yon erè oswa ou pa
  • Kòmanse ak fen fwa pou span sa a
  • ID span paran

Chak span yo voye bay pèseptè a span yo dwe estoke nan baz done a pou revize pita le pli vit ke li te fini ekzekisyon li. Nan tan kap vini an, ou ka bati yon pye bwa nan tout span pa konekte pa id paran. Lè w ap analize, ou ka jwenn, pou egzanp, tout span yo nan kèk sèvis ki te pran plis pase kèk tan. Anplis de sa, lè w ale nan yon span espesifik, wè tout pyebwa ki anwo ak anba span sa a.

Sèvis Tracing, OpenTracing ak Jaeger

Opentrace, Jagger ak fason nou aplike li pou pwojè nou yo

Gen yon estanda komen opentrace, ki dekri kijan ak sa yo ta dwe kolekte, san yo pa mare pa trase nan yon aplikasyon espesifik nan nenpòt lang. Pou egzanp, nan Java, tout travay ki gen tras fèt atravè API Opentrace komen, ak anba li, pou egzanp, Jaeger oswa yon aplikasyon vid default ki pa fè anyen ka kache.
Nou ap itilize Jaeger kòm yon aplikasyon Opentrace. Li konsiste de plizyè eleman:

Sèvis Tracing, OpenTracing ak Jaeger

  • Jaeger-agent se yon ajan lokal ki anjeneral enstale sou chak machin ak sèvis yo konekte nan li sou pò default lokal la. Si pa gen okenn ajan, lè sa a tras tout sèvis sou machin sa a anjeneral enfim
  • Jaeger-pèseptè - tout ajan voye tras kolekte nan li, epi li mete yo nan baz done a chwazi
  • Baz done a se Cassandra pi pito yo, men nou itilize elasticsearch, gen aplikasyon pou yon koup nan lòt baz done ak yon aplikasyon nan memwa ki pa sove anyen sou disk.
  • Jaeger-query se yon sèvis ki ale nan baz done a epi retounen tras ki deja kolekte pou analiz
  • Jaeger-ui se yon koòdone entènèt pou chèche ak gade tras, li ale nan jaeger-query

Sèvis Tracing, OpenTracing ak Jaeger

Yon eleman separe ka rele aplikasyon an nan opentrace jaeger pou lang espesifik, atravè ki span yo voye bay jaeger-agent.
Konekte Jagger nan Java vini desann nan mete ann aplikasyon io.opentracing.Tracer koòdone, apre yo fin ki tout tras nan li pral vole nan ajan reyèl la.

Sèvis Tracing, OpenTracing ak Jaeger

Epitou pou eleman prentan an, ou ka konekte opentracing-printemps-nwaj-starter ak aplikasyon nan men Jaeger opentracing-spring-jaeger-cloud-starter ki pral otomatikman konfigirasyon trase pou tout bagay ki pase nan eleman sa yo, pou egzanp demann http bay kontwolè, demann nan baz done a atravè jdbc, elatriye.

Tras antre nan Java

Yon kote nan nivo siperyè a, yo dwe kreye premye Span, sa a ka fè otomatikman, pou egzanp, pa kontwolè prentan an lè yo resevwa yon demann, oswa manyèlman si pa gen okenn. Lè sa a, li transmèt nan Dimansyon ki anba a. Si nenpòt nan metòd ki anba yo vle ajoute yon Span, li pran ActiveSpan aktyèl la soti nan Scope a, kreye yon nouvo Span epi li di paran li se ActiveSpan ki lakòz, epi fè nouvo Span aktif. Lè w ap rele sèvis ekstèn yo, yo pase span aktif aktyèl la, epi sèvis sa yo kreye nouvo span ak referans a span sa a.
Tout travay ale nan egzanp Tracer la, ou ka jwenn li atravè mekanis DI a, oswa GlobalTracer.get () kòm yon varyab mondyal si mekanis DI a pa travay. Pa default, si traser pa te inisyalize, NoopTracer ap retounen ki pa fè anyen.
Anplis de sa, se sijè ki abòde aktyèl la jwenn nan trasè a atravè ScopeManager la, yo kreye yon nouvo sijè ki abòde nan yon sèl aktyèl la ak yon obligatwa nan nouvo span a, ak Lè sa a, Dimansyon ki te kreye a fèmen, ki fèmen span ki te kreye a epi retounen Dimansyon anvan an nan. eta aktif la. Dimansyon mare nan yon fil, kidonk lè pwogramasyon milti-threaded, ou pa dwe bliye transfere span aktif nan yon lòt fil, pou plis aktivasyon nan Dimansyon nan yon lòt fil ak referans a span sa 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)) {
                ...
            }
        });
    }
}

Pou pwogram milti-threaded, gen tou TracedExecutorService ak anbalaj menm jan an ki otomatikman voye span aktyèl la nan fil la lè travay asynchrone yo te lanse:

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

Pou demann http ekstèn gen TracingHttpClient

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

Pwoblèm nou te rankontre

  • Pwa ak DI pa toujou travay si traser la pa itilize nan yon sèvis oswa yon eleman, lè sa a Autowired Tracer ka pa travay epi w ap oblije itilize GlobalTracer.get().
  • Anotasyon yo pa travay si se pa yon eleman oswa sèvis, oswa si yo rele metòd la nan yon metòd vwazen nan menm klas la. Ou dwe fè atansyon pou tcheke sa ki travay epi sèvi ak kreyasyon trase manyèl si @Traced pa travay. Ou kapab tou tache yon lòt du pou java annotations, lè sa a yo ta dwe travay tout kote.
  • Nan ansyen sezon prentan ak bòt prentan an, opentraing prentan nwaj otokonfigurasyon an pa travay akòz pinèz nan DI, Lè sa a, si ou vle tras yo nan eleman yo prentan yo travay otomatikman, ou ka fè li pa analoji ak 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
  • Eseye ak resous pa travay nan groovy, ou dwe itilize eseye finalman.
  • Chak sèvis dwe genyen pwòp spring.application.name anba ki tras yo pral konekte. Ki sa ki fè yon non separe pou vann a ak tès la, se konsa yo pa entèfere ak yo ansanm.
  • Si w itilize GlobalTracer ak tomcat, lè sa a tout sèvis k ap kouri nan tomcat sa a gen yon sèl GlobalTracer, kidonk yo tout pral gen menm non sèvis la.
  • Lè w ajoute tras nan yon metòd, ou bezwen asire w ke li pa rele anpil fwa nan yon bouk. Li nesesè ajoute yon sèl tras komen pou tout apèl, ki garanti tan travay total la. Sinon, yo pral kreye yon chaj depase.
  • Yon fwa nan jaeger-ui, yo te fè demann twò gwo pou yon gwo kantite tras, epi kòm yo pa t 'tann pou yon repons, yo te fè li ankò. Kòm yon rezilta, jaeger-query te kòmanse manje anpil memwa ak ralanti elastik. Ede pa rekòmanse jaeger-query

Pran echantiyon, estoke ak gade tras

Gen twa kalite echantiyon tras:

  1. Const ki voye ak sove tout tras.
  2. Pwobabilite ki filtre tras ak kèk pwobabilite bay yo.
  3. Ratelimiting ki limite kantite tras pa segonn. Ou ka configured paramèt sa yo sou kliyan an, swa sou ajan jaeger la oswa sou pèseptè a. Koulye a, nou itilize const 1 nan pile evalyasyon an, paske pa gen anpil demann, men yo pran yon bon bout tan. Nan lavni an, si sa a pral egzèse yon chaj twòp sou sistèm nan, ou ka limite li.

Si ou itilize Cassandra, pa default li sèlman magazen tras pou de jou. Nou ap itilize rechèch elastik yo ak tras yo estoke pou tout tan epi yo pa efase. Yo kreye yon endèks separe pou chak jou, pa egzanp jaeger-service-2019-03-04. Nan lavni an, ou bezwen configured netwayaj otomatik nan tras fin vye granmoun.

Pou w ka wè tras yo ou bezwen:

  • Chwazi sèvis ou vle filtre tras, pou egzanp, tomcat7-default pou yon sèvis ki ap kouri nan tomcat a epi ki pa ka gen pwòp non li.
  • Lè sa a, chwazi operasyon an, entèval tan an ak tan operasyon minimòm lan, pou egzanp soti nan 10 segonn, pran sèlman ekzekisyon long.
    Sèvis Tracing, OpenTracing ak Jaeger
  • Ale nan youn nan tras yo epi wè sa ki te ralanti desann la.
    Sèvis Tracing, OpenTracing ak Jaeger

Epitou, si yo konnen kèk id demann, Lè sa a, ou ka jwenn yon tras pa id sa a atravè yon rechèch tag, si id sa a konekte nan span tras la.

Dokimantasyon

Atik

Videyo

Sous: www.habr.com

Add nouvo kòmantè