الإبلاغ عن سلامة الخدمة والتحقق منها

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

هناك ثلاث طرق يمكنك من خلالها الإبلاغ عن الحالة الصحية من الخدمة:

  • استخدم عناصر القسم أو CodePackageActivationContext.
    يمكنك استخدام عناصر Partition و CodePackageActivationContext للإبلاغ عن سلامة العناصر التي تشكل جزءا من السياق الحالي. على سبيل المثال، تستطيع التعليمة البرمجية التي يتم تشغيلها كجزء من نسخة متماثلة الإبلاغ عن السلامة فقط على تلك النسخة المتماثلة، والقسم الذي تنتمي إليه والتطبيق التي هي جزء منه.
  • استخدم FabricClient.
    يمكنك استخدام FabricClient للإبلاغ عن السلامة من التعليمة البرمجية للخدمة إذا كان نظام مجموعتك غير آمن أو إذا كانت الخدمة قيد التشغيل بامتيازات المسؤول. لا تستخدم معظم السيناريوهات الواقعية مجموعات غير آمنة، أو توفر امتيازات المسؤول. باستخدام FabricClient، يمكنك الإبلاغ عن السلامة على أي عنصر يشكل جزءا من نظام المجموعة. ومع ذلك، من الناحية المثالية، يجب أن ترسل التعليمة البرمجية للخدمة فقط التقارير المتعلقة بسلامته.
  • استخدم واجهات برمجة تطبيقات REST على مستويات نظام المجموعة أو التطبيق أو التطبيق الموزع أو الخدمة أو حزمة الخدمة أو القسم أو النسخة المتماثلة أو العقدة. يمكن استخدام هذا للإبلاغ عن الحالة الصحية من داخل حاوية.

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

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

يجب أن يكون لديك الموارد الآتية مثبتة:

  • Visual Studio 2015 أو Visual Studio 2019
  • Service Fabric SDK

لإنشاء نظام مجموعة تطوير آمنة محلية

  • افتح PowerShell بامتيازات المسؤول، وقم بتشغيل الأوامر التالية:

الأوامر التي توضح كيفية إنشاء مجموعة تطوير آمنة

لتوزيع تطبيق والتحقق من سلامته

  1. افتح Visual Studio كمسؤول.

  2. إنشاء مشروع باستخدام قالب خدمة ذات حالة.

    إنشاء تطبيق Service Fabric باستخدام Stateful Service

  3. اضغط F5 لتشغيل التطبيق في وضع تتبع الأخطاء. يتم توزيع التطبيق على مجموعة أجهزة كمبيوتر المحلية.

  4. بعد تشغيل التطبيق، انقر بزر الماوس الأيمن فوق رمز إدارة نظام المجموعة المحلي في منطقة الإعلام وحدد إدارة نظام المجموعة المحلية من القائمة المختصرة لفتح مستكشف Service Fabric.

    فتح Service Fabric Explorer من منطقة الإعلام

  5. يجب عرض حالة التطبيق كما في هذه الصورة. في هذا الوقت، يجب أن يكون التطبيق سليمًا بدون أخطاء.

    تطبيق سليم في Service Fabric Explorer

  6. يمكنك أيضا التحقق من الحالة باستخدام PowerShell. يمكنك استخدام Get-ServiceFabricApplicationHealth لفحص سلامة التطبيق، ويمكنك استخدام Get-ServiceFabricServiceHealth لفحص سلامة الخدمة. تقرير السلامة لنفس التطبيق في PowerShell موجود في هذه الصورة.

    تطبيق سليم في PowerShell

لإضافة أحداث صحية مخصصة إلى التعليمة البرمجية للخدمة

