البرنامج التعليمي: مراقبة وتشخيص تطبيق Service Fabric باستخدام Application Insights
هذا البرنامج التعليمي هو الجزء الخامس في سلسلة. يستعرض خطوات تكوين المراقبة والتشخيص لتطبيق ASP.NET Core يعمل على مجموعة Azure Service Fabric باستخدام Application Insights. يمكنك جمع بيانات تتبع الاستخدام من التطبيق الذي تم تطويره في الجزء الأول من سلسلة البرامج التعليمية.
في هذا البرنامج التعليمي، تتعلم كيفية:
- إعداد مورد Application Insights
- إضافة Application Insights إلى خدمات التطبيق
- عرض بيانات تتبع الاستخدام وخريطة التطبيق في Application Insights
- إضافة أدوات مُخصصة إلى تطبيقك
توضح لك سلسلة البرامج التعليمية كيفية:
- إنشاء تطبيق .NET Service Fabric
- نشر التطبيق على نظام المجموعة البعيدة
- إضافة نقطة انتهاء HTTPS إلى خدمة ASP.NET Core الأمامية
- تكوين CI/CD باستخدام Azure Pipelines
- إعداد المراقبة والتشخيص للتطبيق (هذا البرنامج التعليمي)
المتطلبات الأساسية
قبل أن تبدأ هذا البرنامج التعليمي:
- إذا لم يكن لديك اشتراك Azure، فأنشئ حسابًا مجانًا.
- تثبيت Visual Studio 2019، بما في ذلك حمل عمل تطوير Azure وعبء عمل تطوير ASP.NET والويب.
- تثبيت Service Fabric SDK.
قم بتنزيل تطبيق نموذج التصويت
إذا لم تقم بإنشاء نموذج تطبيق التصويت في الجزء الأول من سلسلة البرامج التعليمية هذه، يمكنك تنزيله. في نافذة الأوامر أو المحطة الطرفية، قم بتشغيل الأمر التالي لاستنساخ نموذج مستودع التطبيق إلى الكمبيوتر المحلي:
git clone https://github.com/Azure-Samples/service-fabric-dotnet-quickstart
إعداد مورد Application Insights
Application Insights هو النظام الأساسي لإدارة أداء تطبيق Azure. نوصي باستخدام Application Insights لمراقبة التطبيق وتشخيصه في Service Fabric.
لإنشاء مورد Application Insights، انتقل إلى مدخل Microsoft Azure. حدد Create a resource. في قائمة المدخل، حدد Monitoring + Diagnostics. في العمود Popular Azure services ، ضمن Application Insights، حدد Create.
أدخل قيم الاشتراك ومجموعة الموارد والاسم أو حددها. بالنسبة إلى Region، اختر مكان نشر مجموعة Service Fabric في المستقبل. في هذا البرنامج التعليمي، نقوم بنشر التطبيق على مجموعة محلية، لذلك منطقة Azure غير ذات صلة. بالنسبة لنوع التطبيق، اتركه كتطبيق ويب ASP.NET.
عند إدخال المعلومات المطلوبة أو تحديدها، حدد إنشاء لتوفير المورد. يتم نشر المورد في حوالي دقيقة واحدة.
إضافة Application Insights إلى خدمات التطبيق
افتح Visual Studio 2019 باستخدام الخيار تشغيل كمسؤول (انقر بزر الماوس الأيمن فوق أيقونة Visual Studio في قائمة البدء). حدد File>Open>Project/Solution وانتقل إلى تطبيق Voting (إما تم إنشاؤه في الجزء الأول من البرنامج التعليمي أو نسخه من GitHub). افتح Voting.sln. إذا تمت مطالبتك باستعادة حزم NuGet للتطبيق، فحدد Yes.
لتكوين Application Insights لخدمات VotingWeb و VotingData:
انقر بزر الماوس الأيمن فوق اسم الخدمة، وحدد Add> الاتصال ed Services>Monitoring with Application Insights.
إشعار
اعتمادا على نوع المشروع، عند النقر بزر الماوس الأيمن فوق اسم الخدمة، قد تحتاج إلى تحديد Add ثم تحديد Application Insights Telemetry.
حدد الشروع في العمل.
سجل الدخول إلى الحساب الذي تستخدمه لاشتراك Azure وحدد الاشتراك الذي أنشأت فيه مورد Application Insights. للعثور على المورد، في المورد، انتقل إلى مورد Application Insights الموجود. حدد Register لإضافة Application Insights إلى خدمتك.
حدد إنهاء.
إشعار
تأكد من القيام بهذه الخطوات لكل من الخدمات في التطبيق لإنهاء تكوين Application Insights للتطبيق. يتم استخدام نفس مورد Application Insights لكل من الخدمات من أجل الاطلاع على الطلبات الواردة والصادرة والاتصال بين الخدمات.
إضافة Microsoft.ApplicationInsights.ServiceFabric.Native NuGet إلى الخدمات
يحتوي Application Insights على حزمتي NuGet خاصتين ب Service Fabric يمكنك استخدامهما اعتمادا على السيناريو. يتم استخدام أحدهما مع الخدمات الأصلية ل Service Fabric، والآخر مع حاويات وملفات تنفيذية للضيف. في هذه الحالة، نستخدم حزمة Microsoft.ApplicationInsights.ServiceFabric.Native NuGet للتعرف على سياق الخدمة. لمزيد من المعلومات حول Application Insights SDK وحزم NuGet الخاصة ب Service Fabric، راجع Microsoft Application Insights for Service Fabric.
لإعداد حزمة NuGet:
في مستكشف الحلول، انقر بزر الماوس الأيمن فوق الحل "التصويت" وحدد إدارة حزم NuGet للحل.
في مربع الحوار NuGet - الحل ، حدد استعراض. حدد خانة الاختيار Include prerelease .
إشعار
قد تحتاج إلى تثبيت حزمة Microsoft.ServiceFabric.Diagnostics.Internal بنفس الطريقة إذا لم يتم تثبيتها مسبقا قبل تثبيت حزمة Application Insights.
ابحث عن Microsoft.ApplicationInsights.ServiceFabric.Native، ثم حدد حزمة NuGet.
في الجزء الأيسر، حدد خانة الاختيار VotingWeb وخانة الاختيار VotingData . حدد تثبيت.
في مربع الحوار معاينة التغييرات ، حدد موافق لقبول الترخيص. تتم إضافة حزم NuGet إلى الخدمات.
بعد ذلك، قم بإعداد مهيئ بيانات تتبع الاستخدام في الخدمتين. افتح VotingWeb.cs VotingData.cs. أكمل الخطوات التالية في ملفي التعليمات البرمجية:
أضف هاتين العبارتين
using
في أعلى كل ملف، بعد العبارات الموجودةusing
:using Microsoft.ApplicationInsights.Extensibility; using Microsoft.ApplicationInsights.ServiceFabric;
في كلا الملفين، في العبارة المتداخلة من أو ، ضمن>
services
ConfigureServices
، مع الخدمات المفردة الأخرى المعلنة، أضف:CreateServiceReplicaListeners()
CreateServiceInstanceListeners()
return
.AddSingleton<ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext))
تضيف هذه التعليمة البرمجية
Service Context
إلى بيانات تتبع الاستخدام الخاصة بك، بحيث يمكنك فهم مصدر بيانات تتبع الاستخدام بشكل أفضل في Application Insights. تبدو العبارة المتداخلةreturn
في VotingWeb.cs الآن مشابهة لهذا المثال:return new WebHostBuilder() .UseKestrel() .ConfigureServices( services => services .AddSingleton<HttpClient>(new HttpClient()) .AddSingleton<FabricClient>(new FabricClient()) .AddSingleton<StatelessServiceContext>(serviceContext) .AddSingleton<ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext))) .UseContentRoot(Directory.GetCurrentDirectory()) .UseStartup<Startup>() .UseApplicationInsights() .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None) .UseUrls(url) .Build();
في VotingData.cs، تبدو التعليمات البرمجية الآن مشابهة لهذا المثال:
return new WebHostBuilder()
.UseKestrel()
.ConfigureServices(
services => services
.AddSingleton<StatefulServiceContext>(serviceContext)
.AddSingleton<IReliableStateManager>(this.StateManager)
.AddSingleton<ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext)))
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.UseApplicationInsights()
.UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.UseUniqueServiceUrl)
.UseUrls(url)
.Build();
تحقق مرة متعددة من استدعاء UseApplicationInsights()
الأسلوب في كل من VotingWeb.cs VotingData.cs كما هو موضح في الأمثلة.
إشعار
يستخدم نموذج التطبيق هذا HTTP للخدمات للاتصال. إذا قمت بتطوير تطبيق باستخدام Service Fabric Service Remoting V2، أضف أيضا الأسطر التالية في نفس الموقع في التعليمات البرمجية:
ConfigureServices(services => services
...
.AddSingleton<ITelemetryModule>(new ServiceRemotingDependencyTrackingTelemetryModule())
.AddSingleton<ITelemetryModule>(new ServiceRemotingRequestTrackingTelemetryModule())
)
في هذه المرحلة، أنت مستعد لنشر التطبيق. حدد البدء (أو حدد F5). يقوم Visual Studio بإنشاء التطبيق وحزمه، وإعداد نظام المجموعة المحلي، ونشر التطبيق إلى نظام المجموعة.
إشعار
قد تحصل على خطأ في البنية إذا لم يكن لديك إصدار محدث من .NET Core SDK مثبتا.
عند نشر التطبيق، انتقل إلى localhost:8080
، حيث يتم تشغيل تطبيق Voting Sample أحادي الصفحة. صوت لعدد قليل من العناصر المختلفة التي تختارها لإنشاء بعض عينات البيانات وبيانات تتبع الاستخدام. على سبيل المثال، الحلويات!
يمكنك أيضا إزالة بعض خيارات التصويت عند الانتهاء من إضافة بعض الأصوات.
عرض بيانات تتبع الاستخدام وخريطة التطبيق في Application Insights
في مدخل Microsoft Azure، انتقل إلى مورد Application Insights.
حدد نظرة عامة للعودة إلى جزء النظرة العامة للمورد الخاص بك. حدد بحث لمشاهدة التتبعات الواردة. يستغرق ظهور عمليات التتبع في Application Insights بضع دقائق. إذا لم تشاهد أي آثار، فانتظر دقيقة، ثم حدد الزر تحديث .
مرر لأسفل في نافذة البحث لعرض جميع بيانات تتبع الاستخدام الواردة التي تأتي مع Application Insights. لكل إجراء قمت به في تطبيق التصويت، يجب أن يكون هناك طلب PUT صادر من VotingWeb (PUT Votes/Put [name])، طلب PUT وارد من VotingData (PUT VoteData/Put [name])، متبوعا بزوج من طلبات GET لتحديث البيانات المعروضة. سيكون هناك أيضا تتبع تبعية ل HTTP على localhost
لأن هذه الطلبات هي طلبات HTTP. فيما يلي مثال على ما تراه لكيفية إضافة صوت واحد:
يمكنك تحديد تتبع لمشاهدة مزيد من التفاصيل عنه. يتضمن Application Insights معلومات مفيدة حول الطلب، بما في ذلك قيم وقت الاستجابة وعنوان URL للطلب. نظرا لأنك أضفت NuGet الخاص ب Service Fabric، يمكنك أيضا الحصول على بيانات حول التطبيق الخاص بك في سياق مجموعة Service Fabric في قسم البيانات المخصصة. تتضمن البيانات سياق الخدمة، حتى تتمكن من رؤية قيم PartitionID و ReplicaId لمصدر الطلب وعزل المشكلات بشكل أفضل عند تشخيص الأخطاء في التطبيق الخاص بك.
للانتقال إلى خريطة التطبيق، حدد خريطة التطبيق في قائمة الموارد في جزء نظرة عامة ، أو حدد أيقونة خريطة التطبيق. تظهر الخريطة خدمتيك المتصلتين.
يمكن أن تساعدك خريطة التطبيق على فهم مخطط التطبيق بشكل أفضل، خاصة عند البدء في إضافة الخدمات التي تعمل معا. كما أنه يمنحك بيانات أساسية حول معدلات نجاح الطلب، ويمكن أن يساعدك في تشخيص الطلب الفاشل لفهم أين سارت الأمور بشكل خاطئ. لمعرفة المزيد، راجع Application Map في Application Insights.
إضافة أدوات مُخصصة إلى تطبيقك
على الرغم من أن Application Insights يوفر بيانات تتبع الاستخدام خارج الصندوق، فقد تحتاج إلى إضافة أجهزة مخصصة. ربما لديك احتياجات تجارية للأجهزة المخصصة أو تريد تحسين التشخيص عندما تسوء الأمور في التطبيق الخاص بك. يمكنك استيعاب الأحداث والمقاييس المخصصة باستخدام واجهة برمجة تطبيقات Application Insights.
بعد ذلك، أضف بعض الأحداث المخصصة إلى VoteDataController.cs (فيControllers
VotingData
> ) لتتبع وقت إضافة الأصوات وحذفها من الأساسي votesDictionary
:
أضف
using Microsoft.ApplicationInsights;
في نهاية العبارات الأخرىusing
.قم بتعريف قيمة جديدة ل
TelemetryClient
في بداية الفئة، ضمن إنشاءIReliableStateManager
:private TelemetryClient telemetry = new TelemetryClient();
.في الدالة
Put()
، أضف حدثا يؤكد إضافة تصويت. أضفtelemetry.TrackEvent($"Added a vote for {name}");
بعد اكتمال المعاملة، مباشرة قبل بيان الإرجاعOkResult
.في
Delete()
، هناك "if/else" استنادا إلى الشرط الذيvotesDictionary
يحتوي على أصوات لخيار تصويت محدد.- أضف حدثا يؤكد حذف تصويت في
if
البيان، بعدawait tx.CommitAsync()
:telemetry.TrackEvent($"Deleted votes for {name}");
- أضف حدثا لإظهار أن الحذف لم يحدث في العبارة
else
، قبل العبارةreturn
:telemetry.TrackEvent($"Unable to delete votes for {name}, voting option not found");
- أضف حدثا يؤكد حذف تصويت في
فيما يلي مثال على الشكل Put()
الذي قد تبدو عليه الدالات و Delete()
بعد إضافة الأحداث:
// PUT api/VoteData/name
[HttpPut("{name}")]
public async Task<IActionResult> Put(string name)
{
var votesDictionary = await this.stateManager.GetOrAddAsync<IReliableDictionary<string, int>>("counts");
using (ITransaction tx = this.stateManager.CreateTransaction())
{
await votesDictionary.AddOrUpdateAsync(tx, name, 1, (key, oldvalue) => oldvalue + 1);
await tx.CommitAsync();
}
telemetry.TrackEvent($"Added a vote for {name}");
return new OkResult();
}
// DELETE api/VoteData/name
[HttpDelete("{name}")]
public async Task<IActionResult> Delete(string name)
{
var votesDictionary = await this.stateManager.GetOrAddAsync<IReliableDictionary<string, int>>("counts");
using (ITransaction tx = this.stateManager.CreateTransaction())
{
if (await votesDictionary.ContainsKeyAsync(tx, name))
{
await votesDictionary.TryRemoveAsync(tx, name);
await tx.CommitAsync();
telemetry.TrackEvent($"Deleted votes for {name}");
return new OkResult();
}
else
{
telemetry.TrackEvent($"Unable to delete votes for {name}, voting option not found");
return new NotFoundResult();
}
}
}
عند الانتهاء من إجراء هذه التغييرات، حدد البدء في التطبيق بحيث يقوم بإنشاء أحدث إصدار ونشره. عند الانتهاء من نشر التطبيق، انتقل إلى localhost:8080
. إضافة بعض خيارات التصويت وحذفها. ثم ارجع إلى مورد Application Insights الخاص بك لمشاهدة التتبعات لأحدث تشغيل (تستغرق التتبعات من 1 إلى 2 دقيقة لتظهر في Application Insights). لجميع الأصوات التي قمت بإضافتها وحذفها، يجب أن تشاهد الآن إدخالا للحدث المخصص مع بيانات تتبع الاستخدام للاستجابة المقترنة.
المحتوى ذو الصلة
- تعرف على المزيد حول المراقبة والتشخيص في Service Fabric.
- راجع تحليل حدث Service Fabric باستخدام Application Insights.
- تعرّف على المزيد حول Application Insights.
الملاحظات
https://aka.ms/ContentUserFeedback.
قريبًا: خلال عام 2024، سنتخلص تدريجيًا من GitHub Issues بوصفها آلية إرسال ملاحظات للمحتوى ونستبدلها بنظام ملاحظات جديد. لمزيد من المعلومات، راجعإرسال الملاحظات وعرضها المتعلقة بـ