اسان اسان جي منصوبن ۾ microservice فن تعمير استعمال ڪندا آهيون. جڏهن ڪارڪردگي جي رڪاوٽون ٿينديون آهن، گهڻو وقت خرچ ڪيو ويندو آهي نگراني ۽ لاگز کي پارس ڪرڻ. جڏهن انفرادي عملن جي وقتن کي لاگ فائل ۾ لاگ ان ڪيو وڃي، اهو عام طور تي اهو سمجهڻ ڏکيو آهي ته انهن عملن جي دعوت جو سبب ڇا ٿيو، عملن جي تسلسل کي ٽريڪ ڪرڻ يا مختلف خدمتن ۾ هڪ آپريشن جي وقت جي شفٽ کي ٻئي جي ڀيٽ ۾.
دستي مزدوري کي گھٽائڻ لاءِ، اسان ھڪ استعمال ڪرڻ جو فيصلو ڪيو ٽريسنگ ٽولز. انهي بابت ڪيئن ۽ ڇو توهان ٽريڪنگ استعمال ڪري سگهو ٿا ۽ اسان اهو ڪيئن ڪيو، ۽ هن مضمون ۾ بحث ڪيو ويندو.
ڪھڙا مسئلا ٽريسنگ سان حل ٿي سگھن ٿا
ھڪڙي ھڪڙي خدمت جي اندر ۽ سڀني شرڪت ڪندڙ خدمتن جي وچ ۾ پوري عمل جي وڻ ۾ ڪارڪردگي جي رڪاوٽون ڳوليو. مثال طور:
خدمتن جي وچ ۾ ڪيترائي مختصر لڳاتار ڪال، مثال طور، جيوڪوڊنگ يا ڊيٽابيس ڏانهن.
ڊگھو I/O انتظار، جهڙوڪ نيٽ ورڪ ٽرانسفر يا ڊسڪ ريڊس.
ڊگھي ڊيٽا پارسنگ.
ڊگھي آپريشنن کي سي پي يو جي ضرورت آھي.
ڪوڊ جا حصا جيڪي حتمي نتيجا حاصل ڪرڻ جي ضرورت نه آھن ۽ ختم ڪري سگھجي ٿو يا دير ٿي سگھي ٿو.
واضح طور تي سمجھو ته ڪھڙي ترتيب ۾ ڇا چئبو آھي ۽ ڇا ٿيندو آھي جڏھن آپريشن ڪيو ويندو آھي.
اهو ڏسي سگھجي ٿو ته، مثال طور، درخواست WS سروس ڏانهن آئي -> WS سروس R سروس ذريعي ڊيٽا شامل ڪئي -> پوء V سروس کي درخواست موڪلي -> V سروس R کان تمام گهڻو ڊيٽا لوڊ ڪيو. خدمت -> پي سروس ڏانهن ويو -> پي سروس ٻيهر خدمت ڏانهن ويو R -> خدمت V نتيجو کي نظرانداز ڪيو ۽ خدمت J -> ڏانهن ويو ۽ صرف ان کان پوءِ سروس WS ڏانهن جواب واپس آيو، جڏهن ته ٻئي ۾ ڪجهه حساب ڪرڻ جاري رکندي. پس منظر.
ان سڄي عمل لاءِ ڪنهن سراغ يا تفصيلي دستاويز جي بغير، اهو سمجهڻ ڏاڍو ڏکيو آهي ته ڇا ٿي رهيو آهي جڏهن ڪوڊ کي پهريون ڀيرو ڏسي رهيا آهيو، ۽ ڪوڊ مختلف خدمتن ۾ پکڙيل آهي ۽ بِن ۽ انٽرفيس جي هڪ گروپ جي پويان لڪيل آهي.
بعد ۾ ملتوي ڪيل تجزيي لاءِ عمل جي وڻ بابت معلومات جو مجموعو. عمل جي هر مرحلي تي، توهان معلومات شامل ڪري سگهو ٿا ٽريس ۾ جيڪا هن اسٽيج تي موجود آهي ۽ پوءِ پتو لڳايو ته ڪهڙي انپٽ ڊيٽا هڪجهڙي منظرنامي جو سبب بڻيو. مثال طور:
استعمال ڪندڙ جي سڃاڻپ
حق
چونڊيل طريقي جو قسم
لاگ ان يا عمل جي غلطي
نشانن کي ميٽرڪ جي سب سيٽ ۾ تبديل ڪرڻ ۽ اڳ ۾ ئي ميٽرڪس جي صورت ۾ وڌيڪ تجزيو.
ڪهڙو نشان لاگ ان ڪري سگهي ٿو. اسپان
ٽريڪنگ ۾ هڪ اسپان جو تصور آهي، هي هڪ لاگ جو هڪ اينالاگ آهي، ڪنسول ڏانهن. سپا آهي:
نالو، عام طور تي طريقي جو نالو جيڪو عمل ڪيو ويو
خدمت جو نالو جنهن ۾ اسپن ٺاهي وئي هئي
پنهنجي منفرد ID
ڪجهه قسم جي ميٽا معلومات هڪ اهم/قدر جي صورت ۾ جيڪا ان ۾ لاگ ان ڪئي وئي آهي. مثال طور، طريقو پيٽرولر يا طريقو غلطي سان ختم ٿيو يا نه
هن عرصي لاءِ شروع ۽ آخر وقت
والدين جي مدت جي سڃاڻپ
هر اسپان کي اسپن ڪليڪٽر ڏانهن موڪليو ويندو آهي جيئن ئي ان جي عمل کي مڪمل ڪيو وڃي، بعد ۾ جائزو وٺڻ لاءِ ڊيٽابيس ۾ محفوظ ڪيو وڃي. مستقبل ۾، توهان والدين جي سڃاڻپ سان ڳنڍڻ ذريعي سڀني اسپن جو هڪ وڻ ٺاهي سگهو ٿا. جڏهن تجزيو ڪيو، توهان ڳولي سگهو ٿا، مثال طور، ڪجهه خدمت ۾ سڀ اسپانس جيڪي ڪجهه وقت کان وڌيڪ ورتو. وڌيڪ، هڪ مخصوص اسپن ڏانهن وڃڻ سان، ڏسو سڄو وڻ مٿي ۽ هيٺان.
Opentrace، Jagger ۽ ڪيئن اسان ان کي اسان جي منصوبن لاء لاڳو ڪيو
اتي هڪ عام معيار آهي کليل رستو، جيڪو بيان ڪري ٿو ته ڪيئن ۽ ڇا گڏ ڪيو وڃي، بغير ڪنهن ٻوليءَ ۾ ڪنهن مخصوص عمل جي نشاندهي ڪرڻ سان. مثال طور، جاوا ۾، نشانن سان گڏ سڀئي ڪم عام Opentrace API ذريعي ڪيا ويندا آهن، ۽ ان جي تحت، مثال طور، Jaeger يا هڪ خالي ڊفالٽ عمل جيڪو ڪجھ به نه لڪائي سگھي ٿو.
اسان استعمال ڪري رهيا آهيون جهانگر Opentrace جي عمل جي طور تي. اهو ڪيترن ئي حصن تي مشتمل آهي:
Jaeger-agent هڪ مقامي ايجنٽ آهي جيڪو عام طور تي هر مشين تي نصب ڪيو ويندو آهي ۽ خدمتون ان ۾ لاگ ان ٿينديون آهن مقامي ڊفالٽ پورٽ تي. جيڪڏهن ڪو ايجنٽ نه آهي، ته پوء هن مشين تي سڀني خدمتن جا نشان عام طور تي معذور آهن
Jaeger-collector - سڀ ايجنٽ ان ڏانهن گڏ ڪيل نشان موڪليندا آهن، ۽ اهو انهن کي چونڊيل ڊيٽابيس ۾ رکندو آهي
ڊيٽابيس انهن جي پسنديده ڪئاسنڊا آهي، پر اسان استعمال ڪندا آهيون elasticsearch، اتي موجود آهن ڪجهه ٻين ڊيٽابيس لاءِ عمل درآمد ۽ هڪ ميموري تي عمل درآمد جيڪو ڊسڪ ۾ ڪجهه به محفوظ نٿو ڪري.
HttpClient httpClient = new TracingHttpClientBuilder().build();
اسان کي منهن ڏيڻ وارا مسئلا
Beans ۽ DI هميشه ڪم نه ڪندا آهن جيڪڏهن ٽريسر ڪنهن خدمت يا جزو ۾ استعمال نه ڪيو ويو آهي، پوء خودڪار وائرڊ Tracer ڪم نه ڪري سگھي ٿو ۽ توھان کي استعمال ڪرڻو پوندو GlobalTracer.ge().
تشريحون ڪم نه ڪنديون آهن جيڪڏهن اهو هڪ جزو يا خدمت نه آهي، يا جيڪڏهن اهو طريقو ساڳئي طبقي جي پاڙيسري طريقي مان سڏيو وڃي ٿو. توهان کي محتاط رهڻو پوندو چيڪ ڪرڻ لاءِ ته ڇا ڪم ڪري ٿو ۽ استعمال ڪريو مينوئل ٽريس ٺاهڻ جيڪڏهن @Traced ڪم نٿو ڪري. توهان جاوا تشريح لاءِ اضافي ڪمپلر پڻ ڳنڍي سگهو ٿا، پوءِ انهن کي هر هنڌ ڪم ڪرڻ گهرجي.
جڏهن هڪ طريقي سان نشان شامل ڪيو وڃي، توهان کي پڪ ڪرڻ جي ضرورت آهي ته اهو لوپ ۾ ڪيترائي ڀيرا نه سڏيو وڃي. اهو ضروري آهي ته سڀني ڪالن لاء هڪ عام سراغ شامل ڪريو، جيڪو ڪم جي مجموعي وقت جي ضمانت ڏئي ٿو. ٻي صورت ۾، هڪ اضافي لوڊ پيدا ڪيو ويندو.
هڪ دفعي jaeger-ui ۾، وڏي تعداد ۾ نشانين لاءِ تمام وڏيون درخواستون ڪيون ويون، ۽ جيئن ته انهن جوابن جو انتظار نه ڪيو، انهن اهو ٻيهر ڪيو. نتيجي طور، jaeger-query تمام گهڻو ياداشت کائڻ شروع ڪيو ۽ لچڪدار کي سست ڪيو. jaeger-query کي ٻيهر شروع ڪرڻ ۾ مدد ڪئي وئي
امڪاني جيڪو ڪجهه ڏنل امڪانن سان نشانن کي فلٽر ڪري ٿو.
Ratelimiting جيڪو محدود ڪري ٿو نشانن جو تعداد في سيڪنڊ. توھان انھن سيٽنگن کي ڪلائنٽ تي ترتيب ڏئي سگھو ٿا، يا ته jaeger-agent يا ڪليڪٽر تي. ھاڻي اسان استعمال ڪندا آھيون const 1 valuator stack ۾، ڇاڪاڻ ته اتي تمام گھڻيون درخواستون نه آھن، پر اھي گھڻو وقت وٺن ٿيون. مستقبل ۾، جيڪڏهن اهو سسٽم تي تمام گهڻو لوڊ ڪندو، توهان ان کي محدود ڪري سگهو ٿا.
جيڪڏهن توهان ڪئاسندرا استعمال ڪريو ٿا، پوء ڊفالٽ طور اهو صرف ٻن ڏينهن تائين نشانن کي محفوظ ڪري ٿو. اسان استعمال ڪري رهيا آهيون ڳولا ڪرڻ ۽ نشانيون هر وقت محفوظ ڪيون وينديون آهن ۽ ڊهي نه وينديون آهن. هر روز لاءِ هڪ الڳ انڊيڪس ٺاهيو ويو آهي، مثال طور jaeger-service-2019-03-04. مستقبل ۾، توهان کي پراڻي نشانن جي خودڪار صفائي کي ترتيب ڏيڻ جي ضرورت آهي.
نشانين کي ڏسڻ لاءِ توھان کي ضرورت آھي:
خدمت چونڊيو جنهن جي ذريعي توهان نشانن کي فلٽر ڪرڻ چاهيو ٿا، مثال طور، tomcat7-default هڪ خدمت لاءِ جيڪا ٽامڪيٽ ۾ هلي رهي آهي ۽ ان جو پنهنجو نالو ناهي.
پوءِ آپريشن چونڊيو، وقت جو وقفو ۽ گھٽ ۾ گھٽ آپريشن جو وقت، مثال طور 10 سيڪنڊن کان، رڳو ڊگھي سزائون وٺڻ لاءِ.