Titele iṣẹ, OpenTracing ati Jaeger

Titele iṣẹ, OpenTracing ati Jaeger

A lo microservice faaji ninu awọn iṣẹ akanṣe wa. Nigbati awọn igo iṣẹ ṣiṣe waye, akoko pupọ ni a lo ibojuwo ati sisọ awọn akọọlẹ. Nigbati o ba wọle si awọn akoko ti awọn iṣẹ kọọkan si faili log, o nira nigbagbogbo lati loye kini o yori si ipe ti awọn iṣẹ wọnyi, lati tọpa lẹsẹsẹ awọn iṣe tabi iyipada akoko ti iṣẹ kan ni ibatan si omiiran ni awọn iṣẹ oriṣiriṣi.

Lati dinku iṣẹ afọwọṣe, a pinnu lati lo ọkan ninu awọn irinṣẹ wiwa kakiri. Nipa bii ati idi ti o ṣe le lo wiwa kakiri ati bii a ṣe ṣe, ati pe a yoo jiroro ninu nkan yii.

Awọn iṣoro wo ni a le yanju pẹlu wiwa kakiri

  1. Wa awọn igo iṣẹ mejeeji laarin iṣẹ kan ati ni gbogbo igi ipaniyan laarin gbogbo awọn iṣẹ ti o kopa. Fun apere:
    • Ọpọlọpọ awọn ipe itẹlera kukuru laarin awọn iṣẹ, fun apẹẹrẹ, si geocoding tabi si ibi ipamọ data.
    • I/O nduro gigun, gẹgẹbi awọn gbigbe nẹtiwọọki tabi awọn kika disk.
    • Pipin data gigun.
    • Awọn iṣẹ pipẹ to nilo Sipiyu.
    • Awọn apakan ti koodu ti ko nilo lati gba abajade ipari ati pe o le yọkuro tabi idaduro.
  2. Ni oye kedere ninu iru ohun ti a pe ati ohun ti o ṣẹlẹ nigbati iṣẹ naa ba ṣe.
    Titele iṣẹ, OpenTracing ati Jaeger
    O le rii pe, fun apẹẹrẹ, Ibeere naa wa si iṣẹ WS -> iṣẹ WS ṣe afikun data nipasẹ iṣẹ R -> lẹhinna firanṣẹ ibeere kan si iṣẹ V -> iṣẹ V ti kojọpọ data pupọ lati inu Iṣẹ R -> lọ si iṣẹ P -> iṣẹ P naa tun lọ si iṣẹ R -> iṣẹ V kọju esi naa o si lọ si iṣẹ J -> ati pe lẹhinna pada idahun si WS iṣẹ, lakoko ti o tẹsiwaju lati ṣe iṣiro nkan miiran ni abẹlẹ.
    Laisi iru itọpa tabi alaye alaye fun gbogbo ilana, o ṣoro pupọ lati ni oye ohun ti n ṣẹlẹ nigbati o n wo koodu naa fun igba akọkọ, ati pe koodu naa tuka kaakiri awọn iṣẹ oriṣiriṣi ati ti o farapamọ lẹhin ẹgbẹpọ awọn bins ati awọn atọkun.
  3. Gbigba alaye nipa igi ipaniyan fun itupalẹ idaduro ti o tẹle. Ni ipele kọọkan ti ipaniyan, o le ṣafikun alaye si itọpa ti o wa ni ipele yii ati lẹhinna ṣawari kini data titẹ sii ti o yori si iru oju iṣẹlẹ kanna. Fun apere:
    • Idanimọ olumulo
    • Awọn ẹtọ
    • Iru ọna ti a yan
    • Wọle tabi aṣiṣe ipaniyan
  4. Yipada awọn itọpa sinu ipin ti awọn metiriki ati itupalẹ siwaju tẹlẹ ni irisi awọn metiriki.

Ohun ti wa kakiri le wọle. Igba

