Rianú Seirbhíse, OpenTracing agus Jaeger

Rianú Seirbhíse, OpenTracing agus Jaeger

Bainimid úsáid as ailtireacht microservice inár dtionscadail. Nuair a tharlaíonn baic feidhmíochta, caitear go leor ama ag faireachán agus ag parsáil na logaí. Nuair a bhíonn amanna na n-oibríochtaí aonair á logáil isteach i gcomhad logála, is gnách go mbíonn sé deacair a thuiscint cad ba chúis leis na hoibríochtaí sin a agairt, seicheamh na ngníomhartha nó athrú ama oibríochta amháin i gcomparáid le hoibríocht eile a rianú i seirbhísí éagsúla.

Chun saothair láimhe a íoslaghdú, bheartaíomar ceann de na huirlisí rianaithe a úsáid. Faoi conas agus cén fáth ar féidir leat úsáid a bhaint as rianú agus conas a rinne muid é, agus pléifear san Airteagal seo.

Cad iad na fadhbanna is féidir a réiteach le rianú

  1. Faigh scrogaill feidhmíochta laistigh d'aon seirbhís amháin agus sa chrann forghníomhaithe iomlán idir na seirbhísí rannpháirteacha go léir. Mar shampla:
    • Go leor glaonna gearra comhleanúnacha idir seirbhísí, mar shampla, chuig geochódú nó chuig bunachar sonraí.
    • Fanann I/O fada, mar aistrithe líonra nó léann diosca.
    • Parsáil fada sonraí.
    • Oibríochtaí fada óna dteastaíonn cpu.
    • Codanna de chód nach bhfuil ag teastáil chun an toradh deiridh a fháil agus is féidir iad a bhaint nó moill a chur orthu.
  2. A thuiscint go soiléir cén seicheamh a thugtar air agus cad a tharlaíonn nuair a dhéantar an oibríocht.
    Rianú Seirbhíse, OpenTracing agus Jaeger
    Is féidir a fheiceáil, mar shampla, gur tháinig an Iarratas chuig an tseirbhís WS -> rinne an tseirbhís WS na sonraí a fhorlíonadh tríd an tseirbhís R -> ansin chuir sé iarratas chuig an tseirbhís V -> chuir an tseirbhís V go leor sonraí ó na R seirbhís -> chuaigh go dtí an tseirbhís P -> chuaigh an tseirbhís P arís chuig seirbhís R -> rinne seirbhís V neamhaird den toradh agus chuaigh sé chuig seirbhís J -> agus gan ach ansin chuir sé an freagra ar ais chuig an tseirbhís WS, agus ag leanúint ar aghaidh ag ríomh rud éigin eile i an cúlra.
    Gan rian den sórt sin nó doiciméadú mionsonraithe don phróiseas iomlán, tá sé an-deacair a thuiscint cad atá ag tarlú agus tú ag féachaint ar an gcód don chéad uair, agus tá an cód scaipthe ar fud seirbhísí éagsúla agus i bhfolach taobh thiar de bhosca bruscair agus comhéadain.
  3. Bailiú faisnéise faoin gcrann forghníomhaithe le haghaidh anailíse iarchurtha ina dhiaidh sin. Ag gach céim den fhorghníomhú, is féidir leat faisnéis a chur leis an rian atá ar fáil ag an gcéim seo agus ansin a dhéanamh amach cad iad na sonraí ionchuir ba chúis le cás comhchosúil. Mar shampla:
    • ID Úsáideora
    • Cearta
    • Cineál modh roghnaithe
    • Loga nó earráid fhorghníomhaithe
  4. Rianta a thiontú ina bhfothacar méadrachta agus anailís bhreise i bhfoirm méadrachta cheana féin.

Cén rian is féidir a logáil. Réise

Sa rian seo tá coincheap an réise, is analóg é seo de loga amháin, chuig an consól. Tá:

  • Ainm, de ghnáth ainm an mhodha a cuireadh i gcrích
  • Ainm na seirbhíse inar gineadh an réise
  • Aitheantas uathúil féin
  • Meiteashonraí de shaghas éigin i bhfoirm eochrach/luacha a logáilte isteach ann. Mar shampla, paraiméadair modh nó an modh dar críoch le earráid nó nach bhfuil
  • Amanna tosaigh agus deiridh don réise seo
  • Aitheantas réise tuismitheora

Seoltar gach réise chuig an mbailitheoir réise lena stóráil sa bhunachar sonraí le haghaidh athbhreithniú níos déanaí a luaithe a bheidh sé curtha i gcrích. Sa todhchaí, is féidir leat crann de gach réise a thógáil trí nascadh le ID tuismitheora. Agus anailís á déanamh agat, is féidir leat a fháil, mar shampla, na réimsí uile i seirbhís éigin a ghlac níos mó ná roinnt ama. Thairis sin, agus tú ag dul go dtí réise ar leith, féach ar an gcrann iomlán thuas agus faoin réise seo.

