البرنامج التعليمي: مراقبة وتشخيص تطبيق Service Fabric باستخدام Application Insights

هذا البرنامج التعليمي هو الجزء الخامس في سلسلة. يستعرض خطوات تكوين المراقبة والتشخيص لتطبيق ASP.NET Core يعمل على مجموعة Azure Service Fabric باستخدام Application Insights. يمكنك جمع بيانات تتبع الاستخدام من التطبيق الذي تم تطويره في الجزء الأول من سلسلة البرامج التعليمية.

في هذا البرنامج التعليمي، تتعلم كيفية:

  • إعداد مورد Application Insights
  • إضافة Application Insights إلى خدمات التطبيق
  • عرض بيانات تتبع الاستخدام وخريطة التطبيق في Application Insights
  • إضافة أدوات مُخصصة إلى تطبيقك

توضح لك سلسلة البرامج التعليمية كيفية:

المتطلبات الأساسية

قبل أن تبدأ هذا البرنامج التعليمي:

قم بتنزيل تطبيق نموذج التصويت

إذا لم تقم بإنشاء نموذج تطبيق التصويت في الجزء الأول من سلسلة البرامج التعليمية هذه، يمكنك تنزيله. في نافذة الأوامر أو المحطة الطرفية، قم بتشغيل الأمر التالي لاستنساخ نموذج مستودع التطبيق إلى الكمبيوتر المحلي:

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.

لقطة شاشة توضح لك كيفية إنشاء مورد Application Insights جديد.

أدخل قيم الاشتراك ومجموعة الموارد والاسم أو حددها. بالنسبة إلى Region، اختر مكان نشر مجموعة Service Fabric في المستقبل. في هذا البرنامج التعليمي، نقوم بنشر التطبيق على مجموعة محلية، لذلك منطقة Azure غير ذات صلة. بالنسبة لنوع التطبيق، اتركه كتطبيق ويب ASP.NET.

لقطة شاشة تعرض سمات مورد Application Insights.

عند إدخال المعلومات المطلوبة أو تحديدها، حدد إنشاء لتوفير المورد. يتم نشر المورد في حوالي دقيقة واحدة.

إضافة Application Insights إلى خدمات التطبيق

افتح Visual Studio 2019 باستخدام الخيار تشغيل كمسؤول (انقر بزر الماوس الأيمن فوق أيقونة Visual Studio في قائمة البدء). حدد File>Open>Project/Solution وانتقل إلى تطبيق Voting (إما تم إنشاؤه في الجزء الأول من البرنامج التعليمي أو نسخه من GitHub). افتح Voting.sln. إذا تمت مطالبتك باستعادة حزم NuGet للتطبيق، فحدد Yes.

لتكوين Application Insights لخدمات VotingWeb و VotingData:

  1. انقر بزر الماوس الأيمن فوق اسم الخدمة، وحدد Add> الاتصال ed Services>Monitoring with Application Insights.

    لقطة شاشة توضح تكوين خدمات Application Insights.

    إشعار

    اعتمادا على نوع المشروع، عند النقر بزر الماوس الأيمن فوق اسم الخدمة، قد تحتاج إلى تحديد Add ثم تحديد Application Insights Telemetry.

  2. حدد الشروع في العمل.

  3. سجل الدخول إلى الحساب الذي تستخدمه لاشتراك Azure وحدد الاشتراك الذي أنشأت فيه مورد Application Insights. للعثور على المورد، في المورد، انتقل إلى مورد Application Insights الموجود. حدد Register لإضافة Application Insights إلى خدمتك.

    لقطة شاشة توضح كيفية تسجيل Application Insights.

  4. حدد إنهاء.

إشعار

تأكد من القيام بهذه الخطوات لكل من الخدمات في التطبيق لإنهاء تكوين 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:

  1. في مستكشف الحلول، انقر بزر الماوس الأيمن فوق الحل "التصويت" وحدد إدارة حزم NuGet للحل.

  2. في مربع الحوار NuGet - الحل ، حدد استعراض. حدد خانة الاختيار Include prerelease .

    إشعار

    قد تحتاج إلى تثبيت حزمة Microsoft.ServiceFabric.Diagnostics.Internal بنفس الطريقة إذا لم يتم تثبيتها مسبقا قبل تثبيت حزمة Application Insights.

  3. ابحث عن Microsoft.ApplicationInsights.ServiceFabric.Native، ثم حدد حزمة NuGet.

  4. في الجزء الأيسر، حدد خانة الاختيار VotingWeb وخانة الاختيار VotingData . حدد تثبيت.

    لقطة شاشة تعرض Application Insights SDK في NuGet.

  5. في مربع الحوار معاينة التغييرات ، حدد موافق لقبول الترخيص. تتم إضافة حزم NuGet إلى الخدمات.

  6. بعد ذلك، قم بإعداد مهيئ بيانات تتبع الاستخدام في الخدمتين. افتح VotingWeb.cs VotingData.cs. أكمل الخطوات التالية في ملفي التعليمات البرمجية:

    1. أضف هاتين العبارتين using في أعلى كل ملف، بعد العبارات الموجودة using :

      using Microsoft.ApplicationInsights.Extensibility;
      using Microsoft.ApplicationInsights.ServiceFabric;
      
    2. في كلا الملفين، في العبارة المتداخلة من أو ، ضمن>servicesConfigureServices ، مع الخدمات المفردة الأخرى المعلنة، أضف: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 للتتبعات.

