Lorg seirbheis, OpenTracing agus Jaeger

Lorg seirbheis, OpenTracing agus Jaeger

Bidh sinn a’ cleachdadh ailtireachd microservice anns na pròiseactan againn. Nuair a thig cnapan-starra dèanadais, thèid tòrr ùine a chaitheamh a’ cumail sùil air agus a’ parsadh chlàran. Nuair a bhios tu a’ clàradh amannan gnìomhachd fa leth gu faidhle log, mar as trice tha e duilich a thuigsinn dè a lean gu bhith a’ toirt a-steach na h-obraichean sin, sùil a chumail air sreath nan gnìomhan no gluasad ùine aon obrachaidh an coimeas ri fear eile ann an diofar sheirbheisean.

Gus saothair làimhe a lughdachadh, chuir sinn romhainn aon de na h-innealan lorg a chleachdadh. Mu ciamar agus carson a chleachdas tu lorg agus mar a rinn sinn e, agus thèid a dheasbad san artaigil seo.

Dè na duilgheadasan a dh'fhaodar fhuasgladh le lorg

  1. Lorg cnapan-starra coileanaidh an dà chuid taobh a-staigh aon sheirbheis agus anns a’ chraobh cur gu bàs gu lèir eadar na seirbheisean a tha a’ gabhail pàirt. Mar eisimpleir:
    • Mòran fiosan goirid leantainneach eadar seirbheisean, mar eisimpleir, gu geocoding no gu stòr-dàta.
    • Bidh I/O fada a’ feitheamh, leithid gluasadan lìonra no leughaidhean diosc.
    • Parsadh dàta fada.
    • Obraichean fada a dh 'fheumas cpu.
    • Earrannan de chòd nach eil a dhìth gus an toradh deireannach fhaighinn agus faodar a thoirt air falbh no dàil a chuir air.
  2. Tuig gu soilleir dè an t-sreath a chanar ris agus dè thachras nuair a thèid an obair a dhèanamh.
    Lorg seirbheis, OpenTracing agus Jaeger
    Chithear, mar eisimpleir, gun tàinig an t-iarrtas gu seirbheis WS -> chuir an t-seirbheis WS dàta ris tron ​​​​t-seirbheis R -> an uairsin chuir e iarrtas chun t-seirbheis V -> chuir an t-seirbheis V tòrr dàta bhon R seirbheis -> chaidh e gu seirbheis P -> chaidh an t-seirbheis P a-rithist gu seirbheis R -> cha tug seirbheis V an aire don toradh agus chaidh e gu seirbheis J -> agus is ann dìreach an uairsin a thill am freagairt gu seirbheis WS, fhad ‘s a bha iad a’ leantainn air adhart ag obrachadh a-mach rudeigin eile san t-seirbheis cùl-raon.
    Às aonais a leithid de lorg no sgrìobhainnean mionaideach airson a’ phròiseas gu lèir, tha e gu math duilich a thuigsinn dè tha a’ tachairt nuair a choimheadas tu air a’ chòd airson a’ chiad uair, agus tha an còd sgapte air feadh diofar sheirbheisean agus falaichte air cùl dòrlach de bhionaichean agus eadar-aghaidh.
  3. Cruinneachadh fiosrachaidh mun chraobh cur gu bàs airson mion-sgrùdadh a chaidh a chuir dheth às deidh sin. Aig gach ìre de choileanadh, faodaidh tu fiosrachadh a chur ris an lorg a tha ri fhaighinn aig an ìre seo agus an uairsin faighinn a-mach dè an dàta a chuir a-steach a dh’ adhbhraich suidheachadh coltach ris. Mar eisimpleir:
    • ID cleachdaiche
    • Còraichean
    • Seòrsa dòigh-obrach taghte
    • Log no mearachd cur an gnìomh
  4. A’ tionndadh lorgan gu fo-sheata de mheatrics agus tuilleadh mion-sgrùdadh mar-thà ann an cruth meatrach.

Dè an lorg as urrainn logadh a-steach. span

