
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
- 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.
- Tuig gu soilleir dè an t-sreath a chanar ris agus dè thachras nuair a thèid an obair a dhèanamh.

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. - 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
- 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.

Opentrace, Jagger agus mar a chuir sinn an gnÏomh e airson ar pròiseactan
Tha inbhe coitcheann ann , 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 mar chur an gnÏomh Opentrace. Tha e air a dhèanamh suas de ghrunn phà irtean:

- 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

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 â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.

Cuideachd airson pà irt an earraich, faodaidh tu ceangal a dhèanamh agus buileachadh bho Jaeger 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
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 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
- 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 :
- Const a chuireas agus a shĂ bhaileas a h-uile lorg.
- Probabilistic a bhios aâ sĂŹoladh lorgan le coltachd air choireigin.
- 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 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.

- Rach gu aon de na lorgan agus faic dè bha a 'slaodadh sÏos an sin.

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
- sgrĂŹobhainnean lorg fosgailte
- sgrĂŹobhainnean jaeger
- Jaeger ceangal java
- ceangal lorg fosgailte as t-earrach
Articles
- Jaeger Opentracing agus Microservices ann am fÏor phròiseact PHP agus Golang
- Ag atharrachadh lorg air a chuairteachadh aig Uber Engineering
- Aâ ruith Jaeger Agent air meatailt lom
ĐидоО
- Mar a chleachd sinn Jaeger agus Prometheus gus Ceistean Luchd-cleachdaidh Lightning-Fast a lĂŹbhrigeadh - Bryan Boreham
- Intro: Jaeger - Yuri Shkuro, Uber & Pavol Loffay, Red Hat
- Serghei Iakovlev, "Sgeulachd bheag mu bhuaidh mhòr: OpenTracing, AWS agus Jaeger"
Source: www.habr.com



