Fil-proġetti tagħna nużaw l-arkitettura tal-mikroservizz. Meta jseħħu konġestjonijiet fil-prestazzjoni, jintefaq ħafna ħin fuq il-monitoraġġ u l-parsing taz-zkuk. Meta tilloggja l-ħinijiet ta 'operazzjonijiet individwali f'fajl ta' log, ġeneralment huwa diffiċli li wieħed jifhem x'wassal għas-sejħa ta 'dawn l-operazzjonijiet, biex issegwi s-sekwenza ta' azzjonijiet jew il-bidla fil-ħin ta 'operazzjoni waħda relattiva għal oħra f'servizzi differenti.
Biex innaqqsu x-xogħol manwali, iddeċidejna li nużaw waħda mill-għodod tat-traċċar. Kif u għal xiex tista 'tuża t-traċċar u kif għamilna se jiġu diskussi f'dan l-artikolu.
Liema problemi jistgħu jiġu solvuti bl-użu tat-traċċar?
Sib ostakoli fil-prestazzjoni kemm f'servizz wieħed kif ukoll fis-siġra kollha tal-eżekuzzjoni bejn is-servizzi parteċipanti kollha. Pereżempju:
Ħafna sejħiet sekwenzjali qosra bejn is-servizzi, pereżempju, għal geocoding jew għal database.
Tistenna twila I/O, bħat-trasferiment tad-dejta fuq netwerk jew il-qari minn disk.
Parsing twil tad-data.
Operazzjonijiet twal li jeħtieġu CPU.
Sezzjonijiet tal-kodiċi li mhumiex meħtieġa biex jinkiseb ir-riżultat finali u jistgħu jitneħħew jew jitmexxew differiti.
Jifhem b'mod ċar f'liema ordni dak li jissejjaħ u x'jiġri meta ssir l-operazzjoni.
Wieħed jista’ jara li, pereżempju, it-Talba waslet lis-servizz WS -> is-servizz WS issupplimenta d-dejta permezz tas-servizz R -> imbagħad bagħat it-talba lis-servizz V -> is-servizz V niżżel ħafna dejta mis-servizz. R servizz -> marru għas-servizz P -> is-servizz P reġa mar għas-servizz R -> is-servizz V injora r-riżultat u mar għand is-servizz J -> u mbagħad biss irritorna t-tweġiba lis-servizz WS, filwaqt li kompla jikkalkula xi ħaġa oħra f' l-isfond.
Mingħajr tali traċċa jew dokumentazzjoni dettaljata għall-proċess kollu, huwa diffiċli ħafna li wieħed jifhem x'inhu jiġri wara li tħares lejn il-kodiċi għall-ewwel darba, u l-kodiċi huwa mifrux fuq servizzi differenti u moħbi wara mazz ta 'fażola u interfaces.
Ġbir ta 'informazzjoni dwar is-siġra ta' eżekuzzjoni għal analiżi differita sussegwenti. F'kull stadju ta 'eżekuzzjoni, tista' żżid l-informazzjoni li hija disponibbli f'dan l-istadju mat-traċċa u mbagħad tara liema data ta 'input wasslet għal xenarju bħal dan. Pereżempju:
ID tal-Utent
Drittijiet
Tip ta' metodu magħżul
Żball ta' log jew ta' eżekuzzjoni
Tibdil ta 'traċċi f'sottosett ta' metriċi u analiżi ulterjuri fil-forma ta 'metriċi.
X'intraċċar jista' jilloggja. Span
Fit-traċċar hemm il-kunċett ta 'span, dan huwa analogu ta' log wieħed għall-console. Span għandu:
Isem, normalment l-isem tal-metodu li ġie esegwit
Isem tas-servizz fejn ġie ġġenerat il-medda
ID unika proprja
Xi meta informazzjoni fil-forma ta 'ċavetta/valur li kienet inkluża fiha. Per eżempju, parametri tal-metodu jew jekk il-metodu spiċċax bi żball jew le
Il-ħinijiet tal-bidu u tat-tmiem ta 'din l-eżekuzzjoni tal-medda
ID tal-firxa tal-ġenitur
Kull medda tintbagħat lill-kollettur tal-firxa biex tiġi ffrankata fid-database għall-wiri aktar tard hekk kif tkun lesta l-eżekuzzjoni tagħha. Fil-futur, tista 'tibni siġra tal-firxiet kollha billi tgħaqqadhom bl-id tal-ġenitur. Meta tanalizza, tista 'ssib, pereżempju, il-firxiet kollha f'xi servizz li ħa aktar minn xi żmien. Imbagħad, tmur għal medda speċifika, ara s-siġra kollha 'l fuq u taħt din il-medda.
Opentrace, Jagger u kif implimentajnah għall-proġetti tagħna
Hemm standard komuni Opentrace, li jiddeskrivi kif u x'għandu jinġabar, mingħajr ma jkun marbut bi traċċa ma' implimentazzjoni speċifika fi kwalunkwe lingwa. Pereżempju, f'Java, ix-xogħol kollu bit-traċċi jitwettaq permezz tal-API Opentrace komuni, u taħtu jista 'jinħeba, pereżempju, Jaeger jew implimentazzjoni default vojta li ma tagħmel xejn.
Aħna nużaw Jaeger bħala implimentazzjoni ta' Opentrace. Tikkonsisti f'diversi komponenti:
Jaeger-agent huwa aġent lokali li normalment ikun installat fuq kull magna u s-servizzi huma illoggjati fiha fuq il-port default lokali. Jekk ma jkun hemm l-ebda aġent, allura t-traċċi tas-servizzi kollha fuq din il-magna huma ġeneralment mitfija
Jaeger-kollettur - l-aġenti kollha jibagħtu traċċi miġbura lilha, u tpoġġihom fid-database magħżula
Database - waħda preferuta tagħhom hija cassandra, iżda nużaw elasticsearch, hemm implimentazzjonijiet għal koppja ta 'databases oħra u implimentazzjoni fil-memorja li ma tiffranka xejn fuq disk
Jaeger-query huwa servizz li jidħol fid-database u jipprovdi traċċi diġà miġbura għall-analiżi
Jaeger-ui hija interface tal-web għat-tiftix u l-wiri tat-traċċi, taħdem f'jaeger-query
Komponent separat jista 'jissejjaħ implimentazzjoni ta' opentrace jaeger għal lingwi speċifiċi, li permezz tiegħu jintbagħtu spans lil jaeger-agent. Konnessjoni ta' Jagger f'Java jaqa 'għall-implimentazzjoni tal-interface io.opentracing.Tracer, wara li t-traċċi kollha minnu se jtiru lejn l-aġent reali.
Tista 'wkoll tikkonnettja komponenti tar-rebbiegħa opentracing-rebbiegħa-sħaba-starter u l-implimentazzjoni minn Jaeger opentracing-rebbiegħa-jaeger-sħaba-starter li awtomatikament tikkonfigura t-traċċar għal dak kollu li jgħaddi minn dawn il-komponenti, pereżempju talbiet http lill-kontrolluri, talbiet għad-database permezz ta’ jdbc, eċċ.
Logging traċċi f'Java
X'imkien fl-ogħla livell irid jinħoloq l-ewwel Span, dan jista 'jsir awtomatikament, pereżempju mill-kontrollur tar-rebbiegħa meta jirċievi talba, jew manwalment jekk ma jkunx hemm. Imbagħad tiġi trażmessa permezz ta' Skop hawn taħt. Jekk xi metodu hawn taħt irid iżżid Span, jieħu l-activeSpan attwali minn Scope, joħloq Span ġdid u jgħid li l-ġenitur tiegħu rċieva activeSpan, u jagħmel il-Span il-ġdid attiv. Meta s-servizzi esterni jissejħu, il-medda attiva attwali tiġi mgħoddija lilhom, u dawk is-servizzi joħolqu medda ġdida marbuta ma' din il-medda.
Ix-xogħol kollu jgħaddi mill-istanza Tracer; tista 'tikseb permezz tal-mekkaniżmu DI, jew GlobalTracer.get() bħala varjabbli globali jekk il-mekkaniżmu DI ma jaħdimx. B'mod awtomatiku, jekk it-tracer ma ġiex inizjalizzat, NoopTracer se jiġi rritornat li ma jagħmel xejn.
Sussegwentement, l-ambitu attwali jinkiseb mit-tracer permezz ta 'ScopeManager, jinħoloq ambitu ġdid minn dak attwali b'firxa ġdida mehmuża, u mbagħad jingħalaq l-ambitu maħluq, li jagħlaq il-medda maħluqa u jirritorna l-ambitu preċedenti għall-istat attiv. . L-ambitu huwa marbut ma 'ħajt, għalhekk meta l-ipprogrammar b'ħafna kamini, trid tiftakar li tittrasferixxi l-medda attiva għal ħajt ieħor, għal aktar attivazzjoni tal-ambitu ta' ħajt ieħor marbut ma 'din il-medda.
Għall-ipprogrammar b'ħafna kamini, hemm ukoll TracedExecutorService u tgeżwir simili li awtomatikament jgħaddu l-medda attwali lill-ħajta meta jmexxu ħidmiet asinkroniċi:
private ExecutorService executor = new TracedExecutorService(
Executors.newFixedThreadPool(10), GlobalTracer.get()
);
HttpClient httpClient = new TracingHttpClientBuilder().build();
Problemi li ffaċċjajna
Il-fażola u d-DI mhux dejjem jaħdmu jekk it-tracer ma jintużax f'servizz jew komponent, allura Autowired Tracer jista' ma jaħdimx u jkollok tuża GlobalTracer.get().
L-annotazzjonijiet ma jaħdmux jekk ma jkunx komponent jew servizz, jew jekk is-sejħa tal-metodu tiġi minn metodu ġar tal-istess klassi. Trid toqgħod attent, iċċekkja x'jaħdem, u tuża l-ħolqien manwali tat-traċċa jekk @Traced ma taħdimx. Tista 'wkoll tehmeż kompilatur addizzjonali għall-annotazzjonijiet java, allura għandu jaħdem kullimkien.
Ipprova bir-riżorsi ma taħdimx fil-groovy; trid tuża fl-aħħarnett ipprova.
Kull servizz għandu jkollu spring.application.name tiegħu li taħtu se jiġu illoggjati traċċi. Kif dwar isem separat għall-bejgħ u l-ittestjar, sabiex ma jitħalltux flimkien.
Jekk tuża GlobalTracer u tomcat, allura s-servizzi kollha li jaħdmu f'dan it-tomcat għandhom GlobalTracer wieħed, għalhekk kollha se jkollhom l-istess isem tas-servizz.
Meta żżid traċċi għal metodu, trid tkun ċert li ma tissejjaħx f'linja ħafna drabi. Ikollok bżonn iżżid traċċa waħda komuni għas-sejħiet kollha, li tirreġistra l-ħin operattiv totali. Inkella, tinħoloq tagħbija żejda.
Ladarba f'jaeger-ui għamlu talbiet kbar wisq għal numru kbir ta' traċċi u, peress li ma stennewx tweġiba, reġgħu għamluha. Bħala riżultat, jaeger-query beda jiekol ħafna memorja u jrattab elastika. Mgħejun billi jerġa' jibda jaeger-query
Probabilistic li jiffiltra traċċi b'ċerta probabbiltà.
Ratemiting li jillimita n-numru ta 'traċċi kull sekonda. Tista 'tikkonfigura dawn is-settings fuq il-klijent, jew fuq jaeger-agent jew fuq il-kollettur. Issa nużaw const 1 fil-munzell tal-valuator peress li m'hemmx ħafna talbiet, iżda jieħdu żmien twil. Fil-futur, jekk dan ipoġġi tagħbija bla bżonn fuq is-sistema, tista 'tillimitaha.
Jekk tuża cassandra, awtomatikament taħżen traċċi għal jumejn biss. Aħna nużaw elasticsearch u traċċi huma maħżuna għall-ħin kollu u ma jitħassrux. Jinħoloq indiċi separat għal kull jum, pereżempju jaeger-service-2019-03-04. Fil-futur, għandek bżonn tikkonfigura tindif awtomatiku ta 'traċċi qodma.
Biex tara t-traċċi għandek bżonn:
Agħżel is-servizz li bih trid tiffiltra traċċi, pereżempju tomcat7-default għal servizz li qed jaħdem f'Tomcat u li ma jistax ikollu ismu stess.
Sussegwentement, agħżel l-operazzjoni, il-perjodu ta 'żmien u l-ħin minimu ta' tħaddim, pereżempju minn 10 sekondi, biex tieħu biss eżekuzzjonijiet twal.
Mur fuq waħda mit-traċċi u ara x'kien qed jonqos hemm.
Ukoll, jekk xi talba id hija magħrufa, allura inti tista 'ssib traċċa minn din id permezz ta' tfittxija tag, jekk din id-id hija illoggjata fil-medda tat-traċċa.