Ann a bhith a’ lorg tha bun-bheachd rèis ann, is e seo analogue de aon log, chun consol. Tha:

  • Ainm, mar as trice ainm a 'mhodh a chaidh a chur gu bàs
  • Ainm na seirbheis anns an deach an rèis a chruthachadh
  • An ID sònraichte agad fhèin
  • Seòrsa de dh'fhiosrachadh meta ann an cruth iuchair / luach a chaidh a logadh a-steach ann. Mar eisimpleir, thàinig crìochan modh no an dòigh gu crìch le mearachd no nach robh
  • Amannan tòiseachaidh is crìochnachaidh airson an rèis seo
  • ID span pàrant

Thèid gach rèis a chuir chun neach-cruinneachaidh rèis airson a stòradh san stòr-dàta airson ath-sgrùdadh nas fhaide air adhart cho luath ‘s a bhios e deiseil. San àm ri teachd, faodaidh tu craobh de gach rèis a thogail le bhith a’ ceangal le ID phàrant. Nuair a nì thu mion-sgrùdadh, gheibh thu, mar eisimpleir, a h-uile rèis ann an cuid de sheirbheis a thug barrachd air beagan ùine. Nas fhaide, le bhith a 'dol gu rèis shònraichte, faic a' chraobh gu lèir os cionn agus fon rèis seo.

Lorg seirbheis, OpenTracing agus Jaeger

Opentrace, Jagger agus mar a chuir sinn an gnìomh e airson ar pròiseactan

Tha inbhe coitcheann ann slighe fosgailte, a tha a’ mìneachadh ciamar agus dè a bu chòir a chruinneachadh, gun a bhith ceangailte le bhith a’ lorg buileachadh sònraichte ann an cànan sam bith. Mar eisimpleir, ann an Java, thèid a h-uile obair le lorgan a dhèanamh tron ​​​​API Opentrace cumanta, agus fon sin, mar eisimpleir, Jaeger no gnìomh bunaiteach falamh nach dèan dad a bhith falaichte.
Tha sinn a 'cleachdadh Sealgair mar chur an gnìomh Opentrace. Tha e air a dhèanamh suas de ghrunn phàirtean:

Lorg seirbheis, OpenTracing agus Jaeger

  • Tha Jaeger-agent na àidseant ionadail a bhios mar as trice air a chuir a-steach air gach inneal agus tha seirbheisean air an logadh a-steach air a’ phort bunaiteach ionadail. Mura h-eil àidseant ann, mar as trice bidh lorgan de sheirbheisean air an inneal seo ciorramach
  • Jaeger-collector - bidh a h-uile riochdaire a ’cur lorgan cruinnichte thuige, agus bidh e gan cur anns an stòr-dàta taghte
  • Is e an stòr-dàta an cassandra as fheàrr leotha, ach bidh sinn a’ cleachdadh elasticsearch, tha buileachadh ann airson stòr-dàta no dhà eile agus buileachadh cuimhne nach sàbhail dad air diosc.
  • Is e seirbheis a th’ ann an Jaeger-query a thèid chun stòr-dàta agus a thilleas lorgan a chaidh a chruinneachadh mar-thà airson mion-sgrùdadh
  • Is e eadar-aghaidh lìn a th’ ann an Jaeger-ui airson lorg agus coimhead air lorgan, bidh e a’ dol gu jaeger-query

Lorg seirbheis, OpenTracing agus Jaeger

Faodar co-phàirt air leth ainmeachadh mar buileachadh opentrace jaeger airson cànanan sònraichte, tro bheil rèisean air an cur gu jaeger-agent.
A 'ceangal Jagger ann an Java a ’tighinn sìos gu bhith a’ cur an gnìomh an eadar-aghaidh io.opentracing.Tracer, às deidh sin bidh a h-uile lorg troimhe ag itealaich chun fhìor àidseant.

Lorg seirbheis, OpenTracing agus Jaeger