Ni wiwa kakiri imọran ti igba kan wa, eyi jẹ afọwọṣe ti log kan, si console. Spa naa ni:

  • Orukọ, nigbagbogbo orukọ ọna ti a ṣe
  • Orukọ iṣẹ ninu eyiti igba ti ipilẹṣẹ
  • Ti ara oto ID
  • Diẹ ninu iru alaye meta ni irisi bọtini/iye ti o ti wọle sinu rẹ. Fun apẹẹrẹ, awọn paramita ọna tabi ọna ti pari pẹlu aṣiṣe tabi rara
  • Bẹrẹ ati ipari awọn akoko fun igba yii
  • ID igba baba

Akoko kọọkan ni a firanṣẹ si olugba igba lati wa ni ipamọ sinu ibi ipamọ data fun atunyẹwo nigbamii ni kete ti o ti pari ipaniyan rẹ. Ni ọjọ iwaju, o le kọ igi kan ti gbogbo awọn ipari nipa sisopọ nipasẹ id obi. Nigbati o ba n ṣe itupalẹ, o le wa, fun apẹẹrẹ, gbogbo awọn akoko ninu iṣẹ kan ti o gba diẹ sii ju igba diẹ lọ. Siwaju sii, nipa lilọ si igba kan pato, wo gbogbo igi loke ati ni isalẹ igba yii.

Titele iṣẹ, OpenTracing ati Jaeger

Opentrace, Jagger ati bii a ṣe ṣe imuse rẹ fun awọn iṣẹ akanṣe wa

Iwọnwọn ti o wọpọ wa ita gbangba, eyi ti o ṣe apejuwe bi ati ohun ti o yẹ ki o gba, laisi ti a so nipa wiwa si imuse kan pato ni eyikeyi ede. Fun apẹẹrẹ, ni Java, gbogbo iṣẹ pẹlu awọn itọpa ni a ṣe nipasẹ Opentrace API ti o wọpọ, ati labẹ rẹ, fun apẹẹrẹ, Jaeger tabi imuse aiyipada ṣofo ti ko ṣe ohunkohun ko le farapamọ.
A nlo Ogboju ode bi imuse ti Opentrace. O ni awọn paati pupọ:

Titele iṣẹ, OpenTracing ati Jaeger

  • Jaeger-oluranlowo jẹ aṣoju agbegbe ti o maa n fi sori ẹrọ lori ẹrọ kọọkan ati awọn iṣẹ ti a wọle sinu rẹ lori ibudo aiyipada agbegbe. Ti ko ba si oluranlowo, lẹhinna awọn itọpa ti gbogbo awọn iṣẹ lori ẹrọ yii nigbagbogbo jẹ alaabo
  • Jaeger-odè - gbogbo awọn aṣoju firanṣẹ awọn itọpa ti a gbajọ si rẹ, ati pe o fi wọn sinu ibi ipamọ data ti o yan
  • Ibi ipamọ data jẹ cassandra ti wọn fẹ, ṣugbọn a lo elasticsearch, awọn imuse wa fun tọkọtaya kan ti awọn apoti isura infomesonu miiran ati imuse iranti ti ko ni fipamọ ohunkohun si disk.
  • Jaeger-query jẹ iṣẹ kan ti o lọ si ibi ipamọ data ti o da awọn ami ti o ti gba tẹlẹ fun itupalẹ
  • Jaeger-ui jẹ oju opo wẹẹbu kan fun wiwa ati wiwo awọn itọpa, o lọ si ibeere jaeger

Titele iṣẹ, OpenTracing ati Jaeger

Ẹya ara ọtọtọ ni a le pe ni imuse ti opentrace jaeger fun awọn ede kan pato, nipasẹ eyiti a fi ranṣẹ si jaeger-aṣoju.
Nsopọ Jagger ni Java wa si isalẹ lati ṣe imuse wiwo io.opentracing.Tracer, lẹhin eyi gbogbo awọn itọpa nipasẹ rẹ yoo fo si aṣoju gidi.

Titele iṣẹ, OpenTracing ati Jaeger

Paapaa fun paati orisun omi, o le sopọ opentracing-orisun omi-awọsanma-Starter ati imuse lati Jaeger opentracing-orisun omi-jaeger-awọsanma-Starter eyiti yoo tunto wiwa kakiri laifọwọyi fun ohun gbogbo ti o kọja nipasẹ awọn paati wọnyi, fun apẹẹrẹ awọn ibeere http si awọn oludari, awọn ibeere si ibi ipamọ data nipasẹ jdbc, ati bẹbẹ lọ.

