عرض تقارير سلامة «تصميم الخدمة»
تقدم Service Fabric نموذج الصحة مع كيانات الصحة حيث يمكن لمكونات النظام وهيئات المراقبة الإبلاغ عن الظروف المحلية التي يراقبونها. يعمل "health store" على تجميع جميع البيانات الصحية لتحديد ما إذا كانت الكيانات سليمة أم لا.
يتم ملء نظام المجموعة تلقائياً بالتقارير الصحية التي ترسلها مكونات النظام. اقرأ المزيد على "Use system health reports to troubleshoot".
توفر Service Fabric طرقًا متعددة للحصول على حالة الحماية المُجمّعة للكيانات:
- Service Fabric Explorer أو أدوات التصور الأخرى
- الاستعلامات عن الحالة (من خلال PowerShell، أو REST)
- الاستعلامات العامة التي ترجع قائمة بالكيانات التي تتمتع بالحماية كأحد الخصائص (من خلال PowerShell، أو API، أو REST)
لتوضيح هذه الخيارات، دعنا نستخدم مجموعة محلية مع خمس عقد وتطبيق fabric:/WordCount. يحتوي تطبيق fabric:/WordCount على خدمتين افتراضيتين، هما خدمة ذات حالة من النوع WordCountServiceType
، وخدمة بدون حالة من النوع WordCountWebServiceType
. لقد غيّرت ApplicationManifest.xml
إلى طلب سبع نسخ متماثلة مستهدفة للخدمة ذات حالة وقسم واحد. نظرًا لوجود خمس عقد فقط في نظام المجموعة، تقوم مكونات النظام بالإبلاغ عن تحذير على قسم الخدمة لأنه أقل من العدد المستهدف.
<Service Name="WordCountService">
<StatefulService ServiceTypeName="WordCountServiceType" TargetReplicaSetSize="7" MinReplicaSetSize="2">
<UniformInt64Partition PartitionCount="[WordCountService_PartitionCount]" LowKey="1" HighKey="26" />
</StatefulService>
</Service>
الحماية في مستكشف «تصميم الخدمة»
يوفر Service Fabric Explorer طريقة عرض مرئية لنظام المجموعة. في الصورة أدناه، يمكنك رؤية التالي:
- إن fabric:/WordCount للتطبيق لونه أحمر (في حالة خطأ) لأنه يحتوي على الحدث الخطأ الذي تم الإبلاغ عنه بواسطة MyWatchdog لتوفر الخاصية.
- إن إحدى خدماتها، fabric:/WordCount/WordCountService باللون الأصفر (في حالة تحذير). يتم تكوين الخدمة بسبع نسخ متماثلة ويحتوي نظام المجموعة على خمس عقد، لذلك فهناك نسختين متماثلتين لا يمكن وضعهما. على الرغم من أنه لا يظهر هنا، فإن قسم الخدمة لونه أصفر بسبب تقرير النظام من
System.FM
ينص علىPartition is below target replica or instance count
. يقوم القسم الأصفر بتشغيل الخدمة باللون الأصفر. - إن نظام المجموعة باللون الأحمر بسبب التطبيق باللون الأحمر.
يستخدم التقييم النهج الافتراضية داخل بيان الكتلة وبيان التطبيق. إنها سياسات صارمة ولا تحتمل أي فشل.
عرض نظام المجموعة باستخدام Service Fabric Explorer:
ملاحظة
أقرأ المزيد عن Service Fabric Explorer.
الاستعلامات الصحية
يعرض نسيج الخدمة الاستعلامات الصحية لكل نوع من "entity types". يمكن الوصول إليها من خلال واجهة برمجة التطبيقات، باستخدام طرق على FabricClient.HealthManager وPowerShell cmdlets وREST. تعرض هذه الاستعلامات معلومات صحية كاملة عن الكيان: الحالة الصحية المجمعة، والأحداث الصحية للكيان، وحالات صحة الطفل (عند الاقتضاء)، والتقييمات غير الصحية (عندما يكون الكيان غير صحي)، وإحصاءات صحة الأطفال (عند الاقتضاء).
ملاحظة
يتم إرجاع الكيان السليم عند تعبئته بالكامل في المتجر الصحي. يجب أن يكون الكيان نشطًا (أي غير محذوف) ويتضمن تقرير النظام. يجب أن تحتوي الكيانات الأصلية الموجودة في سلسلة التدرج الهرمي أيضًا على تقارير النظام. إذا لم يتم استيفاء أي من هذه الشروط، تقوم الاستعلامات الصحية بإرجاع FabricException متضمنًا FabricErrorCodeFabricHealthEntityNotFound
يوضح سبب عدم إرجاع الكيان.
يجب تمرير الاستعلامات السليمة في معرّف الكيان، الذي يعتمد على نوع الكيان. تقبل الاستعلامات معلمات سياسة الحماية الاختيارية. إذا لم يتم تحديد أي سياسات للحماية، يتم استخدام سياسات الحماية من نظام المجموعة أو بيان التطبيق للتقييم. إذا كانت بيانات التطبيق لا تحتوي على تعريف لسياسات الحماية، استخدام سياسات الحماية الافتراضية لإجراء التقييم. لا تحتمل سياسات الحماية الافتراضية أي إخفاقات. تقبل الاستعلامات أيضًا عوامل التصفية لإرجاع العناصر الفرعية أو الأحداث الجزئية فقط--تلك التي تراعي عوامل التصفية المحددة. تسمح تصفية أخرى باستبعاد إحصاءات العناصر الفرعية.
ملاحظة
يتم تطبيق عوامل تصفية الإخراج من جانب الخادم، بحيث يتم تقليل حجم الرد على الرسالة. نوصي باستخدام عوامل تصفية الإخراج للحد من البيانات التي تم إرجاعها، بدلاً من تطبيق عوامل التصفية من جانب العميل.
تحتوي حماية الكيان على:
- حالة الحماية المُجمّعة للكيان. يتم حسابها بواسطة المتجر الصحي استنادًا إلى التقارير الصحية للكيان، وحالات صحة التوابع (عند الاقتضاء)، وسياسات الحماية. أقرأ المزيد عن تقييم صحة الكيان.
- أحداث صحة الكيان.
- مجموعة حالات الصحة لجميع العناصر الفرعية للكيانات التي قد تحتوي على العناصر الفرعية. تحتوي حالات الصحة على معرّفات الكيانات وحالة الحماية المُجمّعة. للحصول على حماية كاملة للتابع، قم باستدعاء حالة الاستعلام لنوع الكيان التابع وقم بتمرير معرّف الفرع.
- التقييمات غير السليمة التي تشير إلى التقرير الذي قامت بتشغيل حالة الكيان، إذا كان الكيان غير سليم. إن التقييمات متكررة، وتحتوي على تقييمات صحة العناصر الفرعية التي قامت بتشغيل الحالة الصحية الحالية. على سبيل المثال، أبلغت هيئة المراقبة عن خطأ في نسخة متماثلة. تظهر صحة التطبيق تقييمًا غير سليم بسبب خدمة غير سليمة؛ إن الخدمة غير سليمة بسبب وجود قسم في حالة خطأ؛ إن القسم غير سليم بسبب وجود نسخة متماثلة في حالة خطأ؛ إن النسخة المتماثلة غير سليمة بسبب تقرير الصحة من هيئة المراقبة عن وجود خطأ.
- إن إحصاءات الصحة لجميع أنواع توابع الكيانات التي لديها فروع. على سبيل المثال، تعرض حماية نظام المجموعة العدد الإجمالي للتطبيقات، والخدمات، والأقسام، والنسخ المتماثلة، والكيانات المنشورة في المجموعة. تعرض صحة الخدمة العدد الإجمالي للأقسام والنسخ المتماثلة ضمن الخدمة المحددة.
احصل على صحة نظام المجموعة
تُرجع حالة حماية كيان نظام المجموعة وتحتوي على حالات الحماية للتطبيقات والعُقد (العناصر الفرعية لنظام المجموعة). إدخال:
- [اختياري] تُستخدم سياسة حماية نظام المجموعة لتقييم العُقد وأحداث نظام المجموعة.
- [اختياري] مخطط سياسة الصحة للتطبيق، مع استخدام سياسات الصحة لتجاوز سياسات بيان التطبيق.
- [اختياري] عوامل تصفية الأحداث، والعُقد، والتطبيقات التي تُحدد الإدخالات ذات الأهمية ويجب إرجاعها في النتيجة (على سبيل المثال، الأخطاء فقط، أو كل من التحذيرات والأخطاء). يتم استخدام جميع الأحداث، والعُقد، والتطبيقات لتقييم حالة الحماية المُجمّعة للكيان، بغض النظر عن عامل التصفية.
- [اختياري] التصفية لاستبعاد الإحصاءات السليمة.
- [اختياري] التصفية لتشمل إحصاءات حماية التصميم:/النظام في إحصاءات الحماية. ينطبق فقط في حالة عدم استبعاد الإحصاءات الحماية. بشكل افتراضي، تتضمن إحصائيات الحماية إحصائياتٍ لتطبيقات المستخدم فقط وليس تطبيق النظام.
واجهة برمجة التطبيقات (API)
لمعرفة حالة المجموعة، قم بإنشاء FabricClient
واستدعاء أسلوب GetClusterHealthAsync على HealthManager الخاص به.
يحصل الاستدعاء التالي على حالة المجموعة:
ClusterHealth clusterHealth = await fabricClient.HealthManager.GetClusterHealthAsync();
تحصل التعليمة البرمجية التالية على حماية نظام المجموعة باستخدام سياسة حماية مخصصة لنظام مجموعة وعوامل تصفية للعُقد والتطبيقات. وتُوضح أن إحصاءات الحماية تشمل إحصاءات النسيج :/النظام. تقوم بإنشاء ClusterHealthQueryDescription، الذي يحتوي على معلومات الإدخال.
var policy = new ClusterHealthPolicy()
{
MaxPercentUnhealthyNodes = 20
};
var nodesFilter = new NodeHealthStatesFilter()
{
HealthStateFilterValue = HealthStateFilter.Error | HealthStateFilter.Warning
};
var applicationsFilter = new ApplicationHealthStatesFilter()
{
HealthStateFilterValue = HealthStateFilter.Error
};
var healthStatisticsFilter = new ClusterHealthStatisticsFilter()
{
ExcludeHealthStatistics = false,
IncludeSystemApplicationHealthStatistics = true
};
var queryDescription = new ClusterHealthQueryDescription()
{
HealthPolicy = policy,
ApplicationsFilter = applicationsFilter,
NodesFilter = nodesFilter,
HealthStatisticsFilter = healthStatisticsFilter
};
ClusterHealth clusterHealth = await fabricClient.HealthManager.GetClusterHealthAsync(queryDescription);
PowerShell
إن الـ cmdlet المستخدم للحصول على حماية نظام المجموعة هو Get-ServiceFabricClusterHealth. أولاً، قم بالاتصال بنظام المجموعة باستخدام Connect-ServiceFabricCluster cmdlet.
إن حالة نظام المجموعة هي خمس عُقدٍ، وتطبيق النظام وfabric:/WordCount تم تكوينها كما هو موضح.
يحصل الـ cmdlet التالي على حالة نظام المجموعة باستخدام سياسات الحماية الافتراضية. إن حالة الحماية المُجمعة في حالة التحذير، لأن تطبيق fabric:/WordCount في حالة تحذير. لاحظ كيف توفر التقييمات غير الصحية تفاصيل عن الظروف التي أدت إلى الصحة الإجمالية.
PS D:\ServiceFabric> Get-ServiceFabricClusterHealth
AggregatedHealthState : Warning
UnhealthyEvaluations :
Unhealthy applications: 100% (1/1), MaxPercentUnhealthyApplications=0%.
Unhealthy application: ApplicationName='fabric:/WordCount', AggregatedHealthState='Warning'.
Unhealthy services: 100% (1/1), ServiceType='WordCountServiceType', MaxPercentUnhealthyServices=0%.
Unhealthy service: ServiceName='fabric:/WordCount/WordCountService', AggregatedHealthState='Warning'.
Unhealthy partitions: 100% (1/1), MaxPercentUnhealthyPartitionsPerService=0%.
Unhealthy partition: PartitionId='af2e3e44-a8f8-45ac-9f31-4093eb897600', AggregatedHealthState='Warning'.
Unhealthy event: SourceId='System.FM', Property='State', HealthState='Warning', ConsiderWarningAsError=false.
NodeHealthStates :
NodeName : _Node_4
AggregatedHealthState : Ok
NodeName : _Node_3
AggregatedHealthState : Ok
NodeName : _Node_2
AggregatedHealthState : Ok
NodeName : _Node_1
AggregatedHealthState : Ok
NodeName : _Node_0
AggregatedHealthState : Ok
ApplicationHealthStates :
ApplicationName : fabric:/System
AggregatedHealthState : Ok
ApplicationName : fabric:/WordCount
AggregatedHealthState : Warning
HealthEvents : None
HealthStatistics :
Node : 5 Ok, 0 Warning, 0 Error
Replica : 6 Ok, 0 Warning, 0 Error
Partition : 1 Ok, 1 Warning, 0 Error
Service : 1 Ok, 1 Warning, 0 Error
DeployedServicePackage : 6 Ok, 0 Warning, 0 Error
DeployedApplication : 5 Ok, 0 Warning, 0 Error
Application : 0 Ok, 1 Warning, 0 Error
يحصل PowerShell cmdlet التالي على صحة نظام المجموعة باستخدام سياسة مخصصة للتطبيق. يقوم بتصفية النتائج للحصول على التطبيقات والعقد فقط عن طريق الخطأ أو التحذير. ونتيجة لذلك، لا يتم إرجاع العُقد، حيث إن جميعها سليمة. لا يراعي عامل تصفية التطبيقات سوى تطبيق fabric:/WordCount. نظرًا لأن السياسة المخصصة تُحدد اعتبار التحذيرات أنها أخطاء في تطبيق fabric:/WordCount، يتم تقييم التطبيق على أنه في حالة خطأ، وكذلك هو حال نظام المجموعة.
PS D:\ServiceFabric> $appHealthPolicy = New-Object -TypeName System.Fabric.Health.ApplicationHealthPolicy
$appHealthPolicy.ConsiderWarningAsError = $true
$appHealthPolicyMap = New-Object -TypeName System.Fabric.Health.ApplicationHealthPolicyMap
$appUri1 = New-Object -TypeName System.Uri -ArgumentList "fabric:/WordCount"
$appHealthPolicyMap.Add($appUri1, $appHealthPolicy)
Get-ServiceFabricClusterHealth -ApplicationHealthPolicyMap $appHealthPolicyMap -ApplicationsFilter "Warning,Error" -NodesFilter "Warning,Error" -ExcludeHealthStatistics
AggregatedHealthState : Error
UnhealthyEvaluations :
Unhealthy applications: 100% (1/1), MaxPercentUnhealthyApplications=0%.
Unhealthy application: ApplicationName='fabric:/WordCount', AggregatedHealthState='Error'.
Unhealthy services: 100% (1/1), ServiceType='WordCountServiceType', MaxPercentUnhealthyServices=0%.
Unhealthy service: ServiceName='fabric:/WordCount/WordCountService', AggregatedHealthState='Error'.
Unhealthy partitions: 100% (1/1), MaxPercentUnhealthyPartitionsPerService=0%.
Unhealthy partition: PartitionId='af2e3e44-a8f8-45ac-9f31-4093eb897600', AggregatedHealthState='Error'.
Unhealthy event: SourceId='System.FM', Property='State', HealthState='Warning', ConsiderWarningAsError=true.
NodeHealthStates : None
ApplicationHealthStates :
ApplicationName : fabric:/WordCount
AggregatedHealthState : Error
HealthEvents : None
REST
يمكنك معرفة حالة نظام المجموعة من خلال طلب GET أو طلب POST يتضمن سياسات الحماية الموضحة في النص.
احصل على صحة العقدة
تُرجع حالة كيان العُقدة وتحتوي على أحداث الحالة التي تم الإبلاغ عنها في العقدة. إدخال:
- [مطلوب] اسم العقدة الذي يُحدد العُقدة.
- [اختياري] إعدادات سياسة حماية نظام المجموعة المستخدمة لتقييم الصحة.
- [اختياري] عوامل تصفية الأحداث التي تحدد الإدخالات ذات الأهمية ويجب إرجاعها في النتيجة (على سبيل المثال، الأخطاء فقط، أو كل من التحذيرات والأخطاء). يتم استخدام جميع الأحداث لتقييم حالة الحماية المُجمّعة للكيان، بغض النظر عن عامل التصفية.
واجهة برمجة التطبيقات (API)
لمعرفة حالة حماية العُقدة من خلال واجهة برمجة التطبيقات، قم بإنشاءFabricClient
واستدعاء أسلوب GetNodeHealthAsync على HealthManager الخاص بها.
تحصل التعليمة البرمجية التالية على حالة الحماية للعقدة من اسم العُقدة المحدد:
NodeHealth nodeHealth = await fabricClient.HealthManager.GetNodeHealthAsync(nodeName);
تحصل التعليمة البرمجية التالية على حماية العقدة من اسم العقدة المحدد وتمرر عامل تصفية الأحداث والنهج المخصص من خلال NodeHealthQueryDescription:
var queryDescription = new NodeHealthQueryDescription(nodeName)
{
HealthPolicy = new ClusterHealthPolicy() { ConsiderWarningAsError = true },
EventsFilter = new HealthEventsFilter() { HealthStateFilterValue = HealthStateFilter.Warning },
};
NodeHealth nodeHealth = await fabricClient.HealthManager.GetNodeHealthAsync(queryDescription);
PowerShell
إن الـ cmdlet المستخدم للحصول على حالة حماية العُقدة هو Get-ServiceFabricNodeHealth. أولاً، قم بالاتصال بنظام المجموعة باستخدام Connect-ServiceFabricCluster cmdlet. يحصل الـ cmdlet التالي على حالة حماية العُقدة باستخدام سياسات الحماية الافتراضية:
PS D:\ServiceFabric> Get-ServiceFabricNodeHealth _Node_1
NodeName : _Node_1
AggregatedHealthState : Ok
HealthEvents :
SourceId : System.FM
Property : State
HealthState : Ok
SequenceNumber : 3
SentAt : 7/13/2017 4:39:23 PM
ReceivedAt : 7/13/2017 4:40:47 PM
TTL : Infinite
Description : Fabric node is up.
RemoveWhenExpired : False
IsExpired : False
Transitions : Error->Ok = 7/13/2017 4:40:47 PM, LastWarning = 1/1/0001 12:00:00 AM
يحصل الـ cmdlet التالي على حالة الحماية لجميع العُقد في نظام المجموعة:
PS D:\ServiceFabric> Get-ServiceFabricNode | Get-ServiceFabricNodeHealth | select NodeName, AggregatedHealthState | ft -AutoSize
NodeName AggregatedHealthState
-------- ---------------------
_Node_4 Ok
_Node_3 Ok
_Node_2 Ok
_Node_1 Ok
_Node_0 Ok
REST
يمكنك الحصول على حالة الحماية للعقدة من خلال طلب GET أو طلب POST الذي يتضمن السياسات الحماية الموضحة في النص.
الحصول على حالة حماية التطبيق
تُرجع حالة كيان تطبيق. إنه يحتوي على حالات الحماية للتطبيقات المنتشرة والعناصر الفرعية للخدمة. إدخال:
- [مطلوب] اسم التطبيق (URI) الذي يُحدد التطبيق.
- [اختياري] سياسة حماية التطبيق المستخدمة لتجاوز سياسات بيان التطبيق.
- [اختياري] عوامل تصفية للأحداث، والخدمات، والتطبيقات المنشورة التي تُحدد الإدخالات ذات الأهمية ويتعين إرجاعها في النتيجة (على سبيل المثال، الأخطاء فقط، أو كل من التحذيرات والأخطاء). يتم استخدام جميع الأحداث، والخدمات، والتطبيقات المنشورة لتقييم حالة الحماية المُجمّعة للكيان، بغض النظر عن عامل التصفية.
- [اختياري] التصفية لاستبعاد إحصاءات الحماية. إذا لم يتم تحديدها، تتضمن إحصاءات الحماية عدد الموافقة، والتحذير، والخطأ لجميع العناصر الفرعية للتطبيقات: الخدمات، والأقسام، والنسخ المتماثلة، والتطبيقات المنشورة، وحزم الخدمات المنشورة.
واجهة برمجة التطبيقات (API)
لمعرفة حالة حماية التطبيق، قم بإنشاء FabricClient
واستدعاء طريقة GetApplicationHealthAsync على HealthManager الخاص بها.
تحصل التعليمة البرمجية التالية على حماية التطبيق من اسم التطبيق المُحدد (URI):
ApplicationHealth applicationHealth = await fabricClient.HealthManager.GetApplicationHealthAsync(applicationName);
تحصل التعليمة البرمجية التالية على حماية التطبيق من اسم التطبيق المحدد (URI)، باستخدام عوامل التصفية والسياسات المخصصة والمُحددة عبر ApplicationHealthQueryDescription.
HealthStateFilter warningAndErrors = HealthStateFilter.Error | HealthStateFilter.Warning;
var serviceTypePolicy = new ServiceTypeHealthPolicy()
{
MaxPercentUnhealthyPartitionsPerService = 0,
MaxPercentUnhealthyReplicasPerPartition = 5,
MaxPercentUnhealthyServices = 0,
};
var policy = new ApplicationHealthPolicy()
{
ConsiderWarningAsError = false,
DefaultServiceTypeHealthPolicy = serviceTypePolicy,
MaxPercentUnhealthyDeployedApplications = 0,
};
var queryDescription = new ApplicationHealthQueryDescription(applicationName)
{
HealthPolicy = policy,
EventsFilter = new HealthEventsFilter() { HealthStateFilterValue = warningAndErrors },
ServicesFilter = new ServiceHealthStatesFilter() { HealthStateFilterValue = warningAndErrors },
DeployedApplicationsFilter = new DeployedApplicationHealthStatesFilter() { HealthStateFilterValue = warningAndErrors },
};
ApplicationHealth applicationHealth = await fabricClient.HealthManager.GetApplicationHealthAsync(queryDescription);
PowerShell
إن الـ cmdlet المستخدم للحصول على حالة حماية التطبيق هو Get-ServiceFabricApplicationHealth. أولاً، قم بالاتصال بنظام المجموعة باستخدام Connect-ServiceFabricCluster cmdlet.
تُرجع cmdlet التالية حماية تطبيق fabric:/WordCount:
PS D:\ServiceFabric> Get-ServiceFabricApplicationHealth fabric:/WordCount
ApplicationName : fabric:/WordCount
AggregatedHealthState : Warning
UnhealthyEvaluations :
Unhealthy services: 100% (1/1), ServiceType='WordCountServiceType', MaxPercentUnhealthyServices=0%.
Unhealthy service: ServiceName='fabric:/WordCount/WordCountService', AggregatedHealthState='Warning'.
Unhealthy partitions: 100% (1/1), MaxPercentUnhealthyPartitionsPerService=0%.
Unhealthy partition: PartitionId='af2e3e44-a8f8-45ac-9f31-4093eb897600', AggregatedHealthState='Warning'.
Unhealthy event: SourceId='System.FM', Property='State', HealthState='Warning', ConsiderWarningAsError=false.
ServiceHealthStates :
ServiceName : fabric:/WordCount/WordCountWebService
AggregatedHealthState : Ok
ServiceName : fabric:/WordCount/WordCountService
AggregatedHealthState : Warning
DeployedApplicationHealthStates :
ApplicationName : fabric:/WordCount
NodeName : _Node_4
AggregatedHealthState : Ok
ApplicationName : fabric:/WordCount
NodeName : _Node_3
AggregatedHealthState : Ok
ApplicationName : fabric:/WordCount
NodeName : _Node_0
AggregatedHealthState : Ok
ApplicationName : fabric:/WordCount
NodeName : _Node_2
AggregatedHealthState : Ok
ApplicationName : fabric:/WordCount
NodeName : _Node_1
AggregatedHealthState : Ok
HealthEvents :
SourceId : System.CM
Property : State
HealthState : Ok
SequenceNumber : 282
SentAt : 7/13/2017 5:57:05 PM
ReceivedAt : 7/13/2017 5:57:05 PM
TTL : Infinite
Description : Application has been created.
RemoveWhenExpired : False
IsExpired : False
Transitions : Error->Ok = 7/13/2017 5:57:05 PM, LastWarning = 1/1/0001 12:00:00 AM
HealthStatistics :
Replica : 6 Ok, 0 Warning, 0 Error
Partition : 1 Ok, 1 Warning, 0 Error
Service : 1 Ok, 1 Warning, 0 Error
DeployedServicePackage : 6 Ok, 0 Warning, 0 Error
DeployedApplication : 5 Ok, 0 Warning, 0 Error
يمر cmdlet PowerShell التالي في السياسات المخصصة. كما أنه يقوم بتصفية العناصر الفرعية والأحداث.
PS D:\ServiceFabric> Get-ServiceFabricApplicationHealth -ApplicationName fabric:/WordCount -ConsiderWarningAsError $true -ServicesFilter Error -EventsFilter Error -DeployedApplicationsFilter Error -ExcludeHealthStatistics
ApplicationName : fabric:/WordCount
AggregatedHealthState : Error
UnhealthyEvaluations :
Unhealthy services: 100% (1/1), ServiceType='WordCountServiceType', MaxPercentUnhealthyServices=0%.
Unhealthy service: ServiceName='fabric:/WordCount/WordCountService', AggregatedHealthState='Error'.
Unhealthy partitions: 100% (1/1), MaxPercentUnhealthyPartitionsPerService=0%.
Unhealthy partition: PartitionId='af2e3e44-a8f8-45ac-9f31-4093eb897600', AggregatedHealthState='Error'.
Unhealthy event: SourceId='System.FM', Property='State', HealthState='Warning', ConsiderWarningAsError=true.
ServiceHealthStates :
ServiceName : fabric:/WordCount/WordCountService
AggregatedHealthState : Error
DeployedApplicationHealthStates : None
HealthEvents : None
REST
يمكنك الحصول على حالة حماية التطبيق من خلال طلب GET أو طلب POST الذي يتضمن سياسات الحماية الموضحة في النص.
الحصول على حالة حماية الخدمة
تُرجع حالة حماية كيان خدمة. إنه يحتوي على حالات الحماية للقسم. إدخال:
- [مطلوب] اسم الخدمة (URI) الذي يُحدد الخدمة.
- [اختياري] سياسة حماية التطبيق المستخدمة لتجاوز سياسات بيان التطبيق.
- [اختياري] عوامل تصفية الأحداث التي تُحدد الإدخالات ذات الأهمية ويتعين إرجاعها في النتيجة (على سبيل المثال، الأخطاء فقط، أو كل من التحذيرات والأخطاء). يتم استخدام جميع الأحداث والأقسام لتقييم حالة الحماية المُجمّعة للكيان، بغض النظر عن عامل التصفية.
- [اختياري] التصفية لاستبعاد الإحصاءات السليمة. إذا لم يتم تحديده، فستعرض إحصاءات الحماية عدد الموافقات، والتحذيرات، والأخطاء لجميع الأقسام والنسخ المتماثلة للخدمة.
واجهة برمجة التطبيقات (API)
لمعرفة حالة حماية الخدمة من خلال واجهة برمجة التطبيقات، قم بإنشاء FabricClient
واستدعاء GetServiceHealthAsync من HealthManager الخاص بها.
يتعرف المثال التالي على حالة الخدمة من اسم الخدمة المُحدّد (URI):
ServiceHealth serviceHealth = await fabricClient.HealthManager.GetServiceHealthAsync(serviceName);
تحصل التعليمة البرمجية التالية على حالة الخدمة من اسم الخدمة المُحدد (URI)، مع تحديد عوامل التصفية والسياسات المخصصة من خلال ServiceHealthQueryDescription:
var queryDescription = new ServiceHealthQueryDescription(serviceName)
{
EventsFilter = new HealthEventsFilter() { HealthStateFilterValue = HealthStateFilter.All },
PartitionsFilter = new PartitionHealthStatesFilter() { HealthStateFilterValue = HealthStateFilter.Error },
};
ServiceHealth serviceHealth = await fabricClient.HealthManager.GetServiceHealthAsync(queryDescription);
PowerShell
إن الـ cmdlet المستخدم للتعرف على حالة حماية الخدمة هو Get-ServiceFabricServiceHealth. أولاً، قم بالاتصال بنظام المجموعة باستخدام Connect-ServiceFabricCluster cmdlet.
يحصل الـ cmdlet التالي على حالة حماية الخدمة باستخدام سياسات الحماية الافتراضية:
PS D:\ServiceFabric> Get-ServiceFabricServiceHealth -ServiceName fabric:/WordCount/WordCountService
ServiceName : fabric:/WordCount/WordCountService
AggregatedHealthState : Warning
UnhealthyEvaluations :
Unhealthy partitions: 100% (1/1), MaxPercentUnhealthyPartitionsPerService=0%.
Unhealthy partition: PartitionId='af2e3e44-a8f8-45ac-9f31-4093eb897600', AggregatedHealthState='Warning'.
Unhealthy event: SourceId='System.FM', Property='State', HealthState='Warning', ConsiderWarningAsError=false.
PartitionHealthStates :
PartitionId : af2e3e44-a8f8-45ac-9f31-4093eb897600
AggregatedHealthState : Warning
HealthEvents :
SourceId : System.FM
Property : State
HealthState : Ok
SequenceNumber : 15
SentAt : 7/13/2017 5:57:05 PM
ReceivedAt : 7/13/2017 5:57:18 PM
TTL : Infinite
Description : Service has been created.
RemoveWhenExpired : False
IsExpired : False
Transitions : Error->Ok = 7/13/2017 5:57:18 PM, LastWarning = 1/1/0001 12:00:00 AM
HealthStatistics :
Replica : 5 Ok, 0 Warning, 0 Error
Partition : 0 Ok, 1 Warning, 0 Error
REST
يمكنك التعرف على حالة حماية الخدمة من خلال طلب GET أو طلب POST الذي يتضمن سياسات الحماية الموضحة في النص.
تعرف على حالة القسم
تُرجع حالة حماية كيان التقسيم. يتضمن حالات حماية النسخ المتماثلة. إدخال:
- [مطلوب] مُعرّف القسم (GUID) الذي يُحدّد القسم.
- [اختياري] سياسة حماية التطبيق المستخدمة لتجاوز سياسات بيان التطبيق.
- [اختياري] عوامل تصفية الأحداث التي تُحدد الإدخالات ذات الأهمية ويتعين إرجاعها في النتيجة (على سبيل المثال، الأخطاء فقط، أو كل من التحذيرات والأخطاء). يتم استخدام جميع الأحداث والنسخ المتماثلة لتقييم حالة الحماية المُجمّعة للكيان، بغض النظر عن عامل التصفية.
- [اختياري] التصفية لاستبعاد الإحصاءات السليمة. إذا لم يتم تحديدها، فستعرض إحصاءات الحماية عدد النسخ المتماثلة الموجودة في حالات الموافقة، والتحذير، والخطأ.
واجهة برمجة التطبيقات (API)
لمعرفة حالة حماية القسم من خلال واجهة برمجة التطبيقات، قم بإنشاء FabricClient
واستدعاء GetPartitionHealthAsync من HealthManager الخاص بها. لتحديد المعلمات الاختيارية، قم بإنشاء PartitionHealthQueryDescription.
PartitionHealth partitionHealth = await fabricClient.HealthManager.GetPartitionHealthAsync(partitionId);
PowerShell
إن الـ cmdlet المُستخدَّم للتعرف على حالة القسم هو Get-ServiceFabricPartitionHealth. أولاً، قم بالاتصال بنظام المجموعة باستخدام Connect-ServiceFabricCluster cmdlet.
يحصل الـ cmdlet التالي على الحماية لجميع أقسام خدمة fabric:/WordCount/WordCountService وتصفية حالات الحماية للنسخ المتماثلة:
PS D:\ServiceFabric> Get-ServiceFabricPartition fabric:/WordCount/WordCountService | Get-ServiceFabricPartitionHealth -ReplicasFilter None
PartitionId : af2e3e44-a8f8-45ac-9f31-4093eb897600
AggregatedHealthState : Warning
UnhealthyEvaluations :
Unhealthy event: SourceId='System.FM', Property='State', HealthState='Warning', ConsiderWarningAsError=false.
ReplicaHealthStates : None
HealthEvents :
SourceId : System.FM
Property : State
HealthState : Warning
SequenceNumber : 72
SentAt : 7/13/2017 5:57:29 PM
ReceivedAt : 7/13/2017 5:57:48 PM
TTL : Infinite
Description : Partition is below target replica or instance count.
fabric:/WordCount/WordCountService 7 2 af2e3e44-a8f8-45ac-9f31-4093eb897600
N/P RD _Node_2 Up 131444422260002646
N/S RD _Node_4 Up 131444422293113678
N/S RD _Node_3 Up 131444422293113679
N/S RD _Node_1 Up 131444422293118720
N/S RD _Node_0 Up 131444422293118721
(Showing 5 out of 5 replicas. Total available replicas: 5.)
RemoveWhenExpired : False
IsExpired : False
Transitions : Ok->Warning = 7/13/2017 5:57:48 PM, LastError = 1/1/0001 12:00:00 AM
SourceId : System.PLB
Property : ServiceReplicaUnplacedHealth_Secondary_af2e3e44-a8f8-45ac-9f31-4093eb897600
HealthState : Warning
SequenceNumber : 131444445174851664
SentAt : 7/13/2017 6:35:17 PM
ReceivedAt : 7/13/2017 6:35:18 PM
TTL : 00:01:05
Description : The Load Balancer was unable to find a placement for one or more of the Service's Replicas:
Secondary replica could not be placed due to the following constraints and properties:
TargetReplicaSetSize: 7
Placement Constraint: N/A
Parent Service: N/A
Constraint Elimination Sequence:
Existing Secondary Replicas eliminated 4 possible node(s) for placement -- 1/5 node(s) remain.
Existing Primary Replica eliminated 1 possible node(s) for placement -- 0/5 node(s) remain.
Nodes Eliminated By Constraints:
Existing Secondary Replicas -- Nodes with Partition's Existing Secondary Replicas/Instances:
--
FaultDomain:fd:/4 NodeName:_Node_4 NodeType:NodeType4 UpgradeDomain:4 UpgradeDomain: ud:/4 Deactivation Intent/Status: None/None
FaultDomain:fd:/3 NodeName:_Node_3 NodeType:NodeType3 UpgradeDomain:3 UpgradeDomain: ud:/3 Deactivation Intent/Status: None/None
FaultDomain:fd:/1 NodeName:_Node_1 NodeType:NodeType1 UpgradeDomain:1 UpgradeDomain: ud:/1 Deactivation Intent/Status: None/None
FaultDomain:fd:/0 NodeName:_Node_0 NodeType:NodeType0 UpgradeDomain:0 UpgradeDomain: ud:/0 Deactivation Intent/Status: None/None
Existing Primary Replica -- Nodes with Partition's Existing Primary Replica or Secondary Replicas:
--
FaultDomain:fd:/2 NodeName:_Node_2 NodeType:NodeType2 UpgradeDomain:2 UpgradeDomain: ud:/2 Deactivation Intent/Status: None/None
RemoveWhenExpired : True
IsExpired : False
Transitions : Error->Warning = 7/13/2017 5:57:48 PM, LastOk = 1/1/0001 12:00:00 AM
HealthStatistics :
Replica : 5 Ok, 0 Warning, 0 Error
REST
يمكنك معرفة حالة القسم من خلال طلب GET أو طلب POST الذي يتضمن سياسات الحماية الموضحة في النص.
تعرّف على حالة النسخ المتماثلة
إرجاع حالة النسخة المتماثلة من الخدمة ذات الحالة أو حالة مثيل الخدمة دون الحالة. إدخال:
- [مطلوب] مُعرّف القسم (GUID) ومُعرّف النسخة المتماثلة الذي يحدد النسخة المتماثلة.
- [اختياري] معلمات سياسات حماية التطبيق المستخدمة لتجاوز سياسات بيان التطبيق.
- [اختياري] عوامل تصفية الأحداث التي تحدد الإدخالات ذات الأهمية ويجب إرجاعها في النتيجة (على سبيل المثال، الأخطاء فقط، أو كل من التحذيرات والأخطاء). يتم استخدام جميع الأحداث لتقييم حالة الحماية المُجمّعة للكيان، بغض النظر عن عامل التصفية.
واجهة برمجة التطبيقات (API)
لمعرفة حالة حماية النسخ المتماثلة من خلال واجهة برمجة التطبيقات، قم بإنشاء FabricClient
واستدعاء GetReplicaHealthAsync من HealthManager الخاص بها. لتحديد المعلمات المتقدمة، استخدم ReplicaHealthQueryDescription.
ReplicaHealth replicaHealth = await fabricClient.HealthManager.GetReplicaHealthAsync(partitionId, replicaId);
PowerShell
إن الـ cmdlet المُستخدم للحصول على حالة النسخة المتماثلة هو Get-ServiceFabricReplicaHealth. أولاً، قم بالاتصال بنظام المجموعة باستخدام Connect-ServiceFabricCluster cmdlet.
يتعرف الـ cmdlet التالي على حالة النسخة المتماثلة الأساسية لجميع أقسام الخدمة:
PS D:\ServiceFabric> Get-ServiceFabricPartition fabric:/WordCount/WordCountService | Get-ServiceFabricReplica | where {$_.ReplicaRole -eq "Primary"} | Get-ServiceFabricReplicaHealth
PartitionId : af2e3e44-a8f8-45ac-9f31-4093eb897600
ReplicaId : 131444422260002646
AggregatedHealthState : Ok
HealthEvents :
SourceId : System.RA
Property : State
HealthState : Ok
SequenceNumber : 131444422263668344
SentAt : 7/13/2017 5:57:06 PM
ReceivedAt : 7/13/2017 5:57:18 PM
TTL : Infinite
Description : Replica has been created._Node_2
RemoveWhenExpired : False
IsExpired : False
Transitions : Error->Ok = 7/13/2017 5:57:18 PM, LastWarning = 1/1/0001 12:00:00 AM
REST
يمكنك التعرف على حالة حماية النسخ المتماثلة من خلال طلب GET أو طلب POST الذي يتضمن سياسات الحماية الموضحة في النص.
تعرّف على حالة حماية التطبيقات المنشورة
إرجاع حالة التطبيق الذي تم نشره على كيان العُقدة. إنه يتضمن حالات الحماية لحزمة الخدمة المنشورة. إدخال:
- [مطلوب] اسم التطبيق (URI) واسم العُقدة (سلسلة) التي تحدد التطبيق الذي تم نشره.
- [اختياري] سياسة حماية التطبيق المستخدمة لتجاوز سياسات بيان التطبيق.
- [اختياري] عوامل تصفية للأحداث، والخدمات، وحزم الخدمات المنشورة التي تُحدد الإدخالات ذات الأهمية ويتعين إرجاعها في النتيجة (على سبيل المثال، الأخطاء فقط، أو كل من التحذيرات والأخطاء). يتم استخدام جميع الأحداث وحزم الخدمات المنشورة لتقييم حالة الحماية المُجمّعة للكيان، بغض النظر عن عامل التصفية.
- [اختياري] التصفية لاستبعاد الإحصاءات السليمة. إذا لم يتم تحديدها، فستعرض إحصاءات الحماية عدد حزم الخدمات المنشورة في حالات الموافقات، والتحذيرات، والأخطاء.
واجهة برمجة التطبيقات (API)
للتعرّف على حالة التطبيق الذي تم نشره على العقدة من خلال واجهة برمجة التطبيقات، قم بإنشاءFabricClient
واستدعاء طريقة GetDeployedApplicationHealthAsync من HealthManager الخاص به. لتحديد المعلمات الاختيارية، استخدم DeployedApplicationHealthQueryDescription.
DeployedApplicationHealth health = await fabricClient.HealthManager.GetDeployedApplicationHealthAsync(
new DeployedApplicationHealthQueryDescription(applicationName, nodeName));
PowerShell
إن الـ cmdlet المُستخدم لمعرفة حماية التطبيق المنشور هو Get-ServiceFabricDeployedApplicationHealth. أولاً، قم بالاتصال بنظام المجموعة باستخدام Connect-ServiceFabricCluster cmdlet. لمعرفة مكان نشر تطبيق، قم بتشغيل Get-ServiceFabricApplicationHealth وأنظر إلى العناصر الفرعية للتطبيق التي تم نشرها.
يتعرّف الـ cmdlet التالي على حالة التطبيق fabric:/WordCount الذي تم نشره على _Node_2.
PS D:\ServiceFabric> Get-ServiceFabricDeployedApplicationHealth -ApplicationName fabric:/WordCount -NodeName _Node_0
ApplicationName : fabric:/WordCount
NodeName : _Node_0
AggregatedHealthState : Ok
DeployedServicePackageHealthStates :
ServiceManifestName : WordCountServicePkg
ServicePackageActivationId :
NodeName : _Node_0
AggregatedHealthState : Ok
ServiceManifestName : WordCountWebServicePkg
ServicePackageActivationId :
NodeName : _Node_0
AggregatedHealthState : Ok
HealthEvents :
SourceId : System.Hosting
Property : Activation
HealthState : Ok
SequenceNumber : 131444422261848308
SentAt : 7/13/2017 5:57:06 PM
ReceivedAt : 7/13/2017 5:57:17 PM
TTL : Infinite
Description : The application was activated successfully.
RemoveWhenExpired : False
IsExpired : False
Transitions : Error->Ok = 7/13/2017 5:57:17 PM, LastWarning = 1/1/0001 12:00:00 AM
HealthStatistics :
DeployedServicePackage : 2 Ok, 0 Warning, 0 Error
REST
يمكنك التعرف على حالة حماية التطبيق المنشور من خلال طلب GET أو طلب POST الذي يتضمن سياسات الحماية الموضحة في النص.
تعرّف على حالة حماية حزمة الخدمات المنشورة
ترجع حالة حماية لكيان حزمة الخدمات المنشورة. إدخال:
- [مطلوب] اسم التطبيق (URI)، واسم العُقدة (السلسلة)، واسم بيان الخدمة (السلسلة)، التي تُحدّد حزمة الخدمات التي تم نشرها.
- [اختياري] سياسة حماية التطبيق المستخدمة لتجاوز سياسات بيان التطبيق.
- [اختياري] عوامل تصفية الأحداث التي تحدد الإدخالات ذات الأهمية ويجب إرجاعها في النتيجة (على سبيل المثال، الأخطاء فقط، أو كل من التحذيرات والأخطاء). يتم استخدام جميع الأحداث لتقييم حالة الحماية المُجمّعة للكيان، بغض النظر عن عامل التصفية.
واجهة برمجة التطبيقات (API)
لمعرفة حالة حماية حزمة الخدمات المنشورة من خلال واجهة برمجة التطبيقات، قم بإنشاء FabricClient
واستدعاء أسلوب GetDeployedServicePackageHealthAsync من HealthManager الخاص به. لتحديد المعلمات الاختيارية، استخدم DeployedServicePackageHealthQueryDescription.
DeployedServicePackageHealth health = await fabricClient.HealthManager.GetDeployedServicePackageHealthAsync(
new DeployedServicePackageHealthQueryDescription(applicationName, nodeName, serviceManifestName));
PowerShell
إن الـ cmdlet المستخدم للحصول على حالة حماية حزمة الخدمات المنشورة هي Get-ServiceFabricDeployedServicePackageHealth. أولاً، قم بالاتصال بنظام المجموعة باستخدام Connect-ServiceFabricCluster cmdlet. لمعرفة مكان نشر تطبيق، قم بتشغيل Get-ServiceFabricApplicationHealth وأنظر في التطبيقات التي تم نشرها. لمعرفة أي حزم الخدمات الموجودة في التطبيق، راجع العناصر الفرعية لحزمة الخدمات التي تم نشرها في إخراج Get-ServiceFabricDeployedApplicationHealth.
يحصل الـ cmdlet التالي على حالة حزمة خدمة WordCountServicePkg الخاصة بتطبيق fabric:/WordCount الذي تم نشره على _Node_2. لدى الكيان تقارير System.Hosting لتنشيط حزمة الخدمة ونقطة الدخول بنجاح، والتسجيل نوع الخدمة بنجاح.
PS D:\ServiceFabric> Get-ServiceFabricDeployedApplication -ApplicationName fabric:/WordCount -NodeName _Node_2 | Get-ServiceFabricDeployedServicePackageHealth -ServiceManifestName WordCountServicePkg
ApplicationName : fabric:/WordCount
ServiceManifestName : WordCountServicePkg
ServicePackageActivationId :
NodeName : _Node_2
AggregatedHealthState : Ok
HealthEvents :
SourceId : System.Hosting
Property : Activation
HealthState : Ok
SequenceNumber : 131444422267693359
SentAt : 7/13/2017 5:57:06 PM
ReceivedAt : 7/13/2017 5:57:18 PM
TTL : Infinite
Description : The ServicePackage was activated successfully.
RemoveWhenExpired : False
IsExpired : False
Transitions : Error->Ok = 7/13/2017 5:57:18 PM, LastWarning = 1/1/0001 12:00:00 AM
SourceId : System.Hosting
Property : CodePackageActivation:Code:EntryPoint
HealthState : Ok
SequenceNumber : 131444422267903345
SentAt : 7/13/2017 5:57:06 PM
ReceivedAt : 7/13/2017 5:57:18 PM
TTL : Infinite
Description : The CodePackage was activated successfully.
RemoveWhenExpired : False
IsExpired : False
Transitions : Error->Ok = 7/13/2017 5:57:18 PM, LastWarning = 1/1/0001 12:00:00 AM
SourceId : System.Hosting
Property : ServiceTypeRegistration:WordCountServiceType
HealthState : Ok
SequenceNumber : 131444422272458374
SentAt : 7/13/2017 5:57:07 PM
ReceivedAt : 7/13/2017 5:57:18 PM
TTL : Infinite
Description : The ServiceType was registered successfully.
RemoveWhenExpired : False
IsExpired : False
Transitions : Error->Ok = 7/13/2017 5:57:18 PM, LastWarning = 1/1/0001 12:00:00 AM
REST
يمكنك الحصول على حالة حماية حزمة الخدمات المنشور من خلال طلب GET أو طلب POST الذي يتضمن سياسات الحماية الموضحة في النص.
استعلامات عن مجموعة الحماية
يمكن للاستعلامات عن مجموعة الحماية إرجاع العناصر الفرعية لنظام المجموعة مُتعددة المستويات (بشكل متكرر)، حسب عوامل تصفية الإدخال. وهو يدعم عوامل التصفية المتقدمة التي تسمح بالكثير من المرونة في اختيار العناصر الفرعية التي يتم إرجاعهم. يمكن لعوامل التصفية تحديد العناصر الفرعية بواسطة المُعرّف الفريد أو بواسطة معرّفات المجموعة الأخرى وحالات الحماية أو أيهما. بشكل افتراضي، لا يتم تضمين أي عناصر فرعية، على عكس أوامر الحماية التي تتضمن دائمًا العناصر الفرعية من المستوى الأول.
تقوم الاستعلامات الحماية بإرجاع العناصر الفرعية من المستوى الأول فقط للكيان المحدد حسب عوامل التصفية المطلوبة. للحصول على العناصر الفرعية للعناصر الفرعية، يجب عليك استدعاء واجهات برمجة التطبيقات الإضافية السليمة لكل كيان ذي أهمية. وعلى غرار ذلك، للحصول على حالة الحماية للكيانات معينة، يجب عليك استدعاء واجهة برمجة تطبيقات واحدة سليمة لكل كيان مطلوب. تتيح لك التصفية المتقدمة للاستعلام عن المجموعة طلب عناصر متعددة ذات أهمية في الاستعلام الواحد، مما يقلل من حجم الرسالة وعدد الرسائل.
تتمثل قيمة استعلام المجموعة في أنه يمكنك معرفة حالة الحماية لمزيد من كيانات المجموعة (من المحتمل أن تكون جميع كيانات الكتلة التي تبدأ من الجذر المطلوب) في استدعاء واحد. يمكنك التعبير عن الاستعلام المعقد عن حماية مثل:
- إرجاع التطبيقات الخاطئة فقط، وبالنسبة لهذه التطبيقات قم بتضمين جميع الخدمات في حالة تحذير أو خطأ. بالنسبة للخدمات المرتجعة، قم بتضمين جميع الأقسام.
- إرجاع حالة أربعة تطبيقات فقط، مُحددة بأسمائهم.
- إرجاع حالة التطبيقات من نوع التطبيق المطلوب فقط.
- إرجاع جميع الكيانات المنشورة على العقدة. إرجاع جميع التطبيقات، وجميع التطبيقات المنشورة على العُقدة المُحدّدة وجميع حزم الخدمات المنشورة على تلك العُقدة.
- إرجاع جميع النسخ المتماثلة في حالة خطأ. إرجاع جميع التطبيقات، والخدمات، والأقسام، والنسخ المتماثلة في حالة خطأ فقط.
- إرجاع جميع التطبيقات. بالنسبة للخدمة المُحدّدة، قم بتضمين جميع الأقسام.
حاليًا، يتم الكشف فقط عن الاستعلام عن مجموعة الحماية لكيان نظام المجموعة. تُرجِع مجموعة حالة الكتلة، التي تحتوي على:
- حالة الحماية المُجمّعة لنظام المجموعة.
- قائمة مجموعة الحماية للعُقد التي تراعي عوامل تصفية الإدخال.
- قائمة مجموعة الحماية للتطبيقات التي تراعي عوامل تصفية الإدخال. تحتوي كل مجموعة من مجموعات الحماية للتطبيق على قائمة مجموعات تحتوي على جميع الخدمات التي تراعي عوامل تصفية الإدخال وقائمة مجموعات تتضمن جميع التطبيقات المنشورة التي تراعي عوامل التصفية. ينطبق الشيء نفسه على العناصر الفرعية للخدمات والتطبيقات المنشورة. وبهذه الطريقة، يحتمل إرجاع جميع الكيانات في المجموعة إذا طُلب منها ذلك، على شكل هرمي.
الاستعلام عن مجموعة حماية الكتلة
تُرجع حماية كيان المجموعة وتحتوي على مجموعة الحماية الهرمية للعناصر الفرعية المطلوبة. إدخال:
- [اختياري] تُستخدم سياسة حماية نظام المجموعة لتقييم العُقد وأحداث نظام المجموعة.
- [اختياري] مخطط سياسة الصحة للتطبيق، مع استخدام سياسات الصحة لتجاوز سياسات بيان التطبيق.
- [اختياري] عوامل تصفية العُقد والتطبيقات التي تحدد الإدخالات ذات الأهمية ويجب إرجاعها في النتيجة. وتكون عوامل التصفية خاصة بالكيان/مجموعة من الكيانات أو تنطبق على جميع الكيانات على هذا المستوى. يمكن أن تحتوي قائمة عوامل التصفية على عامل تصفية واحد عام و/أو عوامل تصفية لمعرفات محددة لكيانات دقيقة يتم إرجاعها بواسطة الاستعلام. إذا كانت فارغة، فلن يتم إرجاع العناصر الفرعية بشكل افتراضي. أقرأ المزيد حول عوامل التصفية في NodeHealthStateFilter و ApplicationHealthStateFilter. يمكن لعوامل تصفية التطبيق تحديد عوامل تصفية متقدمة للعناصر الفرعية بشكل متكرر.
تتضمن نتيجة المجموعة العناصر الفرعية التي تراعي عوامل التصفية.
حاليًا، لا يرجع الاستعلام عن المجموعة تقييمات غير سليمة أو أحداث الكيان. يمكن الحصول على هذه المعلومات الإضافية باستخدام الاستعلام الحالي عن حماية المجموعة.
واجهة برمجة التطبيقات (API)
لمعرفة حالة المجموعة، قم بإنشاء FabricClient
واستدعاء أسلوب GetClusterHealthChunkAsync على HealthManagerالخاص به. يمكنك تمرير ClusterHealthQueryDescription لوصف سياسات الحماية وعوامل التصفية المتقدمة.
تحصل التعليمة البرمجية التالية على مجموعة الحماية لنظام المجموعة باستخدام عوامل تصفية متقدمة.
var queryDescription = new ClusterHealthChunkQueryDescription();
queryDescription.ApplicationFilters.Add(new ApplicationHealthStateFilter()
{
// Return applications only if they are in error
HealthStateFilter = HealthStateFilter.Error
});
// Return all replicas
var wordCountServiceReplicaFilter = new ReplicaHealthStateFilter()
{
HealthStateFilter = HealthStateFilter.All
};
// Return all replicas and all partitions
var wordCountServicePartitionFilter = new PartitionHealthStateFilter()
{
HealthStateFilter = HealthStateFilter.All
};
wordCountServicePartitionFilter.ReplicaFilters.Add(wordCountServiceReplicaFilter);
// For specific service, return all partitions and all replicas
var wordCountServiceFilter = new ServiceHealthStateFilter()
{
ServiceNameFilter = new Uri("fabric:/WordCount/WordCountService"),
};
wordCountServiceFilter.PartitionFilters.Add(wordCountServicePartitionFilter);
// Application filter: for specific application, return no services except the ones of interest
var wordCountApplicationFilter = new ApplicationHealthStateFilter()
{
// Always return fabric:/WordCount application
ApplicationNameFilter = new Uri("fabric:/WordCount"),
};
wordCountApplicationFilter.ServiceFilters.Add(wordCountServiceFilter);
queryDescription.ApplicationFilters.Add(wordCountApplicationFilter);
var result = await fabricClient.HealthManager.GetClusterHealthChunkAsync(queryDescription);
PowerShell
إن الـ cmdlet المستخدم للحصول على حماية نظام المجموعة هو Get-ServiceFabricClusterChunkHealth. أولاً، قم بالاتصال بنظام المجموعة باستخدام Connect-ServiceFabricCluster cmdlet.
تحصل التعليمة البرمجية التالية على العُقد فقط إذا كانت في حالة خطأ باستثناء عقدة معينة، التي يتعين إرجاعها دائمًا.
PS D:\ServiceFabric> $errorFilter = [System.Fabric.Health.HealthStateFilter]::Error;
$allFilter = [System.Fabric.Health.HealthStateFilter]::All;
$nodeFilter1 = New-Object System.Fabric.Health.NodeHealthStateFilter -Property @{HealthStateFilter=$errorFilter}
$nodeFilter2 = New-Object System.Fabric.Health.NodeHealthStateFilter -Property @{NodeNameFilter="_Node_1";HealthStateFilter=$allFilter}
# Create node filter list that will be passed in the cmdlet
$nodeFilters = New-Object System.Collections.Generic.List[System.Fabric.Health.NodeHealthStateFilter]
$nodeFilters.Add($nodeFilter1)
$nodeFilters.Add($nodeFilter2)
Get-ServiceFabricClusterHealthChunk -NodeFilters $nodeFilters
HealthState : Warning
NodeHealthStateChunks :
TotalCount : 1
NodeName : _Node_1
HealthState : Ok
ApplicationHealthStateChunks : None
يحصل الـ cmdlet التالي على مجموعة الكتل باستخدام عوامل تصفية التطبيق.
PS D:\ServiceFabric> $errorFilter = [System.Fabric.Health.HealthStateFilter]::Error;
$allFilter = [System.Fabric.Health.HealthStateFilter]::All;
# All replicas
$replicaFilter = New-Object System.Fabric.Health.ReplicaHealthStateFilter -Property @{HealthStateFilter=$allFilter}
# All partitions
$partitionFilter = New-Object System.Fabric.Health.PartitionHealthStateFilter -Property @{HealthStateFilter=$allFilter}
$partitionFilter.ReplicaFilters.Add($replicaFilter)
# For WordCountService, return all partitions and all replicas
$svcFilter1 = New-Object System.Fabric.Health.ServiceHealthStateFilter -Property @{ServiceNameFilter="fabric:/WordCount/WordCountService"}
$svcFilter1.PartitionFilters.Add($partitionFilter)
$svcFilter2 = New-Object System.Fabric.Health.ServiceHealthStateFilter -Property @{HealthStateFilter=$errorFilter}
$appFilter = New-Object System.Fabric.Health.ApplicationHealthStateFilter -Property @{ApplicationNameFilter="fabric:/WordCount"}
$appFilter.ServiceFilters.Add($svcFilter1)
$appFilter.ServiceFilters.Add($svcFilter2)
$appFilters = New-Object System.Collections.Generic.List[System.Fabric.Health.ApplicationHealthStateFilter]
$appFilters.Add($appFilter)
Get-ServiceFabricClusterHealthChunk -ApplicationFilters $appFilters
HealthState : Error
NodeHealthStateChunks : None
ApplicationHealthStateChunks :
TotalCount : 1
ApplicationName : fabric:/WordCount
ApplicationTypeName : WordCount
HealthState : Error
ServiceHealthStateChunks :
TotalCount : 1
ServiceName : fabric:/WordCount/WordCountService
HealthState : Error
PartitionHealthStateChunks :
TotalCount : 1
PartitionId : af2e3e44-a8f8-45ac-9f31-4093eb897600
HealthState : Error
ReplicaHealthStateChunks :
TotalCount : 5
ReplicaOrInstanceId : 131444422293118720
HealthState : Ok
ReplicaOrInstanceId : 131444422293118721
HealthState : Ok
ReplicaOrInstanceId : 131444422293113678
HealthState : Ok
ReplicaOrInstanceId : 131444422293113679
HealthState : Ok
ReplicaOrInstanceId : 131444422260002646
HealthState : Error
ترجع الـ cmdlet التالية جميع الكيانات المنشورة على العُقدة.
PS D:\ServiceFabric> $errorFilter = [System.Fabric.Health.HealthStateFilter]::Error;
$allFilter = [System.Fabric.Health.HealthStateFilter]::All;
$dspFilter = New-Object System.Fabric.Health.DeployedServicePackageHealthStateFilter -Property @{HealthStateFilter=$allFilter}
$daFilter = New-Object System.Fabric.Health.DeployedApplicationHealthStateFilter -Property @{HealthStateFilter=$allFilter;NodeNameFilter="_Node_2"}
$daFilter.DeployedServicePackageFilters.Add($dspFilter)
$appFilter = New-Object System.Fabric.Health.ApplicationHealthStateFilter -Property @{HealthStateFilter=$allFilter}
$appFilter.DeployedApplicationFilters.Add($daFilter)
$appFilters = New-Object System.Collections.Generic.List[System.Fabric.Health.ApplicationHealthStateFilter]
$appFilters.Add($appFilter)
Get-ServiceFabricClusterHealthChunk -ApplicationFilters $appFilters
HealthState : Error
NodeHealthStateChunks : None
ApplicationHealthStateChunks :
TotalCount : 2
ApplicationName : fabric:/System
HealthState : Ok
DeployedApplicationHealthStateChunks :
TotalCount : 1
NodeName : _Node_2
HealthState : Ok
DeployedServicePackageHealthStateChunks :
TotalCount : 1
ServiceManifestName : FAS
ServicePackageActivationId :
HealthState : Ok
ApplicationName : fabric:/WordCount
ApplicationTypeName : WordCount
HealthState : Error
DeployedApplicationHealthStateChunks :
TotalCount : 1
NodeName : _Node_2
HealthState : Ok
DeployedServicePackageHealthStateChunks :
TotalCount : 1
ServiceManifestName : WordCountServicePkg
ServicePackageActivationId :
HealthState : Ok
REST
يمكنك معرفة مجموعة حماية الكتلة من خلال طلب GET أو طلب POST الذي يتضمن سياسات الحماية الموضحة في النص.
الاستعلامات العامة
تُرجع الاستعلامات العامة قائمة بكيانات تصميم الخدمة من نوعٍ مُحدّد. يتم كشفها من خلال واجهة برمجة التطبيقات (عبر الطرق الموجودة على FabricClient.QueryManager)، و PowerShell cmdlets، و REST. تقوم هذه الاستعلامات بتجميع الاستعلامات الفرعية من مكونات متعددة. إحداها هو المتجر الصحي، الذي يقوم بتعبئة حالة الحماية المُجمّعة لكل نتيجة من نتائج الاستعلام.
ملاحظة
تُرجع الاستعلامات العامة حالة الحماية المُجمّعة للكيان ولا تحتوي على بيانات سليمة منسقة. إذا لم يكن الكيان سليم، يمكنك متابعة استعلامات الحماية للحصول على جميع معلوماته السليمة، بما في ذلك الأحداث، وحالات حماية العناصر الفرعية، والتقييمات غير السليمة.
إذا كانت الاستعلامات العامة تُرجع حالة حماية غير معروفة للكيان، فمن المحتمل ألا يحتوي متجر الحماية على بيانات كاملة حول الكيان. من المحتمل أيضًا أن الاستعلام الفرعي عن متجر الحماية لم يكن ناجحًا (على سبيل المثال، حدث خطأ في الاتصال، أو تم تقييد متجر الحماية). متابعة استعلام الحماية للكيان. إذا واجه الاستعلام الفرعي أخطاء عابرة، مثل مشكلات الشبكة، فقد ينجح استعلام المتابعة. قد يمنحك أيضًا المزيد من التفاصيل من متجر الحماية حول سبب عدم كشف الكيان.
الاستعلامات التي تحتوي على HealthState للكيانات هي:
- قائمة العُقد: إرجاع عُقد في القائمة الموجودة في نظام المجموعة (مُقسم إلى صفحات).
- واجهة برمجة التطبيقات: FabricClient.QueryClient.GetNodeListAsync
- PowerShell: Get-ServiceFabricNode
- قائمة التطبيقات: إرجاع قائمة التطبيقات في نظام المجموعة (مقسم إلى صفحات).
- API: FabricClient.QueryClient.GetApplicationListAsync
- PowerShell: Get-ServiceFabricApplication
- قائمة الخدمات: إرجاع قائمة الخدمات في التطبيق (مقسم إلى صفحات).
- API: FabricClient.QueryClient.GetServiceListAsync
- PowerShell: Get-ServiceFabricService
- قائمة الأقسام: إرجاع قائمة الأقسام في الخدمة (مقسم إلى صفحات).
- API: FabricClient.QueryClient.GetPartitionListAsync
- PowerShell: Get-ServiceFabricPartition
- قائمة النسخ المتماثلة: إرجاع قائمة النسخ المتماثلة في القسم (مُقسّم إلى صفحات).
- API: FabricClient.QueryClient.GetReplicaListAsync
- PowerShell: Get-ServiceFabricReplica
- قائمة التطبيقات المنشورة: إرجاع قائمة التطبيقات المنشورة على العقُدة.
- API: FabricClient.QueryClient.GetDeployedApplicationListAsync
- PowerShell: Get-ServiceFabricDeployedApplication
- قائمة حزم الخدمات المنشورة: إرجاع قائمة حزم الخدمات في التطبيق المنشور.
- API: FabricClient.QueryClient.GetDeployedServicePackageListAsync
- PowerShell: Get-ServiceFabricDeployedApplication
ملاحظة
ترجع بعض الاستعلامات النتائج المصنفة في الصفحات. تُرجع هذه الاستعلامات قائمة مشتقة من PagedListT<T>. إذا كانت النتائج لا تتناسب مع رسالة، يتم إرجاع صفحة فقط وسلسلة ContinuationToken الذي يتتبع مكان توقف قائمة التعداد. استمر في استدعاء الاستعلام نفسه ومرّر الرمز المميز للاستمرار من الاستعلام السابق للحصول على النتائج التالية.
أمثلة
تتعرف التعليمة البرمجية التالية على التطبيقات غير السليمة في نظام المجموعة:
var applications = fabricClient.QueryManager.GetApplicationListAsync().Result.Where(
app => app.HealthState == HealthState.Error);
يحصل الـ cmdlet التالي على تفاصيل التطبيق الخاصة بتطبيق fabric:/WordCount. لاحظ أن الحالة الحماية في حالة تحذير.
PS C:\> Get-ServiceFabricApplication -ApplicationName fabric:/WordCount
ApplicationName : fabric:/WordCount
ApplicationTypeName : WordCount
ApplicationTypeVersion : 1.0.0
ApplicationStatus : Ready
HealthState : Warning
ApplicationParameters : { "WordCountWebService_InstanceCount" = "1";
"_WFDebugParams_" = "[{"ServiceManifestName":"WordCountWebServicePkg","CodePackageName":"Code","EntryPointType":"Main","Debug
ExePath":"C:\\Program Files (x86)\\Microsoft Visual Studio
14.0\\Common7\\Packages\\Debugger\\VsDebugLaunchNotify.exe","DebugArguments":" {74f7e5d5-71a9-47e2-a8cd-1878ec4734f1} -p
[ProcessId] -tid [ThreadId]","EnvironmentBlock":"_NO_DEBUG_HEAP=1\u0000"},{"ServiceManifestName":"WordCountServicePkg","CodeP
ackageName":"Code","EntryPointType":"Main","DebugExePath":"C:\\Program Files (x86)\\Microsoft Visual Studio
14.0\\Common7\\Packages\\Debugger\\VsDebugLaunchNotify.exe","DebugArguments":" {2ab462e6-e0d1-4fda-a844-972f561fe751} -p
[ProcessId] -tid [ThreadId]","EnvironmentBlock":"_NO_DEBUG_HEAP=1\u0000"}]" }
يحصل الـ cmdlet التالي على الخدمات التي في حالة خطأ:
PS D:\ServiceFabric> Get-ServiceFabricApplication | Get-ServiceFabricService | where {$_.HealthState -eq "Error"}
ServiceName : fabric:/WordCount/WordCountService
ServiceKind : Stateful
ServiceTypeName : WordCountServiceType
IsServiceGroup : False
ServiceManifestVersion : 1.0.0
HasPersistedState : True
ServiceStatus : Active
HealthState : Error
ترقيات نظام المجموعة والتطبيقات
أثناء الترقية المراقِبة للمجموعة والتطبيق، تتحقق Service Fabric من الحماية لضمان بقاء كل شيء سليم. إذا كان الكيان غير سليم كما تم تقييمه باستخدام سياسات الحماية التي تم تكوينها، تُطبّق الترقية سياسات خاصة بالترقية لتحديد الإجراء التالي. قد يتم إيقاف الترقية مؤقتًا للسماح بتفاعل المستخدم (مثل إصلاح شروط الخطأ أو تغيير السياسات)، أو قد تعود تلقائيًا إلى الإصدار السابق الجيد.
أثناء ترقية نظام المجموعة، يمكنك الحصول على حالة ترقية نظام المجموعة. تتضمن حالة الترقية تقييمات غير سليمة، وتشير إلى ما هو غير سليم في نظام المجموعة. إذا تم التراجع عن الترقية بسبب مشاكل في الحماية، فإن حالة الترقية تتذكر آخر الأسباب غير السليمة. يمكن أن تساعد هذه المعلومات المسؤولين في التحقيق في الخطأ الذي حدث بعد تراجع الترقية أو توقفها.
وبالمثل، أثناء ترقية التطبيق، يتم تضمين أي تقييمات غير سليمة في حالة ترقية التطبيق.
يوضح ما يلي حالة ترقية تطبيق fabric:/WordCount المُعدّل. أبلغت هيئة الرقابة عن خطأ في إحدى النسخ المتماثلة. يتم التراجع عن الترقية بسبب عدم مراعاة فحوصات الحماية.
PS C:\> Get-ServiceFabricApplicationUpgrade fabric:/WordCount
ApplicationName : fabric:/WordCount
ApplicationTypeName : WordCount
TargetApplicationTypeVersion : 1.0.0.0
ApplicationParameters : {}
StartTimestampUtc : 4/21/2017 5:23:26 PM
FailureTimestampUtc : 4/21/2017 5:23:37 PM
FailureReason : HealthCheck
UpgradeState : RollingBackInProgress
UpgradeDuration : 00:00:23
CurrentUpgradeDomainDuration : 00:00:00
CurrentUpgradeDomainProgress : UD1
NodeName : _Node_1
UpgradePhase : Upgrading
NodeName : _Node_2
UpgradePhase : Upgrading
NodeName : _Node_3
UpgradePhase : PreUpgradeSafetyCheck
PendingSafetyChecks :
EnsurePartitionQuorum - PartitionId: 30db5be6-4e20-4698-8185-4bd7ca744020
NextUpgradeDomain : UD2
UpgradeDomainsStatus : { "UD1" = "Completed";
"UD2" = "Pending";
"UD3" = "Pending";
"UD4" = "Pending" }
UnhealthyEvaluations :
Unhealthy services: 100% (1/1), ServiceType='WordCountServiceType', MaxPercentUnhealthyServices=0%.
Unhealthy service: ServiceName='fabric:/WordCount/WordCountService', AggregatedHealthState='Error'.
Unhealthy partitions: 100% (1/1), MaxPercentUnhealthyPartitionsPerService=0%.
Unhealthy partition: PartitionId='a1f83a35-d6bf-4d39-b90d-28d15f39599b', AggregatedHealthState='Error'.
Unhealthy replicas: 20% (1/5), MaxPercentUnhealthyReplicasPerPartition=0%.
Unhealthy replica: PartitionId='a1f83a35-d6bf-4d39-b90d-28d15f39599b',
ReplicaOrInstanceId='131031502346844058', AggregatedHealthState='Error'.
Error event: SourceId='DiskWatcher', Property='Disk'.
UpgradeKind : Rolling
RollingUpgradeMode : UnmonitoredAuto
ForceRestart : False
UpgradeReplicaSetCheckTimeout : 00:15:00
أقرأ المزيد حول ترقية تطبيق Service Fabric.
استخدام تقييمات الحماية لاستكشاف الأخطاء وإصلاحها
كلما كانت هناك مشكلة في نظام المجموعة أو أحد التطبيقات، أنظر إلى حالة المجموعة أو التطبيق لتحديد الخطأ. تُقدّم التقييمات غير السليمة تفاصيل حول سبب الحالة غير السليمة. إذا كنت بحاجة إلى ذلك، يمكنك التعمق في الكيانات الفرعية غير السليمة لتحديد السبب الجذري.
على سبيل المثال، فكّر في تطبيقٍ غير سليم نظرًا لوجود تقرير بخطأ في أحد النسخ المتماثلة الخاصة به. يوضح cmdlet PowerShell التالي التقييمات غير السليمة:
PS D:\ServiceFabric> Get-ServiceFabricApplicationHealth fabric:/WordCount -EventsFilter None -ServicesFilter None -DeployedApplicationsFilter None -ExcludeHealthStatistics
ApplicationName : fabric:/WordCount
AggregatedHealthState : Error
UnhealthyEvaluations :
Unhealthy services: 100% (1/1), ServiceType='WordCountServiceType', MaxPercentUnhealthyServices=0%.
Unhealthy service: ServiceName='fabric:/WordCount/WordCountService', AggregatedHealthState='Error'.
Unhealthy partitions: 100% (1/1), MaxPercentUnhealthyPartitionsPerService=0%.
Unhealthy partition: PartitionId='af2e3e44-a8f8-45ac-9f31-4093eb897600', AggregatedHealthState='Error'.
Unhealthy replicas: 20% (1/5), MaxPercentUnhealthyReplicasPerPartition=0%.
Unhealthy replica: PartitionId='af2e3e44-a8f8-45ac-9f31-4093eb897600', ReplicaOrInstanceId='131444422260002646', AggregatedHealthState='Error'.
Error event: SourceId='MyWatchdog', Property='Memory'.
ServiceHealthStates : None
DeployedApplicationHealthStates : None
HealthEvents : None
يمكنك الاطلاع على النسخة المتماثلة للحصول على مزيد من المعلومات:
PS D:\ServiceFabric> Get-ServiceFabricReplicaHealth -ReplicaOrInstanceId 131444422260002646 -PartitionId af2e3e44-a8f8-45ac-9f31-4093eb897600
PartitionId : af2e3e44-a8f8-45ac-9f31-4093eb897600
ReplicaId : 131444422260002646
AggregatedHealthState : Error
UnhealthyEvaluations :
Error event: SourceId='MyWatchdog', Property='Memory'.
HealthEvents :
SourceId : System.RA
Property : State
HealthState : Ok
SequenceNumber : 131444422263668344
SentAt : 7/13/2017 5:57:06 PM
ReceivedAt : 7/13/2017 5:57:18 PM
TTL : Infinite
Description : Replica has been created._Node_2
RemoveWhenExpired : False
IsExpired : False
Transitions : Error->Ok = 7/13/2017 5:57:18 PM, LastWarning = 1/1/0001 12:00:00 AM
SourceId : MyWatchdog
Property : Memory
HealthState : Error
SequenceNumber : 131444451657749403
SentAt : 7/13/2017 6:46:05 PM
ReceivedAt : 7/13/2017 6:46:05 PM
TTL : Infinite
Description :
RemoveWhenExpired : False
IsExpired : False
Transitions : Warning->Error = 7/13/2017 6:46:05 PM, LastOk = 1/1/0001 12:00:00 AM
ملاحظة
تُظهر التقييمات غير السليمة السبب الأول لنتيجة تقييم الكيان في حالة الحماية الحالية. قد تكون هناك العديد من الأحداث الأخرى التي تؤدي إلى هذه الحالة، لكنها لا تظهر في التقييمات. للحصول على مزيد من المعلومات، انتقل إلى الكيانات السليمة لمعرفة جميع التقارير غير السليمة في نظام المجموعة.
الخطوات التالية
استخدام تقارير حماية النظام لاستكشاف الأخطاء وإصلاحها
إضافة تقارير مخصصة لحماية «تصميم الخدمة»
كيفية الإبلاغ عن حالة الخدمة والتحقق منها
الملاحظات
https://aka.ms/ContentUserFeedback.
قريبًا: خلال عام 2024، سنتخلص تدريجيًا من GitHub Issues بوصفها آلية إرسال ملاحظات للمحتوى ونستبدلها بنظام ملاحظات جديد. لمزيد من المعلومات، راجعإرسال الملاحظات وعرضها المتعلقة بـ