Rianú Seirbhíse, OpenTracing agus Jaeger

Opentrace, Jagger agus conas a chuireamar i bhfeidhm é dár dtionscadail

Tá comhchaighdeán ann rian oscailte, a chuireann síos ar conas agus cad ba cheart a bhailiú, gan a bheith ceangailte trí rianú le cur i bhfeidhm ar leith i dteanga ar bith. Mar shampla, i Java, déantar gach obair le rianta tríd an API Opentrace coitianta, agus faoi sé, mar shampla, Jaeger nó cur i bhfeidhm réamhshocraithe folamh nach ndéanann aon rud is féidir a cheilt.
Táimid ag úsáid Jaeger mar chur i bhfeidhm Opentrace. Tá sé comhdhéanta de roinnt comhpháirteanna:

Rianú Seirbhíse, OpenTracing agus Jaeger

  • Is gníomhaire áitiúil é Jaeger-agent a shuiteáiltear de ghnáth ar gach meaisín agus logáiltear seirbhísí isteach ann ar an gcalafort réamhshocraithe áitiúil. Mura bhfuil gníomhaire ann, díchumasaítear rianta de na seirbhísí go léir ar an meaisín seo de ghnáth
  • Jaeger-bhailitheoir - seolann na gníomhairí go léir rianta bailithe chuige, agus cuireann sé sa bhunachar sonraí roghnaithe iad
  • Is é an bunachar sonraí an cassandra is fearr leo, ach úsáidimid elasticsearch, tá feidhmiúcháin ann do chúpla bunachar sonraí eile agus cur i bhfeidhm i gcuimhne nach sábhálann aon rud ar an diosca
  • Is seirbhís é Jaeger-query a théann chuig an mbunachar sonraí agus a sheolann rianta a bailíodh cheana féin le haghaidh anailíse
  • Is comhéadan gréasáin é Jaeger-ui chun rianta a chuardach agus a fheiceáil, téann sé chuig jaeger-query

Rianú Seirbhíse, OpenTracing agus Jaeger

Is féidir comhpháirt ar leith a dtugtar feidhmiú opentrace jaeger do theangacha ar leith, trína seoltar raonta chuig jaeger-agent.
Jagger a nascadh i Java thagann síos go dtí an comhéadan io.opentracing.Tracer a chur i bhfeidhm, tar éis a mbeidh gach rian tríd eitilt go dtí an gníomhaire fíor.

Rianú Seirbhíse, OpenTracing agus Jaeger

Chomh maith leis sin le haghaidh comhpháirt an earraigh, is féidir leat ceangal a dhéanamh opentracing-earrach-scamall-tosaithe agus cur i bhfeidhm ó Jaeger opentracing-spring-jaeger-cloud-starter a chumróidh rianú go huathoibríoch do gach rud a théann trí na comhpháirteanna seo, mar shampla iarratais http chuig rialtóirí, iarratais chuig an mbunachar sonraí trí jdbc, etc.

Rianta logáil isteach i Java

Áit éigin ag an mbarrleibhéal, ní mór an chéad Réise a chruthú, is féidir é seo a dhéanamh go huathoibríoch, mar shampla, ag rialtóir an earraigh nuair a fhaightear iarratas, nó de láimh mura bhfuil aon cheann ann. Tarchuirtear ansin é tríd an Scóip thíos. Más mian le haon cheann de na modhanna thíos Réise a chur leis, tógann sé an Span gníomhach reatha ón Raon Feidhme, cruthaíonn sé Réise nua agus deir gurb é a thuismitheoir an Span gníomhach mar thoradh air, agus déanann sé an Réise nua gníomhach. Nuair a ghlaotar ar sheirbhísí seachtracha, cuirtear an réise gníomhach reatha ar aghaidh chucu, agus cruthaíonn na seirbhísí sin raonta nua ag tagairt don réise seo.
Téann an obair ar fad trí shampla Tracer, is féidir leat é a fháil tríd an meicníocht DI, nó GlobalTracer.get () mar athróg dhomhanda mura n-oibríonn an mheicníocht DI. De réir réamhshocraithe, mura bhfuil an rianaitheoir tosaithe, fillfidh NoopTracer nach ndéanann faic.
Ina theannta sin, faightear an raon feidhme reatha ón rianaire tríd an ScopeManager, cruthaítear raon feidhme nua ón gceann reatha a bhfuil an réise nua ceangailte leis, agus ansin déantar an Scóip cruthaithe a dhúnadh, a dhúnann an réise cruthaithe agus a sheolann an Raon feidhme roimhe seo chuig an stát gníomhach. Tá raon feidhme ceangailte le snáithe, mar sin, nuair a bhíonn ríomhchlárú il-snáithithe agat, ní mór duit cuimhneamh ar an réise gníomhach a aistriú go snáithe eile, chun raon feidhme snáithe eile a ghníomhachtú tuilleadh agus tagairt á dhéanamh don réise seo.

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

