Nou itilize achitekti mikwosèvis nan pwojè nou yo. Lè obstak pèfòmans rive, anpil tan pase siveyans ak analize mòso bwa. Lè w anrejistre tan operasyon endividyèl yo nan yon dosye boutèy demi lit, anjeneral li difisil pou w konprann sa ki te mennen nan envoke operasyon sa yo, pou swiv sekans aksyon oswa chanjman tan yon operasyon parapò ak yon lòt nan sèvis diferan.
Pou minimize travay manyèl, nou deside sèvi ak youn nan zouti trase yo. Konsènan ki jan ak poukisa ou ka itilize trase ak ki jan nou te fè li, epi yo pral diskite nan atik sa a.
Ki pwoblèm yo ka rezoud ak trase
Jwenn blokaj pèfòmans tou de nan yon sèl sèvis ak nan tout pyebwa ekzekisyon ant tout sèvis k ap patisipe yo. Pa egzanp:
Anpil kout apèl youn apre lòt ant sèvis, pou egzanp, nan jeokodaj oswa nan yon baz done.
Tan I/O tann, tankou transfè rezo oswa lekti disk.
Long analiz done.
Operasyon long ki mande CPU.
Seksyon kòd ki pa nesesè pou jwenn rezilta final la epi yo ka retire oswa retade.
Klèman konprann nan ki sekans sa yo rele ak sa k ap pase lè operasyon an fèt.
Li ka wè ke, pou egzanp, demann lan te vini nan sèvis la WS -> sèvis la WS te ajoute done atravè sèvis la R -> Lè sa a, voye yon demann nan sèvis la V -> sèvis la V chaje yon anpil nan done ki soti nan R la. sèvis -> ale nan sèvis la P -> sèvis la P ale ankò nan sèvis R -> sèvis V inyore rezilta a epi li ale nan sèvis J -> epi sèlman Lè sa a, li retounen repons lan nan sèvis WS, pandan y ap kontinye kalkile yon lòt bagay nan la. background.
San yo pa tankou yon tras oswa dokiman detaye pou tout pwosesis la, li trè difisil pou konprann sa k ap pase lè ou gade nan kòd la pou premye fwa, ak kòd la gaye nan diferan sèvis ak kache dèyè yon pakèt moun sou posode ak interfaces.
Koleksyon enfòmasyon sou pye bwa ekzekisyon an pou analiz ki vin apre yo. Nan chak etap nan ekzekisyon, ou ka ajoute enfòmasyon sou tras la ki disponib nan etap sa a ak Lè sa a, konnen ki done opinyon ki mennen nan yon senaryo menm jan an. Pa egzanp:
ID itilizatè
Dwa yo
Kalite metòd chwazi
Log oswa erè ekzekisyon
Vire tras nan yon sou-ansanm nan metrik ak plis analiz deja nan fòm lan nan metrik.
Ki tras ka journal. Espansyon
Nan trase gen konsèp nan yon span, sa a se yon analogue nan yon sèl boutèy demi lit, nan konsole a. Spa a gen:
Non, anjeneral non metòd ki te egzekite a
Non sèvis kote yo te pwodwi span an
Pwòp idantite inik
Gen kèk kalite enfòmasyon meta nan fòm lan nan yon kle/valè ki te konekte nan li. Pou egzanp, paramèt metòd oswa metòd la te fini ak yon erè oswa ou pa
Kòmanse ak fen fwa pou span sa a
ID span paran
Chak span yo voye bay pèseptè a span yo dwe estoke nan baz done a pou revize pita le pli vit ke li te fini ekzekisyon li. Nan tan kap vini an, ou ka bati yon pye bwa nan tout span pa konekte pa id paran. Lè w ap analize, ou ka jwenn, pou egzanp, tout span yo nan kèk sèvis ki te pran plis pase kèk tan. Anplis de sa, lè w ale nan yon span espesifik, wè tout pyebwa ki anwo ak anba span sa a.
Opentrace, Jagger ak fason nou aplike li pou pwojè nou yo
Gen yon estanda komen opentrace, ki dekri kijan ak sa yo ta dwe kolekte, san yo pa mare pa trase nan yon aplikasyon espesifik nan nenpòt lang. Pou egzanp, nan Java, tout travay ki gen tras fèt atravè API Opentrace komen, ak anba li, pou egzanp, Jaeger oswa yon aplikasyon vid default ki pa fè anyen ka kache.
Nou ap itilize Jaeger kòm yon aplikasyon Opentrace. Li konsiste de plizyè eleman:
Jaeger-agent se yon ajan lokal ki anjeneral enstale sou chak machin ak sèvis yo konekte nan li sou pò default lokal la. Si pa gen okenn ajan, lè sa a tras tout sèvis sou machin sa a anjeneral enfim
Jaeger-pèseptè - tout ajan voye tras kolekte nan li, epi li mete yo nan baz done a chwazi
Baz done a se Cassandra pi pito yo, men nou itilize elasticsearch, gen aplikasyon pou yon koup nan lòt baz done ak yon aplikasyon nan memwa ki pa sove anyen sou disk.
Jaeger-query se yon sèvis ki ale nan baz done a epi retounen tras ki deja kolekte pou analiz
Jaeger-ui se yon koòdone entènèt pou chèche ak gade tras, li ale nan jaeger-query
Yon eleman separe ka rele aplikasyon an nan opentrace jaeger pou lang espesifik, atravè ki span yo voye bay jaeger-agent. Konekte Jagger nan Java vini desann nan mete ann aplikasyon io.opentracing.Tracer koòdone, apre yo fin ki tout tras nan li pral vole nan ajan reyèl la.
Epitou pou eleman prentan an, ou ka konekte opentracing-printemps-nwaj-starter ak aplikasyon nan men Jaeger opentracing-spring-jaeger-cloud-starter ki pral otomatikman konfigirasyon trase pou tout bagay ki pase nan eleman sa yo, pou egzanp demann http bay kontwolè, demann nan baz done a atravè jdbc, elatriye.
Tras antre nan Java
Yon kote nan nivo siperyè a, yo dwe kreye premye Span, sa a ka fè otomatikman, pou egzanp, pa kontwolè prentan an lè yo resevwa yon demann, oswa manyèlman si pa gen okenn. Lè sa a, li transmèt nan Dimansyon ki anba a. Si nenpòt nan metòd ki anba yo vle ajoute yon Span, li pran ActiveSpan aktyèl la soti nan Scope a, kreye yon nouvo Span epi li di paran li se ActiveSpan ki lakòz, epi fè nouvo Span aktif. Lè w ap rele sèvis ekstèn yo, yo pase span aktif aktyèl la, epi sèvis sa yo kreye nouvo span ak referans a span sa a.
Tout travay ale nan egzanp Tracer la, ou ka jwenn li atravè mekanis DI a, oswa GlobalTracer.get () kòm yon varyab mondyal si mekanis DI a pa travay. Pa default, si traser pa te inisyalize, NoopTracer ap retounen ki pa fè anyen.
Anplis de sa, se sijè ki abòde aktyèl la jwenn nan trasè a atravè ScopeManager la, yo kreye yon nouvo sijè ki abòde nan yon sèl aktyèl la ak yon obligatwa nan nouvo span a, ak Lè sa a, Dimansyon ki te kreye a fèmen, ki fèmen span ki te kreye a epi retounen Dimansyon anvan an nan. eta aktif la. Dimansyon mare nan yon fil, kidonk lè pwogramasyon milti-threaded, ou pa dwe bliye transfere span aktif nan yon lòt fil, pou plis aktivasyon nan Dimansyon nan yon lòt fil ak referans a span sa a.
Pou pwogram milti-threaded, gen tou TracedExecutorService ak anbalaj menm jan an ki otomatikman voye span aktyèl la nan fil la lè travay asynchrone yo te lanse:
private ExecutorService executor = new TracedExecutorService(
Executors.newFixedThreadPool(10), GlobalTracer.get()
);
HttpClient httpClient = new TracingHttpClientBuilder().build();
Pwoblèm nou te rankontre
Pwa ak DI pa toujou travay si traser la pa itilize nan yon sèvis oswa yon eleman, lè sa a Autowired Tracer ka pa travay epi w ap oblije itilize GlobalTracer.get().
Anotasyon yo pa travay si se pa yon eleman oswa sèvis, oswa si yo rele metòd la nan yon metòd vwazen nan menm klas la. Ou dwe fè atansyon pou tcheke sa ki travay epi sèvi ak kreyasyon trase manyèl si @Traced pa travay. Ou kapab tou tache yon lòt du pou java annotations, lè sa a yo ta dwe travay tout kote.
Eseye ak resous pa travay nan groovy, ou dwe itilize eseye finalman.
Chak sèvis dwe genyen pwòp spring.application.name anba ki tras yo pral konekte. Ki sa ki fè yon non separe pou vann a ak tès la, se konsa yo pa entèfere ak yo ansanm.
Si w itilize GlobalTracer ak tomcat, lè sa a tout sèvis k ap kouri nan tomcat sa a gen yon sèl GlobalTracer, kidonk yo tout pral gen menm non sèvis la.
Lè w ajoute tras nan yon metòd, ou bezwen asire w ke li pa rele anpil fwa nan yon bouk. Li nesesè ajoute yon sèl tras komen pou tout apèl, ki garanti tan travay total la. Sinon, yo pral kreye yon chaj depase.
Yon fwa nan jaeger-ui, yo te fè demann twò gwo pou yon gwo kantite tras, epi kòm yo pa t 'tann pou yon repons, yo te fè li ankò. Kòm yon rezilta, jaeger-query te kòmanse manje anpil memwa ak ralanti elastik. Ede pa rekòmanse jaeger-query
Pwobabilite ki filtre tras ak kèk pwobabilite bay yo.
Ratelimiting ki limite kantite tras pa segonn. Ou ka configured paramèt sa yo sou kliyan an, swa sou ajan jaeger la oswa sou pèseptè a. Koulye a, nou itilize const 1 nan pile evalyasyon an, paske pa gen anpil demann, men yo pran yon bon bout tan. Nan lavni an, si sa a pral egzèse yon chaj twòp sou sistèm nan, ou ka limite li.
Si ou itilize Cassandra, pa default li sèlman magazen tras pou de jou. Nou ap itilize rechèch elastik yo ak tras yo estoke pou tout tan epi yo pa efase. Yo kreye yon endèks separe pou chak jou, pa egzanp jaeger-service-2019-03-04. Nan lavni an, ou bezwen configured netwayaj otomatik nan tras fin vye granmoun.
Pou w ka wè tras yo ou bezwen:
Chwazi sèvis ou vle filtre tras, pou egzanp, tomcat7-default pou yon sèvis ki ap kouri nan tomcat a epi ki pa ka gen pwòp non li.
Lè sa a, chwazi operasyon an, entèval tan an ak tan operasyon minimòm lan, pou egzanp soti nan 10 segonn, pran sèlman ekzekisyon long.
Ale nan youn nan tras yo epi wè sa ki te ralanti desann la.
Epitou, si yo konnen kèk id demann, Lè sa a, ou ka jwenn yon tras pa id sa a atravè yon rechèch tag, si id sa a konekte nan span tras la.