در دنیای خدمات میکروسرویس ، هر عملیات منطقی نیاز به کار در مؤلفه های مختلف سرویس دارد. شما می توانید با استفاده از بینش های کاربردی ، هر یک از این مؤلفه ها را به طور جداگانه کنترل کنید. Insights Application از همبستگی تله متری توزیع شده پشتیبانی می کند ، که شما برای تشخیص اینکه کدام مؤلفه مسئول خرابی یا تخریب عملکرد است ، استفاده می کنید.
در این مقاله مدل داده مورد استفاده توسط بینش های کاربردی برای ارتباط تله متری ارسال شده توسط چندین مؤلفه توضیح داده شده است. این تکنیک ها و پروتکل های تولید زمینه را در بر می گیرد. همچنین اجرای تاکتیک های همبستگی در زبان ها و سیستم عامل های مختلف را در بر می گیرد.
در 31 مارس 2025 ، پشتیبانی از مصرف کلید ابزار به پایان می رسد. مصرف کلید ابزار دقیق به کار خود ادامه خواهد داد ، اما ما دیگر به روزرسانی یا پشتیبانی از این ویژگی را ارائه نمی دهیم. انتقال به رشته های اتصال برای استفاده از قابلیت های جدید.
مدل داده برای همبستگی تله متری
Insights Application یک مدل داده را برای همبستگی تله متری توزیع شده تعریف می کند. برای مرتبط کردن تله متری با یک عمل منطقی ، هر مورد از راه دور دارای زمینه زمینه ای به نام Operation_ID است. این شناسه توسط هر مورد از راه دور در ردیابی توزیع شده به اشتراک گذاشته می شود. بنابراین حتی اگر از طریق یک لایه تله متری را از دست دهید ، هنوز هم می توانید از راه دور گزارش شده توسط سایر مؤلفه ها ارتباط برقرار کنید.
یک عمل منطقی توزیع شده به طور معمول از مجموعه ای از عملیات کوچکتر تشکیل شده است که درخواست هایی است که توسط یکی از مؤلفه ها پردازش می شوند. این عملیات با درخواست تله متری تعریف می شود. هر مورد از تله متری درخواست شناسه خاص خود را دارد که آن را منحصر به فرد و جهانی مشخص می کند. و کلیه موارد تله متری (مانند آثار و استثنائات) که با درخواست همراه هستند ، باید Operation_Parentid را به مقدار شناسه درخواست تنظیم کنند.
هر عملیات خروجی ، مانند تماس HTTP به مؤلفه دیگری ، توسط تله متری وابستگی نشان داده شده است. تله متری وابستگی همچنین شناسه خاص خود را که در سطح جهان بی نظیر است تعریف می کند. درخواست Telemetry ، که توسط این تماس وابستگی آغاز شده است ، از این شناسه به عنوان Operation_ParentID خود استفاده می کند.
شما می توانید با استفاده از Operation_ID ، Operation_ParentId ، و درخواست. id با وابستگی. id ، منظره ای از عملیات منطقی توزیع شده ایجاد کنید. این زمینه ها همچنین ترتیب علیت تماس های تله متری را تعریف می کنند.
در یک محیط میکروسرویس ، اثری از مؤلفه ها می توانند به موارد مختلف ذخیره سازی مراجعه کنند. هر مؤلفه می تواند رشته اتصال خاص خود را در بینش برنامه داشته باشد. برای به دست آوردن تله متری برای عملکرد منطقی ، برنامه های بینش داده ها داده ها را از هر مورد ذخیره سازی ارائه می دهد.
هنگامی که تعداد وسایل ذخیره سازی بزرگ است ، به یک اشاره در مورد مکان بعدی نیاز دارید. مدل داده Insights Application برای حل این مشکل دو قسمت را تعریف می کند: درخواست. منبع و وابستگی. قسمت اول مؤلفه ای را که درخواست وابستگی را آغاز کرده است ، مشخص می کند. قسمت دوم مشخص می کند که کدام مؤلفه پاسخ تماس وابستگی را برگرداند.
برای کسب اطلاعات در مورد پرس و جو از موارد مختلف متفاوت با استفاده از بیان پرس و جو برنامه ، به بیان برنامه () در Query Monitor Azure مراجعه کنید.
مثال
بیایید به یک مثال نگاه کنیم. برنامه ای به نام قیمت سهام با استفاده از API خارجی به نام سهام ، قیمت فعلی بازار سهام را نشان می دهد. برنامه قیمت سهام دارای صفحه ای به نام صفحه سهام است که مرورگر وب مشتری با استفاده از GET /Home /Stock باز می شود. برنامه با استفاده از تماس HTTP GET/API/سهام/مقدار API سهام را پرس و جو می کند.
شما می توانید با اجرای یک پرس و جو ، تله متری حاصل را تجزیه و تحلیل کنید:
در نتایج ، تمام موارد Telemetry Root action_id را به اشتراک می گذارند. هنگامی که یک تماس AJAX از صفحه ساخته می شود ، یک شناسه منحصر به فرد جدید (QJSXU) به تله متری وابستگی اختصاص می یابد ، و از شناسه صفحه به عنوان action_parentid استفاده می شود. درخواست سرور سپس از شناسه AJAX به عنوان action_parentid استفاده می کند.
نوع آیتم | نام | ID | action_parentid | Operation_id |
---|---|---|---|---|
صفحه نمایش | صفحه سهام | گودال | گودال | |
وابستگی | دریافت /خانه /سهام | qjsxu | گودال | گودال |
درخواست | به خانه/سهام بروید | kqkwlrst9pa = | qjsxu | گودال |
وابستگی | دریافت/API/سهام/مقدار | bbrf2l7mm2g = | kqkwlrst9pa = | گودال |
هنگامی که تماس دریافت/API/سهام/مقدار به یک سرویس خارجی انجام می شود ، باید هویت آن سرور را بدانید تا بتوانید قسمت وابستگی را به طور مناسب تنظیم کنید. هنگامی که سرویس خارجی از نظارت پشتیبانی نمی کند ، هدف به نام میزبان سرویس تنظیم می شود. به عنوان مثال ، Prices-api. com سهام است. اما اگر این سرویس با بازگرداندن یک هدر HTTP از پیش تعریف شده ، خود را مشخص کند ، هدف حاوی هویت سرویس است که به بینش های برنامه اجازه می دهد تا با پرس و جو از راه دور از آن سرویس ، اثری توزیع شده را بسازند.
هدرهای همبستگی با استفاده از W3C TraceContext
Insights Application در حال انتقال به متن ردیابی W3C است ، که تعریف می کند:
- TraceParent: شناسه عملیاتی منحصر به فرد و شناسه منحصر به فرد تماس را حمل می کند.
- Tracestate: زمینه ردیابی خاص سیستم را حمل می کند.
آخرین نسخه از Application Insights SDK از پروتکل متن ردیابی پشتیبانی می کند ، اما ممکن است شما نیاز به انتخاب آن داشته باشید.(سازگاری به عقب با پروتکل همبستگی قبلی پشتیبانی شده توسط برنامه بینش SDK حفظ خواهد شد.)
پروتکل HTTP همبستگی ، که به آن درخواست-ID نیز گفته می شود ، کاهش می یابد. این پروتکل دو هدر را تعریف می کند:
- درخواست-ID: شناسه جهانی منحصر به فرد تماس را حمل می کند.
- همبستگی-متن: مجموعه جفت های ارزش نام از خصوصیات ردیابی توزیع شده را حمل می کند.
Insights Application همچنین پسوند پروتکل HTTP همبستگی را تعریف می کند. این از جفت های ارزش نام درخواست درخواست برای انتشار مجموعه خواص مورد استفاده توسط تماس گیرنده فوری یا کاللی استفاده می کند. Application Insights SDK از این هدر برای تنظیم وابستگی. target و درخواست. Source استفاده می کند.
نقشه مدل W3C Trace-Context و Application Insights Models Data به روش زیر نقشه:
بینش برنامه | W3C TraceContext |
---|---|
شناسه درخواست و وابستگی | شناسه اصلی |
Operation_id | ردیف |
action_parentid | پدر و مادر-ID از والدین این دهانه. اگر این یک دهانه ریشه باشد ، این قسمت باید خالی باشد. |
پشتیبانی ردیابی توزیع شده W3C را برای برنامه های . NET فعال کنید
ردیابی توزیع شده مبتنی بر TraceContext W3C به طور پیش فرض در تمام SDK های Core NET/. NET Core اخیر ، همراه با سازگاری عقب مانده با پروتکل درخواست ID میراث فعال می شود.
پشتیبانی ردیابی توزیع شده W3C برای برنامه های جاوا را فعال کنید
جاوا 3. 0 نماینده
Agent Java 3. 0 از W3C خارج از جعبه پشتیبانی می کند و به پیکربندی بیشتری لازم نیست.
جاوا SDK
پیکربندی ورودی
برای برنامه های Java EE ، کد زیر را به برچسب در ApplicationInsights. xml اضافه کنید:
برای برنامه های بوت بهار ، این خصوصیات را اضافه کنید:
- Azure. Application-Sights. Web. Enable-W3C = TRUE
- Azure. Application-Sights. Web. Enable-W3C-BackCompat-Mode = TRUE
پیکربندی خروجی
کد زیر را به ai-Agent. xml اضافه کنید:
حالت سازگاری به عقب به طور پیش فرض فعال می شود و پارامتر EnableW3CbackCompat اختیاری است. فقط وقتی می خواهید سازگاری به عقب را خاموش کنید ، از آن استفاده کنید.
در حالت ایدهآل، زمانی که همه سرویسهای شما به نسخههای جدیدتر SDK که از پروتکل W3C پشتیبانی میکنند، بهروزرسانی میشوند، این حالت را خاموش میکنید. ما به شدت توصیه می کنیم که در اسرع وقت به این SDK های جدیدتر بروید.
مهم است که مطمئن شوید تنظیمات ورودی و خروجی دقیقاً یکسان هستند.
پشتیبانی ردیابی توزیع شده W3C را برای برنامه های وب فعال کنید
این ویژگی در Microsoft. ApplicationInsights. JavaScript است. به طور پیش فرض غیرفعال است. برای فعال کردن آن، از پیکربندی distributedTracingMode استفاده کنید. AI_AND_W3C برای سازگاری با هر سرویس قدیمی که توسط Application Insights ابزار شده است، ارائه شده است.
پیکربندی زیر را اضافه کنید:
پیکربندی زیر را اضافه کنید:
برای مشاهده تمام تنظیمات مورد نیاز برای فعال کردن همبستگی، به مستندات همبستگی جاوا اسکریپت مراجعه کنید.
همبستگی تله متری در OpenCensus Python
OpenCensus Python از W3C Trace-Context بدون نیاز به پیکربندی اضافی پشتیبانی می کند.
برای مرجع، می توانید مدل داده OpenCensus را در این صفحه GitHub بیابید.
همبستگی درخواست ورودی
OpenCensus Python هدرهای W3C Trace-Context را از درخواستهای دریافتی به دامنههایی که از خود درخواستها ایجاد میشوند، مرتبط میکند. OpenCensus به طور خودکار با ادغامهای این چارچوبهای کاربردی وب محبوب مرتبط میشود: Flask، Django، و Pyramid. شما فقط باید هدرهای W3C Trace-Context را با فرمت صحیح پر کنید و آنها را با درخواست ارسال کنید.
نمونه برنامه فلاسک
این کد یک نمونه برنامه Flask را روی دستگاه محلی شما اجرا می کند و به پورت 8080 گوش می دهد. برای مرتبط کردن زمینه ردیابی، درخواستی را به نقطه پایانی ارسال می کنید. در این مثال می توانید از دستور curl استفاده کنید:
با نگاه کردن به فرمت هدر Trace-Context، می توانید اطلاعات زیر را بدست آورید:
اگر به ورودی درخواست ارسال شده به Azure Monitor نگاه کنید، می توانید فیلدهایی را مشاهده کنید که با اطلاعات هدر ردیابی پر شده اند. می توانید داده ها را در زیر Logs (Analytics) در منبع Azure Monitor Application Insights پیدا کنید.
فیلد id در قالب است.، جایی که trace-id از هدر ردیابی که در درخواست ارسال شده است گرفته شده است و span-id یک آرایه 8 بایتی برای این بازه تولید شده است.
فیلد Operation_ParentId در قالب است.، که در آن Trace-id و Parent-id هر دو از سرآیند trace که در درخواست ارسال شده است گرفته می شوند.
همبستگی لاگ
OpenCensus Python شما را قادر می سازد تا لاگ ها را با افزودن شناسه ردیابی، شناسه دهانه و یک پرچم نمونه به رکوردهای گزارش مرتبط کنید. شما این ویژگی ها را با نصب OpenCensus logging ادغام اضافه می کنید. ویژگیهای زیر به اشیاء پایتون LogRecord اضافه میشوند: traceId، spanId و traceSampled (فقط برای لاگرهایی که پس از ادغام ایجاد میشوند قابل اعمال است).
ادغام گزارش OpenCensus را نصب کنید:
نمونه برنامه
هنگامی که این کد اجرا می شود، موارد زیر در کنسول چاپ می شود:
توجه داشته باشید که یک spanId برای پیام گزارش وجود دارد که در محدوده است. spanId همان چیزی است که به span به نام hello تعلق دارد.
می توانید داده های گزارش را با استفاده از AzureLogHandler صادر کنید. برای اطلاعات بیشتر، به تنظیم مانیتور Azure برای برنامه پایتون خود مراجعه کنید.
همچنین میتوانیم اطلاعات ردیابی را از یک مؤلفه به مؤلفه دیگر برای همبستگی مناسب منتقل کنیم. به عنوان مثال، سناریویی را در نظر بگیرید که در آن دو جزء وجود دارد، module1 و module2. Module1 توابع را در Module2 فراخوانی می کند. برای دریافت گزارشها از هر دو ماژول1 و module2 در یک ردیابی، میتوانیم از روش زیر استفاده کنیم:
همبستگی تله متری در دات نت
هنگام ورود به برنامه، همبستگی به طور پیش فرض مدیریت می شود. هیچ اقدام خاصی لازم نیست.
. NET Runtime از توزیع شده با کمک فعالیت و تشخیص منبع پشتیبانی می کند
Insights Insights . NET SDK از DiagnosticsOurce و فعالیت برای جمع آوری و همبستگی تله متری استفاده می کند.
همبستگی تله متری در جاوا
نماینده جاوا از همبستگی خودکار تله متری پشتیبانی می کند. این به طور خودکار برای کلیه تله متری (مانند ردپایی ، استثنائات و رویدادهای سفارشی) که در محدوده یک درخواست صادر می شود ، به صورت خودکار جمع می شود. همچنین در صورت پیکربندی عامل Java SDK ، هدرهای همبستگی را که قبلاً برای تماس های خدمات به سرویس از طریق HTTP توضیح داده شده بود ، پخش می کند.
بینش برنامه های Java Agement Autocollects درخواست ها و وابستگی های JMS ، Kafka ، Netty/WebFlux و موارد دیگر. برای Java SDK ، فقط تماس های انجام شده از طریق Apache httpclient برای ویژگی همبستگی پشتیبانی می شوند. انتشار خودکار زمینه در سراسر فن آوری های پیام رسانی مانند Kafka ، RabbitMQ و Azure Service Bus در SDK پشتیبانی نمی شود.
برای جمع آوری تله متری سفارشی ، باید برنامه را با Java 2. 6 SDK سازگار کنید.
نام نقش
ممکن است بخواهید نحوه نمایش نام کامپوننت در نقشه برنامه را سفارشی کنید. برای انجام این کار ، شما می توانید با استفاده از یکی از اقدامات زیر ، cloud_rolename را به صورت دستی تنظیم کنید:
برای بینش برنامه های جاوا ، نام نقش ابر را به شرح زیر تنظیم کنید:
همچنین می توانید با استفاده از متغیر محیط ApplicationInsights_Role_Name ، نام Cloud را تنظیم کنید.
با استفاده از Insights Java SDK 2. 5. 0 و بعد ، می توانید Cloud_rolename را با افزودن به پرونده ApplicationInsights. xml خود مشخص کنید:
اگر از Spring Boot با برنامه Starter Boot Application Insights استفاده می کنید ، نام سفارشی خود را برای برنامه در پرونده Application. Properties تنظیم کنید:
همچنین می توانید نام Cloud Mare را از طریق متغیر محیط یا خاصیت سیستم تنظیم کنید. برای جزئیات بیشتر به پیکربندی نام نقش ابر مراجعه کنید.