تحتوي قوالب مشروع Service Fabric Visual Studio على عينة التعليمات البرمجية. توضح الخطوات التالية كيفية الإبلاغ عن الأحداث الصحية المخصصة من التعليمة البرمجية للخدمة. تظهر هذه التقارير تلقائيا في الأدوات القياسية لمراقبة السلامة التي يوفرها Service Fabric، مثل Service Fabric Explorer وطريقة عرض الحالة الصحية لمدخل Azure و PowerShell.

  1. أعد فتح التطبيق الذي قمت بإنشائه مسبقا في Visual Studio، أو قم بإنشاء تطبيق جديد باستخدام قالب Visual Studio خدمة ذات حالة.

  2. افتح الملف Stateful1.cs وابحث عن الاستدعاء myDictionary.TryGetValueAsync في الأسلوب RunAsync. ستلاحظ أن هذا الأسلوب يقوم بإرجاع result التي تحمل القيمة الحالية للعداد لأن المنطق الرئيسي في هذا التطبيق هو مواصلة تشغيل العد. إذا كان هذا التطبيق تطبيقا حقيقيا، وعند حدوث فشل بسبب تعذر إرسال النتيجة، فستحتاج إلى وضع علامة على هذا الحدث.

  3. للإبلاغ عن حدث سلامة عند حدوث فشل بسبب تعذر إرسال النتيجة، أضف الخطوات التالية.

    أ. إضافة مساحة الاسم System.Fabric.Health إلى الملف Stateful1.cs.

    using System.Fabric.Health;
    

    ب. إضافة التعليمة البرمجية التالية بعد الاستدعاء myDictionary.TryGetValueAsync

    if (!result.HasValue)
    {
        HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
        this.Partition.ReportReplicaHealth(healthInformation);
    }
    

    نقوم بالإبلاغ عن حالة سلامة النسخة المتماثلة لأن الإبلاغ عنها يكون يصدر عن خدمة ذات حالة. تخزن المعلمة HealthInformation معلومات حول مشاكل السلامة التي يتم الإبلاغ عنها.

    إذا قمت بإنشاء خدمة بدون حالة، استخدم التعليمة البرمجية التالية

    if (!result.HasValue)
    {
        HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
        this.Partition.ReportInstanceHealth(healthInformation);
    }
    
  4. إذا كانت خدمتك قيد التشغيل بامتيازات مسؤول أو إذا كانت المجموعة غير آمنة، فيمكنك أيضا استخدام FabricClient للإبلاغ عن حالة السلامة كما هو موضح في الخطوات التالية.

    أ. إنشاء المثيل FabricClient بعد var myDictionary الإعلان بالربط.

    var fabricClient = new FabricClient(new FabricClientSettings() { HealthReportSendInterval = TimeSpan.FromSeconds(0) });
    

    ب. أضف التعليمة البرمجية التالية بعد الاستدعاء myDictionary.TryGetValueAsync.

    if (!result.HasValue)
    {
       var replicaHealthReport = new StatefulServiceReplicaHealthReport(
            this.Context.PartitionId,
            this.Context.ReplicaId,
            new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error));
        fabricClient.HealthManager.ReportHealth(replicaHealthReport);
    }
    
  5. سنقوم الآن بمحاكاة هذا الفشل ونشاهد طريقة عرضه في أدوات مراقبة السلامة. لمحاكاة الفشل، قم بالتعليق على السطر الأول في التعليمة البرمجية للإبلاغ عن حالة السلامة التي أضفتها سابقا. بعد التعليق على السطر الأول، ستبدو التعليمة البرمجية على شاكلة المثال التالي.

    //if(!result.HasValue)
    {
        HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
        this.Partition.ReportReplicaHealth(healthInformation);
    }
    

    تقوم هذه التعليمة البرمجية بإطلاق تقرير السلامة كل مرة يتم فيها تنفيذ RunAsync. بعد إجراء التغيير، اضغط F5 لتشغيل التطبيق.

  6. بعد تشغيل التطبيق، افتح Service Fabric Explorer للتحقق من سلامة التطبيق. هذه المرة، يظهر Service Fabric Explorer وجود مشكلة في سلامة التطبيق. يظهر التطبيق وجود مشكلة في السلامة بسبب الخطأ الذي تم الإبلاغ عنه من التعليمة البرمجية التي أضفناها سابقا.

    تطبيق غير صحي في Service Fabric Explorer

  7. إذا قمت بتحديد النسخة المتماثلة الأساسية في طريقة عرض شجرة Service Fabric Explorer، فسترى أن حالة الصحة تشير إلى وجود خطأ أيضا. يعرض Service Fabric Explorer أيضا تفاصيل تقرير الحماية التي أضفتها إلى المعلمة HealthInformation في التعليمة البرمجية. يمكنك الاطلاع على نفس التقارير الصحية في PowerShell ومدخل Azure.

    صحة النسخة المتماثلة في Service Fabric Explorer

يبقى هذا التقرير في مدير الصحة حتى لحين استبداله بتقرير آخر أو حتى حذف هذه النسخة المتماثلة. نظرا لأننا لم نقم بتعيين TimeToLive لهذا التقرير الصحي في العنصر HealthInformation، فلن تنتهي صلاحية التقرير أبدا.

نوصي بالإبلاغ عن الصحة على مستويات متعددة، وتنطبق على النسخة المتماثلة في هذه الحالة. يمكنك أيضا الإبلاغ عن الحالة الصحية على Partition.

HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
this.Partition.ReportPartitionHealth(healthInformation);

للإبلاغ عن الصحة على Application، DeployedApplicationو DeployedServicePackage، استخدم CodePackageActivationContext.

HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
var activationContext = FabricRuntime.GetActivationContext();
activationContext.ReportApplicationHealth(healthInformation);

الخطوات التالية