Cuideachd airson pàirt an earraich, faodaidh tu ceangal a dhèanamh opentracing-spring-cloud-tòiseachaidh agus buileachadh bho Jaeger opentracing-spring-jaeger-cloud-starter a rèiticheas gu fèin-ghluasadach lorg airson a h-uile càil a thèid tro na co-phàirtean sin, mar eisimpleir http iarrtasan gu luchd-riaghlaidh, iarrtasan chun stòr-dàta tro jdbc, msaa.

Lorgar logadh a-steach ann an Java

An àiteigin aig an ìre as àirde, feumar a’ chiad Span a chruthachadh, faodar seo a dhèanamh gu fèin-ghluasadach, mar eisimpleir, le rianadair an earraich nuair a gheibhear iarrtas, no le làimh mura h-eil gin ann. Tha e an uairsin air a ghluasad tron ​​​​Scope gu h-ìosal. Ma tha dòigh sam bith gu h-ìosal airson Span a chuir ris, bheir e an Span gnìomhach gnàthach bhon Farsaing, cruthaichidh e raon ùr agus bidh e ag ràdh gur e a phàrant an Span gnìomhach a thig às, agus bidh e a’ dèanamh an Span ùr gnìomhach. Nuair a bhios iad a’ gairm seirbheisean taobh a-muigh, thèid an rèis ghnìomhach a th’ ann an-dràsta a chuir thuca, agus bidh na seirbheisean sin a’ cruthachadh raointean ùra a thaobh an rèis seo.
Bidh a h-uile obair a’ dol tro eisimpleir Tracer, gheibh thu e tron ​​​​inneal DI, no GlobalTracer.get () mar chaochladair cruinne mura h-eil an uidheamachd DI ag obair. Gu gnàthach, mura deach tracer a thòiseachadh, tillidh NoopTracer nach dèan dad.
A bharrachd air an sin, gheibhear an raon gnàthach bhon rianadair tron ​​​​ScopeManager, tha raon ùr air a chruthachadh bhon fhear a th’ ann an-dràsta le ceangal den rèis ùr, agus an uairsin tha an Farsaingeachd cruthaichte dùinte, a dhùineas an raon cruthaichte agus a thilleas an raon a bh’ ann roimhe gu an staid gnìomhach. Tha farsaingeachd ceangailte ri snàithlean, agus mar sin nuair a bhios prògramadh ioma-snàthainn agad, cha bu chòir dhut dìochuimhneachadh an raon gnìomhach a ghluasad gu snàithlean eile, airson tuilleadh gnìomhachd a dhèanamh air Farsaingeachd snàithlean eile a thaobh an rèis 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)) {
                ...
            }
        });
    }
}

Airson prògramadh ioma-snàthainn, tha TracedExecutorService ann cuideachd agus pasganan coltach ris a chuireas air adhart an rèis gnàthach chun t-snàthainn gu fèin-ghluasadach nuair a thèid gnìomhan asyncronach a chuir air bhog:

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

Airson iarrtasan http taobh a-muigh tha TracingHttpClient

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