Le haghaidh ríomhchlárú il-snáithe, tá TracedExecutorService agus fillteáin chomhchosúla ann freisin a chuireann an réise reatha ar aghaidh go huathoibríoch chuig an snáithe nuair a sheoltar tascanna asincrónacha:

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

Le haghaidh iarratais sheachtracha http tá TracingHttpClient

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

Fadhbanna a bhí romhainn

  • Ní i gcónaí a oibríonn pónairí agus DI mura n-úsáidtear an rianaire i seirbhís nó i gcomhpháirt, mar sin Uathsreangaithe Seans nach n-oibreoidh Tracer agus beidh ort GlobalTracer.get() a úsáid.
  • Ní oibríonn anótálacha mura comhpháirt nó seirbhís é, nó má ghlaoitear an modh ó mhodh comharsanachta den aicme chéanna. Caithfidh tú a bheith cúramach a sheiceáil cad a oibríonn agus úsáid a bhaint as cruthú rianta láimhe mura n-oibríonn @Traced. Is féidir leat tiomsaitheoir breise a cheangal freisin le haghaidh nótaí java, ansin ba chóir dóibh oibriú i ngach áit.
  • Sa sean-tosaithe earrach agus earrach, ní oibríonn uathchumraíocht scamall earrach opentraing mar gheall ar fhabhtanna i DI, ansin más mian leat go n-oibreoidh na rianta i gcomhpháirteanna an earraigh go huathoibríoch, is féidir leat é a dhéanamh de réir analaí leis. 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
  • Bain triail as le hacmhainní nach bhfuil ag obair i groovy, ní mór duit úsáid a bhaint as iarracht ar deireadh.
  • Caithfidh gach seirbhís a ainm earrach.application.ainm féin a bheith aici faoina ndéanfar rianta a logáil. Cad a dhéanann ainm ar leith don díol agus an tástáil, ionas nach gcuirfí isteach orthu le chéile.
  • Má úsáideann tú GlobalTracer agus tomcat, tá GlobalTracer amháin ag na seirbhísí go léir a ritheann sa tomcat seo, mar sin beidh an t-ainm seirbhíse céanna orthu go léir.
  • Agus rianta á gcur le modh, ní mór duit a bheith cinnte nach dtugtar go leor uaireanta i lúb. Is gá rian coiteann amháin a chur leis do gach glao, rud a ráthaíonn an t-am oibre iomlán. Seachas sin, cruthófar ró-ualach.
  • Nuair a bhí siad i jaeger-ui, rinneadh iarratais ró-mhóra ar líon mór rianta, agus ós rud é nár fhan siad le freagra, rinne siad arís é. Mar thoradh air sin, thosaigh jaeger-cheist a lán de chuimhne a ithe agus mall síos leaisteach. Le cabhair ó jaeger-query a atosú

Rianta a shampláil, a stóráil agus a fheiceáil

Tá trí chineál ann rianta samplála:

  1. Const a sheolann agus a shábhálann gach rian.
  2. Dóchúil a dhéanann scagadh ar rianta le dóchúlacht áirithe.
  3. Rateliminiú a chuireann teorainn le líon na rianta in aghaidh an tsoicind. Is féidir leat na socruithe seo a chumrú ar an gcliant, ar an jaeger-agent nó ar an mbailitheoir. Anois bainimid úsáid as const 1 sa chruach luachála, ós rud é nach bhfuil mórán iarratas ann, ach glacann siad go leor ama. Sa todhchaí, más rud é go gcuirfidh sé seo ualach iomarcach ar an gcóras, is féidir leat é a theorannú.

Má úsáideann tú cassandra, ansin de réir réamhshocraithe ní stórálann sé ach rianta ar feadh dhá lá. Táimid ag úsáid leaisteachas agus stóráiltear rianta ar feadh an ama agus ní scriostar iad. Cruthaítear innéacs ar leith do gach lá, mar shampla jaeger-service-2019-03-04. Sa todhchaí, ní mór duit glanadh uathoibríoch sean-rianta a chumrú.

Chun na rianta a fheiceáil is gá duit:

  • Roghnaigh an tseirbhís trína dteastaíonn uait rianta a scagadh, mar shampla, tomcat7-default do sheirbhís atá ar siúl sa tomcat agus nach bhfuil a ainm féin aici.
  • Ansin roghnaigh an oibríocht, an t-eatramh ama agus an t-íosmhéid ama oibríochta, mar shampla ó 10 soicind, gan ach forghníomhú fada a dhéanamh.
    Rianú Seirbhíse, OpenTracing agus Jaeger
  • Téigh go dtí ceann de na rianta agus féach cad a bhí ag moilliú síos ann.
    Rianú Seirbhíse, OpenTracing agus Jaeger

Chomh maith leis sin, má tá aitheantas iarratais éigin ar eolas, ansin is féidir leat rian a fháil leis an aitheantas seo trí chuardach clibeanna, má tá an t-aitheantas seo logáilte sa rian-réise.

Doiciméadú

Airteagail

Video

Foinse: will.com

Add a comment