مرر لأسفل في نافذة البحث لعرض جميع بيانات تتبع الاستخدام الواردة التي تأتي مع Application Insights. لكل إجراء قمت به في تطبيق التصويت، يجب أن يكون هناك طلب PUT صادر من VotingWeb (PUT Votes/Put [name])، طلب PUT وارد من VotingData (PUT VoteData/Put [name])، متبوعا بزوج من طلبات GET لتحديث البيانات المعروضة. سيكون هناك أيضا تتبع تبعية ل HTTP على localhost لأن هذه الطلبات هي طلبات HTTP. فيما يلي مثال على ما تراه لكيفية إضافة صوت واحد:

لقطة شاشة تعرض نموذج تتبع الطلب في Application Insights.

يمكنك تحديد تتبع لمشاهدة مزيد من التفاصيل عنه. يتضمن Application Insights معلومات مفيدة حول الطلب، بما في ذلك قيم وقت الاستجابة وعنوان URL للطلب. نظرا لأنك أضفت NuGet الخاص ب Service Fabric، يمكنك أيضا الحصول على بيانات حول التطبيق الخاص بك في سياق مجموعة Service Fabric في قسم البيانات المخصصة. تتضمن البيانات سياق الخدمة، حتى تتمكن من رؤية قيم PartitionID و ReplicaId لمصدر الطلب وعزل المشكلات بشكل أفضل عند تشخيص الأخطاء في التطبيق الخاص بك.

لقطة شاشة تعرض تفاصيل تتبع Application Insights.

للانتقال إلى خريطة التطبيق، حدد خريطة التطبيق في قائمة الموارد في جزء نظرة عامة ، أو حدد أيقونة خريطة التطبيق. تظهر الخريطة خدمتيك المتصلتين.

لقطة شاشة تبرز خريطة التطبيق في قائمة الموارد.

يمكن أن تساعدك خريطة التطبيق على فهم مخطط التطبيق بشكل أفضل، خاصة عند البدء في إضافة الخدمات التي تعمل معا. كما أنه يمنحك بيانات أساسية حول معدلات نجاح الطلب، ويمكن أن يساعدك في تشخيص الطلب الفاشل لفهم أين سارت الأمور بشكل خاطئ. لمعرفة المزيد، راجع Application Map في Application Insights.

إضافة أدوات مُخصصة إلى تطبيقك

على الرغم من أن Application Insights يوفر بيانات تتبع الاستخدام خارج الصندوق، فقد تحتاج إلى إضافة أجهزة مخصصة. ربما لديك احتياجات تجارية للأجهزة المخصصة أو تريد تحسين التشخيص عندما تسوء الأمور في التطبيق الخاص بك. يمكنك استيعاب الأحداث والمقاييس المخصصة باستخدام واجهة برمجة تطبيقات Application Insights.

بعد ذلك، أضف بعض الأحداث المخصصة إلى VoteDataController.cs (فيControllersVotingData> ) لتتبع وقت إضافة الأصوات وحذفها من الأساسي votesDictionary:

  1. أضف using Microsoft.ApplicationInsights; في نهاية العبارات الأخرى using .

  2. قم بتعريف قيمة جديدة ل TelemetryClient في بداية الفئة، ضمن إنشاء IReliableStateManager: private TelemetryClient telemetry = new TelemetryClient();.

  3. في الدالة Put() ، أضف حدثا يؤكد إضافة تصويت. أضف telemetry.TrackEvent($"Added a vote for {name}"); بعد اكتمال المعاملة، مباشرة قبل بيان الإرجاع OkResult .

  4. في Delete()، هناك "if/else" استنادا إلى الشرط الذي votesDictionary يحتوي على أصوات لخيار تصويت محدد.

    1. أضف حدثا يؤكد حذف تصويت في if البيان، بعد await tx.CommitAsync(): telemetry.TrackEvent($"Deleted votes for {name}");
    2. أضف حدثا لإظهار أن الحذف لم يحدث في العبارة 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). لجميع الأصوات التي قمت بإضافتها وحذفها، يجب أن تشاهد الآن إدخالا للحدث المخصص مع بيانات تتبع الاستخدام للاستجابة المقترنة.

لقطة شاشة تعرض الأحداث المخصصة.