Awọn itọpa wiwọle ni Java

Ibikan ni ipele oke, Span akọkọ gbọdọ ṣẹda, eyi le ṣee ṣe laifọwọyi, fun apẹẹrẹ, nipasẹ oluṣakoso orisun omi nigbati o ba gba ibeere kan, tabi pẹlu ọwọ ti ko ba si. Lẹhinna o tan kaakiri nipasẹ Dopin ni isalẹ. Ti eyikeyi ninu awọn ọna ti o wa ni isalẹ fẹ lati ṣafikun Span kan, yoo gbaSpan ti nṣiṣe lọwọ lọwọlọwọ lati Dopin, ṣẹda Span tuntun o sọ pe obi rẹ ni Abajade lọwọSpan, ati pe o jẹ ki Span tuntun ṣiṣẹ. Nigbati o ba n pe awọn iṣẹ ita, akoko ti nṣiṣe lọwọ lọwọlọwọ ti kọja si wọn, ati pe awọn iṣẹ wọnyẹn ṣẹda awọn aaye tuntun pẹlu itọkasi si igba yii.
Gbogbo iṣẹ n lọ nipasẹ apẹẹrẹ Tracer, o le gba nipasẹ ẹrọ DI, tabi GlobalTracer.get () gẹgẹbi oniyipada agbaye ti ẹrọ DI ko ba ṣiṣẹ. Nipa aiyipada, ti olutọpa ko ba ti ni ipilẹṣẹ, NoopTracer yoo pada ti ko ṣe nkankan.
Siwaju sii, iwọn ti o wa lọwọlọwọ ni a gba lati ọdọ olutọpa nipasẹ ScopeManager, iwọn tuntun kan ti ṣẹda lati inu eyiti o wa lọwọlọwọ pẹlu isọdọkan igba tuntun, ati lẹhinna Dopin ti a ṣẹda ti wa ni pipade, eyiti o tii ipari akoko ti o ṣẹda ati pada Dopin ti tẹlẹ si ipinle ti nṣiṣe lọwọ. Iwọn ti so pọ si okun kan, nitorinaa nigbati siseto olona-asapo, o ko gbọdọ gbagbe lati gbe igba ti nṣiṣe lọwọ si o tẹle ara miiran, fun imuṣiṣẹ siwaju sii ti Dopin ti o tẹle ara miiran pẹlu itọkasi akoko yii.

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

Fun siseto asapo olona-pupọ, TracedExecutorService tun wa ati awọn apamọra ti o jọra ti o fi akoko ti isiyi siwaju laifọwọyi si okun nigbati awọn iṣẹ ṣiṣe asynchronous ti ṣe ifilọlẹ:

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

Fun awọn ibeere http ita wa TiteleHttpClient

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