Trioblaidean a bha romhainn

  • Cha bhith beans agus DI an-còmhnaidh ag obair mura tèid an lorgaire a chleachdadh ann an seirbheis no pàirt, mar sin Autowired Is dòcha nach obraich Tracer agus feumaidh tu GlobalTracer.get().
  • Chan obraich notaichean mura h-eil e na phàirt no seirbheis, no ma tha an dòigh air a ghairm bho dhòigh nàbaidh den aon chlas. Feumaidh tu a bhith faiceallach sùil a thoirt air na tha ag obair agus cruthachadh lorg làimhe a chleachdadh mura h-obraich @Traced. Faodaidh tu cuideachd inneal-cruinneachaidh a bharrachd a cheangal airson notaichean java, an uairsin bu chòir dhaibh obrachadh anns a h-uile àite.
  • Anns an t-seann bròg earraich is earraich, chan eil fèin-dhealbhadh sgòthan an earraich fosgailte ag obair mar thoradh air biastagan ann an DI, an uairsin ma tha thu airson gum bi na lorgan ann an co-phàirtean an earraich ag obair gu fèin-ghluasadach, faodaidh tu a dhèanamh le samhlachas le 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
  • Feuch le goireasan chan eil e ag obair ann an groovy, feumaidh tu feuchainn mu dheireadh a chleachdadh.
  • Feumaidh ainm spring.application.name fhèin a bhith aig gach seirbheis fon tèid lorgan a chlàradh. Dè a nì ainm air leth airson an reic agus an deuchainn, gus nach cuir iad bacadh orra còmhla.
  • Ma chleachdas tu GlobalTracer agus tomcat, tha aon GlobalTracer aig a h-uile seirbheis a tha a’ ruith san tomcat seo, agus mar sin bidh an aon ainm seirbheis aca uile.
  • Nuair a chuireas tu comharran ri dòigh, feumaidh tu a bhith cinnteach nach eil e air a ghairm iomadh uair ann an lùb. Feumar aon lorg cumanta a chuir ris airson a h-uile gairm, a tha a ’gealltainn an ùine obrach iomlan. Rud eile, thèid cus luchd a chruthachadh.
  • Aon uair ann an jaeger-ui, chaidh iarrtasan ro mhòr a dhèanamh airson àireamh mhòr de lorgan, agus leis nach robh iad a ’feitheamh ri freagairt, rinn iad a-rithist e. Mar thoradh air an sin, thòisich ceist jaeger ag ithe mòran cuimhne agus a 'slaodadh sìos elastic. Air a chuideachadh le bhith ag ath-thòiseachadh jaeger-query

Samhlachadh, stòradh agus coimhead air comharran

Tha trì seòrsaichean ann comharran samplachaidh:

  1. Const a chuireas agus a shàbhaileas a h-uile lorg.
  2. Probabilistic a bhios a’ sìoladh lorgan le coltachd air choireigin.
  3. Ratelimiting a tha a 'cuingealachadh an àireamh de lorgan gach diog. Faodaidh tu na roghainnean sin a rèiteachadh air an neach-dèiligidh, an dàrna cuid air an jaeger-agent no air an neach-cruinneachaidh. A-nis bidh sinn a’ cleachdadh const 1 anns a’ chruach luachair, leis nach eil mòran iarrtasan ann, ach bheir iad ùine mhòr. Anns an àm ri teachd, ma bheir seo cus luchd air an t-siostam, faodaidh tu a chuingealachadh.

Ma chleachdas tu cassandra, mar as trice cha bhith e a’ stòradh ach lorgan airson dà latha. Tha sinn a 'cleachdadh lorg elastaig agus tha lorgan air an stòradh fad na h-ùine agus chan eil iad air an toirt às. Tha clàr-amais air leth air a chruthachadh airson gach latha, mar eisimpleir jaeger-service-2019-03-04. Anns an àm ri teachd, feumaidh tu glanadh fèin-ghluasadach de sheann lorgan a rèiteachadh.

Gus na comharran fhaicinn feumaidh tu:

  • Tagh an t-seirbheis leis a bheil thu airson lorgan a shìoladh, mar eisimpleir, tomcat7-default airson seirbheis a tha a’ ruith san tomcat agus aig nach eil ainm fhèin.
  • An uairsin tagh an obrachadh, an ùine agus an ùine obrachaidh as ìsle, mar eisimpleir bho 10 diogan, gus dìreach cuir gu bàs fada a ghabhail.
    Lorg seirbheis, OpenTracing agus Jaeger
  • Rach gu aon de na lorgan agus faic dè bha a 'slaodadh sìos an sin.
    Lorg seirbheis, OpenTracing agus Jaeger

Cuideachd, ma tha fios air cuid de dh’ id iarrtais, gheibh thu lorg air an id seo tro sgrùdadh taga, ma tha an id seo air a logadh a-steach don raon lorg.

Sgrìobhainnean

Articles

Видео

Source: www.habr.com

Cuir beachd ann