الإبلاغ عن سلامة الخدمة والتحقق منها
عندما تواجه خدماتك مشاكل، تعتمد درجة استجابتك للحوادث والانقطاعات وإصلاحها على قدرتك على اكتشاف المشكلات بسرعة. إذا قمت بإبلاغ مدير حماية 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 بامتيازات المسؤول، وقم بتشغيل الأوامر التالية:
لتوزيع تطبيق والتحقق من سلامته
افتح Visual Studio كمسؤول.
إنشاء مشروع باستخدام قالب خدمة ذات حالة.
اضغط F5 لتشغيل التطبيق في وضع تتبع الأخطاء. يتم توزيع التطبيق على مجموعة أجهزة كمبيوتر المحلية.
بعد تشغيل التطبيق، انقر بزر الماوس الأيمن فوق رمز إدارة نظام المجموعة المحلي في منطقة الإعلام وحدد إدارة نظام المجموعة المحلية من القائمة المختصرة لفتح مستكشف Service Fabric.
يجب عرض حالة التطبيق كما في هذه الصورة. في هذا الوقت، يجب أن يكون التطبيق سليمًا بدون أخطاء.
يمكنك أيضا التحقق من الحالة باستخدام PowerShell. يمكنك استخدام
Get-ServiceFabricApplicationHealth
لفحص سلامة التطبيق، ويمكنك استخدامGet-ServiceFabricServiceHealth
لفحص سلامة الخدمة. تقرير السلامة لنفس التطبيق في PowerShell موجود في هذه الصورة.
لإضافة أحداث صحية مخصصة إلى التعليمة البرمجية للخدمة
تحتوي قوالب مشروع Service Fabric Visual Studio على عينة التعليمات البرمجية. توضح الخطوات التالية كيفية الإبلاغ عن الأحداث الصحية المخصصة من التعليمة البرمجية للخدمة. تظهر هذه التقارير تلقائيا في الأدوات القياسية لمراقبة السلامة التي يوفرها Service Fabric، مثل Service Fabric Explorer وطريقة عرض الحالة الصحية لمدخل Azure و PowerShell.
أعد فتح التطبيق الذي قمت بإنشائه مسبقا في Visual Studio، أو قم بإنشاء تطبيق جديد باستخدام قالب Visual Studio خدمة ذات حالة.
افتح الملف Stateful1.cs وابحث عن الاستدعاء
myDictionary.TryGetValueAsync
في الأسلوبRunAsync
. ستلاحظ أن هذا الأسلوب يقوم بإرجاعresult
التي تحمل القيمة الحالية للعداد لأن المنطق الرئيسي في هذا التطبيق هو مواصلة تشغيل العد. إذا كان هذا التطبيق تطبيقا حقيقيا، وعند حدوث فشل بسبب تعذر إرسال النتيجة، فستحتاج إلى وضع علامة على هذا الحدث.للإبلاغ عن حدث سلامة عند حدوث فشل بسبب تعذر إرسال النتيجة، أضف الخطوات التالية.
أ. إضافة مساحة الاسم
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); }
إذا كانت خدمتك قيد التشغيل بامتيازات مسؤول أو إذا كانت المجموعة غير آمنة، فيمكنك أيضا استخدام
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); }
سنقوم الآن بمحاكاة هذا الفشل ونشاهد طريقة عرضه في أدوات مراقبة السلامة. لمحاكاة الفشل، قم بالتعليق على السطر الأول في التعليمة البرمجية للإبلاغ عن حالة السلامة التي أضفتها سابقا. بعد التعليق على السطر الأول، ستبدو التعليمة البرمجية على شاكلة المثال التالي.
//if(!result.HasValue) { HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error); this.Partition.ReportReplicaHealth(healthInformation); }
تقوم هذه التعليمة البرمجية بإطلاق تقرير السلامة كل مرة يتم فيها تنفيذ
RunAsync
. بعد إجراء التغيير، اضغط F5 لتشغيل التطبيق.بعد تشغيل التطبيق، افتح Service Fabric Explorer للتحقق من سلامة التطبيق. هذه المرة، يظهر Service Fabric Explorer وجود مشكلة في سلامة التطبيق. يظهر التطبيق وجود مشكلة في السلامة بسبب الخطأ الذي تم الإبلاغ عنه من التعليمة البرمجية التي أضفناها سابقا.
إذا قمت بتحديد النسخة المتماثلة الأساسية في طريقة عرض شجرة Service Fabric Explorer، فسترى أن حالة الصحة تشير إلى وجود خطأ أيضا. يعرض Service Fabric Explorer أيضا تفاصيل تقرير الحماية التي أضفتها إلى المعلمة
HealthInformation
في التعليمة البرمجية. يمكنك الاطلاع على نفس التقارير الصحية في PowerShell ومدخل Azure.
يبقى هذا التقرير في مدير الصحة حتى لحين استبداله بتقرير آخر أو حتى حذف هذه النسخة المتماثلة. نظرا لأننا لم نقم بتعيين 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);
الخطوات التالية
الملاحظات
https://aka.ms/ContentUserFeedback.
قريبًا: خلال عام 2024، سنتخلص تدريجيًا من GitHub Issues بوصفها آلية إرسال ملاحظات للمحتوى ونستبدلها بنظام ملاحظات جديد. لمزيد من المعلومات، راجعإرسال الملاحظات وعرضها المتعلقة بـ