Awọn iṣoro ti a koju

  • Awọn ewa ati DI ko ṣiṣẹ nigbagbogbo ti a ko ba lo olutọpa ninu iṣẹ kan tabi paati, lẹhinna Ti firanṣẹ laifọwọyi Tracer le ma ṣiṣẹ ati pe iwọ yoo ni lati lo GlobalTracer.get().
  • Awọn akọsilẹ ko ṣiṣẹ ti kii ṣe paati tabi iṣẹ, tabi ti ọna naa ba pe lati ọna adugbo ti kilasi kanna. O ni lati ṣọra lati ṣayẹwo ohun ti o ṣiṣẹ ati lo ẹda itọpa afọwọṣe ti @Traced ko ba ṣiṣẹ. O tun le so olupilẹṣẹ afikun fun awọn asọye java, lẹhinna wọn yẹ ki o ṣiṣẹ nibi gbogbo.
  • Ni orisun omi atijọ ati bata orisun omi, ṣiṣatunṣe isọdọtun orisun omi orisun omi ko ṣiṣẹ nitori awọn idun ni DI, lẹhinna ti o ba fẹ ki awọn itọpa ninu awọn paati orisun omi ṣiṣẹ laifọwọyi, o le ṣe nipasẹ afiwe pẹlu github.com/opentracing-contrib/java-spring-jaeger/blob/master/opentracing-spring-jaeger-starter/src/main/java/io/opentracing/contrib/java/spring/jaeger/starter/JaegerAutoConfiguration.javava
  • Gbiyanju pẹlu awọn orisun ko ṣiṣẹ ni groovy, o gbọdọ lo gbiyanju nipari.
  • Iṣẹ kọọkan gbọdọ ni orisun orisun omi tirẹ.application.name labẹ eyiti awọn itọpa yoo wọle. Kini orukọ lọtọ fun tita ati idanwo naa, nitorinaa ki o ma ṣe dabaru pẹlu wọn papọ.
  • Ti o ba lo GlobalTracer ati tomcat, lẹhinna gbogbo awọn iṣẹ ti n ṣiṣẹ ni tomcat yii ni GlobalTracer kan, nitorinaa gbogbo wọn yoo ni orukọ iṣẹ kanna.
  • Nigbati o ba n ṣafikun awọn itọpa si ọna kan, o nilo lati rii daju pe ko pe ni ọpọlọpọ igba ni lupu kan. O jẹ dandan lati ṣafikun itọpa ti o wọpọ fun gbogbo awọn ipe, eyiti o ṣe iṣeduro akoko iṣẹ lapapọ. Bibẹẹkọ, ẹru apọju yoo ṣẹda.
  • Ni ẹẹkan ni jaeger-ui, awọn ibeere ti o tobi ju ni a ṣe fun nọmba nla ti awọn itọpa, ati pe niwon wọn ko duro fun esi, wọn tun ṣe. Bi abajade, jaeger-query bẹrẹ si jẹun pupọ ti iranti ati fa fifalẹ rirọ. Iranlọwọ nipa tun bẹrẹ jaeger-ibeere

Iṣapẹẹrẹ, titoju ati wiwo awọn itọpa

Nibẹ ni o wa mẹta orisi awọn itọpa iṣapẹẹrẹ:

  1. Const eyiti o firanṣẹ ati fipamọ gbogbo awọn itọpa.
  2. Probabilistic eyiti o ṣe asẹ awọn itọpa pẹlu iṣeeṣe diẹ ti a fun.
  3. Ratelimiting eyi ti o fi opin si nọmba awọn itọpa fun iṣẹju-aaya. O le tunto awọn wọnyi eto lori ose, boya lori jaeger-oluranlowo tabi lori-odè. Bayi a lo const 1 ninu akopọ valuator, nitori ko si ọpọlọpọ awọn ibeere, ṣugbọn wọn gba akoko pipẹ. Ni ọjọ iwaju, ti eyi yoo fa ẹru pupọ lori eto, o le ṣe idinwo rẹ.

Ti o ba lo cassandra, lẹhinna nipasẹ aiyipada o tọju awọn itọpa nikan fun ọjọ meji. A nlo rirọsi ati awọn itọpa ti wa ni ipamọ fun gbogbo akoko ati pe ko paarẹ. Atọka lọtọ ti ṣẹda fun ọjọ kọọkan, fun apẹẹrẹ jaeger-iṣẹ-2019-03-04. Ni ojo iwaju, o nilo lati tunto aifọwọyi aifọwọyi ti awọn itọpa atijọ.

Lati le wo awọn itọpa o nilo:

  • Yan iṣẹ ti o fẹ lati ṣe àlẹmọ awọn itọpa, fun apẹẹrẹ, tomcat7-aiyipada fun iṣẹ kan ti nṣiṣẹ ninu tomcat ati pe ko le ni orukọ tirẹ.
  • Lẹhinna yan iṣẹ naa, aarin akoko ati akoko iṣẹ ti o kere ju, fun apẹẹrẹ lati awọn aaya 10, lati mu awọn ipaniyan pipẹ nikan.
    Titele iṣẹ, OpenTracing ati Jaeger
  • Lọ si ọkan ninu awọn itọpa naa ki o wo ohun ti o fa fifalẹ nibẹ.
    Titele iṣẹ, OpenTracing ati Jaeger

Paapaa, ti idanimọ ibeere kan ba mọ, lẹhinna o le wa itọpa nipasẹ id yii nipasẹ wiwa tag, ti id yii ba ti wọle si aaye itọpa naa.

Iwe akosilẹ

Ìwé

Video

orisun: www.habr.com

Fi ọrọìwòye kun