Melihat laporan kesehatan Service Fabric
Azure Service Fabric memperkenalkan model kesehatan dengan entitas kesehatan di mana komponen sistem dan pengawas dapat melaporkan kondisi lokal yang mereka pantau. Penyimpanan kesehatan mengagregasi semua data kesehatan untuk menentukan apakah entitas sehat.
Kluster ini secara otomatis diisi dengan laporan kesehatan yang dikirim oleh komponen sistem. Baca selengkapnya di Gunakan laporan kesehatan sistem untuk memecahkan masalah.
Service Fabric menyediakan beberapa cara untuk mendapatkan kesehatan agregat entitas:
- Service Fabric Explorer atau alat visualisasi lainnya
- Kueri kesehatan (melalui PowerShell, API, atau REST)
- Kueri umum yang mengembalikan daftar entitas yang memiliki kesehatan sebagai salah satu properti (melalui PowerShell, CLI, API, atau REST)
Untuk menunjukkan opsi ini, mari gunakan kluster lokal dengan lima node dan aplikasi fabric:/WordCount. Aplikasi fabric:/WordCount berisi dua layanan default, jenis layanan berstatus WordCountServiceType
, jenis layanan tanpa status WordCountWebServiceType
. Saya mengubah ApplicationManifest.xml
untuk meminta tujuh replika target untuk layanan berstatus dan satu partisi. Karena hanya ada lima node dalam kluster, komponen sistem melaporkan peringatan pada partisi layanan karena berada di bawah jumlah target.
<Service Name="WordCountService">
<StatefulService ServiceTypeName="WordCountServiceType" TargetReplicaSetSize="7" MinReplicaSetSize="2">
<UniformInt64Partition PartitionCount="[WordCountService_PartitionCount]" LowKey="1" HighKey="26" />
</StatefulService>
</Service>
Kesehatan dalam Service Fabric Explorer
Service Fabric Explorer menyediakan tampilan visual kluster. Pada gambar di bawah ini, Anda dapat melihat bahwa:
- Aplikasi fabric:/WordCount berwarna merah (dalam kesalahan) karena memiliki peristiwa kesalahan yang dilaporkan oleh MyWatchdog untuk Ketersediaan properti.
- Salah satu layanannya, fabric:/WordCount/WordCountService berwarna kuning (dalam peringatan). Layanan dikonfigurasi dengan tujuh replika dan kluster memiliki lima node, sehingga dua replika tidak dapat ditempatkan. Meskipun tidak ditampilkan di sini, partisi layanan berwarna kuning karena laporan sistem dari
System.FM
menyatakan bahwaPartition is below target replica or instance count
. Partisi kuning memicu layanan kuning. - Kluster berwarna merah karena aplikasi merah.
Evaluasi menggunakan kebijakan default dari manifes kluster dan manifes aplikasi. Kebijakan ini adalah kebijakan yang ketat dan tidak mentolerir kegagalan apa pun.
Tampilan kluster dengan Service Fabric Explorer:
Catatan
Baca selengkapnya tentang Service Fabric Explorer.
Kueri kesehatan
Service Fabric memaparkan kueri kesehatan untuk setiap jenis entitas yang didukung. Mereka dapat diakses melalui API, menggunakan metode di FabricClient.HealthManager, cmdlet PowerShell, dan REST. Kueri ini mengembalikan informasi kesehatan lengkap tentang entitas: status kesehatan agregat, aktivitas kesehatan entitas, status kesehatan anak (jika berlaku), evaluasi tidak sehat (ketika entitas tidak sehat), dan statistik kesehatan anak (jika berlaku).
Catatan
Entitas kesehatan akan dikembalikan saat terisi penuh pada penyimpanan kesehatan. Entitas harus aktif (tidak dihapus) dan memiliki laporan sistem. Entitas induknya pada rantai hierarki juga harus memiliki laporan sistem. Jika salah satu kondisi ini tidak terpenuhi, kueri kesehatan mengembalikan FabricException dengan FabricErrorCode FabricHealthEntityNotFound
yang menunjukkan mengapa entitas tidak dikembalikan.
Kueri kesehatan harus lolos dalam pengidentifikasi entitas, tergantung jenis entitas. Kueri menerima parameter kebijakan kesehatan opsional. Jika tidak ada kebijakan kesehatan yang ditentukan, kebijakan kesehatan dari kluster atau manifes aplikasi digunakan untuk evaluasi. Jika manifes tidak berisi definisi untuk kebijakan kesehatan, kebijakan kesehatan default akan digunakan untuk evaluasi. Kebijakan kesehatan default tidak mentolerir kegagalan apa pun. Kueri juga menerima filter hanya untuk mengembalikan hanya sebagian anak atau peristiwa--yang menyesuaikan dengan filter yang ditentukan. Filter lain memungkinkan mengecualikan statistik elemen anak.
Catatan
Filter output diterapkan di sisi server, sehingga ukuran balasan pesan berkurang. Kami sarankan agar Anda menggunakan filter output untuk membatasi data yang dikembalikan, dibandingkan menerapkan filter pada sisi klien.
Kesehatan entitas berisi:
- Status kesehatan agregat entitas. Dikomputasi oleh penyimpanan kesehatan berdasarkan laporan kesehatan entitas, status kesehatan elemen anak (jika berlaku), dan kebijakan kesehatan. Baca selengkapnya tentang evaluasi kesehatan entitas.
- Peristiwa kesehatan pada entitas.
- Pengumpulan keadaan kesehatan semua elemen anak untuk entitas yang dapat memiliki elemen anak. Status kesehatan berisi pengidentifikasi entitas dan status kesehatan agregat. Untuk mendapatkan kesehatan lengkap untuk elemen anak, panggil kesehatan kueri untuk jenis entitas anak dan lulus dalam pengidentifikasi elemen anak.
- Evaluasi tidak sehat yang menunjuk pada laporan yang memicu status entitas, jika entitas tidak sehat. Evaluasinya rekursif, berisi evaluasi kesehatan elemen anak yang memicu status kesehatan saat ini. Misalnya, pengawas melaporkan kesalahan terhadap replika. Kesehatan aplikasi menunjukkan evaluasi yang tidak sehat karena layanan yang tidak sehat; layanan tidak sehat karena partisi mengalami kesalahan; partisi tidak sehat karena replika mengalami kesalahan; replika tidak sehat karena laporan kesehatan kesalahan pengawas.
- Statistik kesehatan untuk semua jenis elemen anak entitas yang memiliki elemen anak. Misalnya, kesehatan kluster menunjukkan total jumlah aplikasi, layanan, partisi, replika, dan entitas yang digunakan dalam kluster. Kesehatan layanan menunjukkan total jumlah partisi dan replika di bawah layanan yang ditentukan.
Mendapatkan kesehatan kluster
Mengembalikan kesehatan entitas kluster dan berisi status kesehatan aplikasi dan node (elemen anak kluster). Input:
- [Opsional] Kebijakan kesehatan kluster digunakan untuk mengevaluasi node dan peristiwa kluster.
- [Opsional] Peta kebijakan kesehatan aplikasi, dengan kebijakan kesehatan yang digunakan untuk mengambil alih kebijakan manifes aplikasi.
- [Opsional] Filter untuk peristiwa, node, dan aplikasi yang menentukan entri mana yang menarik dan harus dikembalikan dalam hasilnya (misalnya, hanya kesalahan, atau peringatan dan kesalahan). Semua peristiwa, node, dan aplikasi digunakan untuk mengevaluasi kesehatan agregat entitas, terlepas dari filter.
- [Opsional] Filter untuk mengecualikan statistik kesehatan.
- [Optional] Filter untuk menyertakan statistik kesehatan fabric:/System dalam statistik kesehatan. Hanya berlaku ketika statistik kesehatan tidak dikecualikan. Secara default, statistik kesehatan hanya mencakup statistik untuk aplikasi pengguna dan bukan aplikasi Sistem.
API
Untuk mendapatkan kluster kesehatan, buat FabricClient
dan panggil metode GetClusterHealthAsync pada HealthManager.
Panggilan berikut untuk mendapatkan kesehatan kluster:
ClusterHealth clusterHealth = await fabricClient.HealthManager.GetClusterHealthAsync();
Kode berikut mendapatkan kesehatan kluster menggunakan kebijakan kesehatan kluster kustom dan filter untuk node dan aplikasi. Ini menunjukkan bahwa statistik kesehatan mencakup statistik fabric:/System. Ini membuat ClusterHealthQueryDescription, yang berisi informasi input.
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 untuk mendapatkan kesehatan kluster adalah Get-ServiceFabricClusterHealth. Pertama, sambungkan ke kluster dengan menggunakan cmdlet Connect-ServiceFabricCluster.
Status kluster adalah lima node, aplikasi sistem, dan fabric:/WordCount dikonfigurasi sebagaimana dijelaskan.
Cmdlet berikut mendapatkan kesehatan kluster menggunakan kebijakan kesehatan default. Status kesehatan agregat adalah peringatan karena aplikasi fabric:/WordCount dalam status peringatan. Perhatikan bagaimana evaluasi yang tidak sehat memberikan detail tentang kondisi yang memicu kesehatan agregat.
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
Cmdlet PowerShell berikut mendapatkan kesehatan kluster menggunakan kebijakan aplikasi kustom. Ini memfilter hasil untuk hanya mendapatkan aplikasi dan node dalam kesalahan atau peringatan. Dalam contoh ini, tidak ada node yang dikembalikan, karena semuanya sehat. Hanya aplikasi fabric:/WordCount yang mematuhi filter aplikasi. Karena kebijakan kustom ditentukan untuk menganggap peringatan sebagai kesalahan untuk aplikasi fabric:/WordCount, aplikasi dievaluasi sebagai kesalahan dan begitu pula kluster.
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
Anda dapat mendapatkan kesehatan kluster dengan DAPATKAN permintaan atau POSTING permintaan yang menyertakan kebijakan kesehatan yang dijelaskan dalam isinya.
Mendapatkan kesehatan node
Mengembalikan kesehatan entitas node dan berisi peristiwa kesehatan yang dilaporkan pada node. Input:
- [Wajib] Nama node yang mengidentifikasi node.
- [Opsional] Pengaturan kebijakan kesehatan kluster digunakan untuk mengevaluasi kesehatan.
- [Opsional] Filter untuk peristiwa yang menentukan entri mana yang menarik dan harus dikembalikan hasilnya (misalnya, kesalahan saja, atau peringatan dan kesalahan). Semua peristiwa digunakan untuk mengevaluasi kesehatan agregat entitas, terlepas dari filter.
API
Untuk mendapatkan kesehatan node melalui API, buat FabricClient
dan panggil metode GetNodeHealthAsync pada HealthManager.
Kode berikut mendapatkan kesehatan node untuk nama node yang ditentukan:
NodeHealth nodeHealth = await fabricClient.HealthManager.GetNodeHealthAsync(nodeName);
Kode berikut mendapatkan kesehatan node untuk nama node yang ditentukan dan lulus dalam filter peristiwa dan kebijakan kustom melalui 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 untuk mendapatkan kesehatan node Get-ServiceFabricNodeHealth. Pertama, sambungkan ke kluster dengan menggunakan cmdlet Connect-ServiceFabricCluster. Cmdlet berikut mendapatkan kesehatan node menggunakan kebijakan kesehatan default:
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 berikut mendapatkan kesehatan semua node dalam kluster:
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
Anda bisa mendapatkan kesehatan node dengan DAPATKAN permintaan atau POSTING permintaan yang menyertakan kebijakan kesehatan yang dijelaskan dalam isinya.
Mendapatkan kesehatan aplikasi
Mengembalikan kesehatan entitas aplikasi. Ini berisi status kesehatan dari aplikasi yang disebarkan dan elemen anak layanan. Input:
- [Wajib] Nama aplikasi (URI) yang mengidentifikasi aplikasi.
- [Opsional] Kebijakan kesehatan aplikasi yang digunakan untuk mengambil alih kebijakan manifes aplikasi.
- [Opsional] Filter untuk peristiwa, layanan, dan aplikasi yang disebarkan yang menentukan entri mana yang menarik dan harus dikembalikan hasilnya (misalnya, hanya kesalahan, atau peringatan dan kesalahan). Semua peristiwa, layanan, dan aplikasi disebarkan digunakan untuk mengevaluasi kesehatan agregat entitas, terlepas dari filter.
- [Opsional] Filter untuk mengecualikan statistik kesehatan. Jika tidak ditentukan, statistik kesehatan termasuk jumlah baik, peringatan, dan kesalahan untuk semua elemen anak aplikasi: layanan, partisi, replika, aplikasi yang digunakan, dan paket layanan yang disebarkan.
API
Untuk mendapatkan kesehatan aplikasi, buat FabricClient
dan panggil metode GetApplicationHealthAsync pada HealthManager.
Kode berikut mendapatkan kesehatan aplikasi untuk nama aplikasi yang ditentukan (URI):
ApplicationHealth applicationHealth = await fabricClient.HealthManager.GetApplicationHealthAsync(applicationName);
Kode berikut mendapatkan kesehatan aplikasi untuk nama aplikasi yang ditentukan (URI), dengan filter dan kebijakan kustom yang ditentukan melaui 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 untuk mendapatkan kesehatan aplikasi adalah Get-ServiceFabricApplicationHealth. Pertama, sambungkan ke kluster dengan menggunakan cmdlet Connect-ServiceFabricCluster.
Cmdlet berikut mengembalikan kesehatan aplikasi 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 berikut ini lolos dalam kebijakan kustom. Ini juga menyaring elemen anak filter dan peristiwa.
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
Anda bisa mendapatkan kesehatan aplikasi dengan DAPATKAN permintaan atau POSTING permintaan yang menyertakan kebijakan kesehatan dalam isinya.
Mendapatkan kesehatan layanan
Mengembalikan kesehatan entitas layanan. Ini berisi status kesehatan partisi. Input:
- [Wajib] Nama layanan (URI) yang mengidentifikasi layanan.
- [Opsional] Kebijakan kesehatan aplikasi yang digunakan untuk mengambil alih kebijakan manifes aplikasi.
- [Opsional] Filter untuk peristiwa dan partisi yang menentukan entri mana yang menarik dan harus dikembalikan hasilnya (misalnya, hanya kesalahan, atau peringatan dan kesalahan). Semua peristiwa dan partisi digunakan untuk mengevaluasi kesehatan agregat entitas, terlepas dari filter.
- [Opsional] Filter untuk mengecualikan statistik kesehatan. Jika tidak ditentukan, statistik kesehatan menunjukkan jumlah baik, peringatan, dan kesalahan untuk semua partisi dan replika layanan.
API
Untuk mendapatkan kesehatan layanan melalui API, buat FabricClient
dan panggil metode GetServiceHealthAsync pada HealthManager.
Contoh berikut mendapatkan kesehatan layanan dengan nama layanan tertentu (URI):
ServiceHealth serviceHealth = await fabricClient.HealthManager.GetServiceHealthAsync(serviceName);
Kode berikut mendapatkan kesehatan layanan untuk nama layanan tertentu (URI), menentukan filer dan kebijakan kustom melalui 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 untuk mendapatkan kesehatan aplikasi adalah Get-ServiceFabricServiceHealth. Pertama, sambungkan ke kluster dengan menggunakan cmdlet Connect-ServiceFabricCluster.
Cmdlet berikut mendapatkan kesehatan layanan menggunakan kebijakan data default:
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
Anda bisa mendapatkan kesehatan layanan dengan DAPATKAN permintaan atau POSTING permintaan yang menyertakan kebijakan kesehatan yang dijelaskan dalam isinya.
Mendapatkan kesehatan partisi
Mengembalikan kesehatan entitas partisi. Ini berisi status kesehatan replika. Input:
- [Wajib] ID partisi (GUID) yang mengidentifikasi partisi.
- [Opsional] Kebijakan kesehatan aplikasi yang digunakan untuk mengambil alih kebijakan manifes aplikasi.
- [Opsional] Filter untuk peristiwa dan replika yang menentukan entri mana yang menarik dan harus dikembalikan dalam hasilnya (misalnya, hanya kesalahan, atau peringatan dan kesalahan). Semua peristiwa dan replika digunakan untuk mengevaluasi kesehatan agregat entitas, terlepas dari filter.
- [Opsional] Filter untuk mengecualikan statistik kesehatan. Jika tidak ditentukan, statistik kesehatan menunjukkan jumlah replika dengan status baik, peringatan, dan kesalahan.
API
Untuk mendapatkan kesehatan partisi melalui API, buat FabricClient
dan panggil metode GetPartitionHealthAsync pada HealthManager. Untuk menentukan parameter opsional, buat PartitionHealthQueryDescription.
PartitionHealth partitionHealth = await fabricClient.HealthManager.GetPartitionHealthAsync(partitionId);
PowerShell
Cmdlet untuk mendapatkan kesehatan partisi adalah Get-ServiceFabricPartitionHealth. Pertama, sambungkan ke kluster dengan menggunakan cmdlet Connect-ServiceFabricCluster.
Cmdlet berikut mendapatkan kesehatan untuk semua partisi layanan fabric:/WordCount/WordCountService dan memperluas filter status kesehatan replika:
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
Anda bisa mendapatkan kesehatan partisi dengan DAPATKAN permintaan atau POSTING permintaan yang menyertakan kebijakan kesehatan yang dijelaskan dalam isinya.
Mendapatkan kesehatan replika
Mengembalikan kesehatan replika layanan berstatus atau instans layanan tanpa status. Input:
- [Wajib] ID partisi (GUID) dan ID replika yang mengidentifikasi replika.
- [Opsional] Parameter kebijakan kesehatan aplikasi yang digunakan untuk mengambil alih kebijakan manifes aplikasi.
- [Opsional] Filter untuk peristiwa yang menentukan entri mana yang menarik dan harus dikembalikan hasilnya (misalnya, kesalahan saja, atau peringatan dan kesalahan). Semua peristiwa digunakan untuk mengevaluasi kesehatan agregat entitas, terlepas dari filter.
API
Untuk mendapatkan kesehatan replika melalui API, buat FabricClient
dan panggil metode GetReplicaHealthAsync pada HealthManager. Untuk menentukan parameter lanjutan, gunakan ReplicaHealthQueryDescription.
ReplicaHealth replicaHealth = await fabricClient.HealthManager.GetReplicaHealthAsync(partitionId, replicaId);
PowerShell
Cmdlet untuk mendapatkan kesehatan replika adalah Get-ServiceFabricReplicaHealth. Pertama, sambungkan ke kluster dengan menggunakan cmdlet Connect-ServiceFabricCluster.
Cmdlet berikut mendapatkan kesehatan replika utama untuk semua partisi layanan:
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
Anda bisa mendapatkan kesehatan replika dengan DAPATKAN permintaan atau POSTING permintaan yang menyertakan kebijakan kesehatan yang dijelaskan dalam isinya.
Mendapatkan kesehatan aplikasi yang disebarkan
Mengembalikan kesehatan aplikasi yang disebarkan pada entitas node. Ini berisi status kesehatan paket layanan yang disebarkan. Input:
- [Wajib] Nama aplikasi (URI) dan nama node (string) yang mengidentifikasi aplikasi yang disebarkan.
- [Opsional] Kebijakan kesehatan aplikasi yang digunakan untuk mengambil alih kebijakan manifes aplikasi.
- [Opsional] Filter untuk peristiwa dan paket layanan yang disebarkan yang menentukan entri mana yang menarik dan harus dikembalikan dalam hasilnya (misalnya, kesalahan saja, atau peringatan dan kesalahan). Semua peristiwa dan paket layanan yang digunakan untuk mengevaluasi kesehatan agregat entitas, terlepas dari filter.
- [Opsional] Filter untuk mengecualikan statistik kesehatan. Jika tidak ditentukan, statistik kesehatan menunjukkan jumlah paket layanan yang disebarkan dengan status baik, peringatan, dan kesalahan.
API
Untuk mendapatkan kesehatan aplikasi yang disebarkan pada node melalui API, buat FabricClient
dan panggil metode GetDeployedApplicationHealthAsync pada HealthManager. Untuk menentukan parameter opsional, gunakan DeployedApplicationHealthQueryDescription.
DeployedApplicationHealth health = await fabricClient.HealthManager.GetDeployedApplicationHealthAsync(
new DeployedApplicationHealthQueryDescription(applicationName, nodeName));
PowerShell
Cmdlet untuk mendapatkan kesehatan aplikasi yang disebarkan adalah Get-ServiceFabricDeployedApplicationHealth. Pertama, sambungkan ke kluster dengan menggunakan cmdlet Connect-ServiceFabricCluster. Untuk menemukan tempat aplikasi yang disebarkan, jalankan Get-ServiceFabricApplicationHealth lihat elemen anak aplikasi yang disebarkan.
Cmdlet berikut mendapatkan kesehatan aplikasi fabric:/WordCount yang disebarkan pada _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
Anda bisa mendapatkan kesehatan aplikasi yang disebarkan dengan DAPATKAN permintaan atau POSTING permintaan yang menyertakan kebijakan kesehatan yang dijelaskan dalam isinya.
Mendapatkan kesehatan paket layanan yang disebarkan
Mengembalikan kesehatan entitas paket layanan yang disebarkan. Input:
- [Diperlukan] Nama aplikasi (URI), nama node (string), dan nama manifes layanan (string) yang mengidentifikasi paket layanan yang disebarkan.
- [Opsional] Kebijakan kesehatan aplikasi yang digunakan untuk mengambil alih kebijakan manifes aplikasi.
- [Opsional] Filter untuk peristiwa yang menentukan entri mana yang menarik dan harus dikembalikan hasilnya (misalnya, kesalahan saja, atau peringatan dan kesalahan). Semua peristiwa digunakan untuk mengevaluasi kesehatan agregat entitas, terlepas dari filter.
API
Untuk mendapatkan kesehatan paket layanan yang disebarkan melalui API, buat FabricClient
dan panggil metode GetDeployedServicePackageHealthAsync pada HealthManager. Untuk menentukan parameter opsional, gunakan DeployedServicePackageHealthQueryDescription.
DeployedServicePackageHealth health = await fabricClient.HealthManager.GetDeployedServicePackageHealthAsync(
new DeployedServicePackageHealthQueryDescription(applicationName, nodeName, serviceManifestName));
PowerShell
Cmdlet untuk mendapatkan kesehatan paket layanan yang disebarkan adalah Get-ServiceFabricDeployedServicePackageHealth. Pertama, sambungkan ke kluster dengan menggunakan cmdlet Connect-ServiceFabricCluster. Untuk melihat tempat aplikasi disebarkan, jalankan Get-ServiceFabricApplicationHealth dan lihat aplikasi yang disebarkan. Untuk melihat paket mana yang ada dalam aplikasi, lihat elemen anak paket layanan yang disebarkan pada output Get-ServiceFabricDeployedApplicationHealth.
Cmdlet berikut mendapatkan kesehatan WordCountServicePkg paket layanan aplikasi fabric:/WordCount yang disebarkan pada _Node_2. Entitas memiliki laporan System.Hosting untuk paket layanan yang berhasil dan aktivasi titik entri, dan pendaftaran jenis layanan yang berhasil.
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
Anda bisa mendapatkan kesehatan paket layanan yang disebarkan dengan DAPATKAN permintaan atau POSTING permintaan yang menyertakan kebijakan kesehatan pada isinya.
Kueri gugus kesehatan
Kueri gugus kesehatan bisa mengembalikan elemen anak kluster multi-tingkat (rekursif), per filter input. Ini mendukung filter lanjutan yang memungkinkan banyak fleksibilitas dalam memilih elemen anak untuk dikembalikan. Filter dapat menentukan elemen anak berdasarkan pengidentifikasi unik atau oleh pengidentifikasi grup lain dan/atau status kesehatan. Secara default, tidak ada elemen anak yang disertakan, dibandingkan dengan perintah kesehatan yang selalu menyertakan elemen anak tingkat pertama.
Kueri kesehatan hanya mengembalikan elemen anak tingkat pertama entitas yang ditentukan sesuai filter yang diperlukan. Untuk mendapatkan elemen anak, Anda harus memanggil API kesehatan tambahan untuk setiap entitas yang diminati. Demikian pula untuk mendapatkan kesehatan entitas tertentu, Anda harus memanggil satu API kesehatan untuk setiap entitas yang diinginkan. Pemfilteran tingkat lanjut kueri gugus memungkinkan Anda meminta beberapa item yang menarik dalam satu kueri, meminimalkan ukuran pesan dan jumlah pesan.
Nilai kueri gugus adalah Anda bisa mendapatkan status kesehatan untuk lebih banyak entitas kluster (kemungkinan semua entitas kluster mulai dari akar yang diperlukan) dalam satu panggilan. Anda bisa mengekspresikan kueri kesehatan kompleks seperti:
- Hanya mengembalikan aplikasi yang mengalami kesalahan, dan untuk aplikasi tersebut menyertakan semua layanan dalam peringatan atau kesalahan. Untuk layanan yang dikembalikan, sertakan semua partisi.
- Hanya kembalikan kesehatan empat aplikasi, yang ditentukan oleh namanya.
- Hanya kembalikan kesehatan aplikasi dari jenis aplikasi yang diinginkan.
- Mengembalikan semua entitas yang disebarkan pada node. Mengembalikan semua aplikasi, semua aplikasi yang disebarkan pada node yang ditentukan dan semua paket layanan yang disebarkan pada node tersebut.
- Mengembalikan semua replika dalam kesalahan. Mengembalikan semua aplikasi, layanan, partisi, dan hanya replika dalam kesalahan.
- Mengembalikan semua aplikasi. Untuk layanan tertentu, sertakan semua partisi.
Saat ini, kueri gugus kesehatan hanya diekspos untuk entitas kluster. Ini mengembalikan gugus kesehatan kluster, yang berisi:
- Kluster ini mengumpulkan status kesehatan.
- Daftar gugus node status kesehatan yang mematuhi filter input.
- Daftar gugus status kesehatan aplikasi yang mematuhi filter input. Setiap gugus status kesehatan aplikasi berisi daftar gugus dengan semua layanan yang mematuhi filter input dan daftar gugus dengan semua aplikasi yang diterapkan yang mematuhi filter. Sama halnya untuk elemen anak layanan dan aplikasi yang disebarkan. Dengan begitu, semua entitas dalam kluster dapat berpotensi dikembalikan jika diminta, secara hierarkis.
Kueri gugus kesehatan kluster
Mengembalikan kesehatan entitas kluster dan berisi gugus status kesehatan hierarkis elemen anak yang diperlukan. Input:
- [Opsional] Kebijakan kesehatan kluster digunakan untuk mengevaluasi node dan peristiwa kluster.
- [Opsional] Peta kebijakan kesehatan aplikasi, dengan kebijakan kesehatan yang digunakan untuk mengambil alih kebijakan manifes aplikasi.
- [Opsional] Filter untuk node dan aplikasi yang menentukan entri mana yang menarik dan harus dikembalikan dalam hasilnya. Filter khusus untuk entitas/grup entitas atau berlaku untuk semua entitas pada tingkat tersebut. Daftar filter dapat berisi satu filter umum dan/atau filter untuk pengidentifikasi tertentu ke entitas butir waktu yang dikembalikan oleh kueri. Jika kosong, elemen anak tidak dikembalikan secara default. Baca selengkapnya tentang filter di NodeHealthStateFilter dan ApplicationHealthStateFilter. Filter aplikasi dapat menentukan filter lanjutan secara rekursif untuk elemen anak.
Hasil gugus termasuk elemen anak yang mematuhi filter.
Saat ini, kueri gugus tidak mengembalikan evaluasi atau peristiwa entitas yang tidak sehat. Informasi tambahan dapat diperoleh menggunakan kueri kesehatan kluster yang ada.
API
Untuk mendapatkan gugus kesehatan kluster, buat FabricClient
dan panggil metode GetClusterHealthChunkAsync pada HealthManager. Anda bisa lolos dalam ClusterHealthQueryDescription untuk menjelaskan kebijakan kesehatan dan filter lanjutan.
Kode berikut mendapatkan gugus kesehatan kluster dengan filter lanjutan.
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 untuk mendapatakan kesehatan kluster adalah Get-ServiceFabricClusterChunkHealth. Pertama, sambungkan ke kluster dengan menggunakan cmdlet Connect-ServiceFabricCluster.
Kode berikut mendapatkan node hanya jika dalam Kesalahan kecuali untuk node tertentu, yang seharusnya selalu dikembalikan.
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 berikut mendapatkan gugus kluster dengan filter aplikasi.
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 berikut mengembalikan semua entitas yang disebarkan pada node.
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
Anda bisa mendapatkan gugus kesehatan kluster dengan DAPATKAN permintaan atau POSTING permintaan yang menyertakan kebijakan kesehatan dan filter lanjutan yang dijelaskan dalam isinya.
Kueri umum
Kueri umum mengembalikan daftar entitas Service Fabric dari jenis yang ditentukan. Kueri diekspos melalui API (melalui metode pada FabricClient.QueryManager), cmdlet PowerShell, dan REST. Kueri ini mengagregasi subkueri dari beberapa komponen. Salah satunya adalah penyimpanan kesehatan, yang berisi status kesehatan agregat untuk setiap hasil kueri.
Catatan
Kueri umum mengembalikan status kesehatan agregat entitas dan tidak berisi data kesehatan yang kaya. Jika entitas tidak sehat, Anda dapat menindaklanjuti kueri kesehatan untuk mendapatkan semua informasi kesehatannya, termasuk peristiwa, status kesehatan elemen anak, dan evaluasi yang tidak sehat.
Jika kueri umum mengembalikan status kesehatan yang tidak diketahui untuk entitas, ada kemungkinan bahwa penyimpanan kesehatan tidak memiliki data lengkap tentang entitas tersebut. Ada kemungkinan juga bahwa subkuersi ke penyimpanan kesehatan tidak berhasil (misalnya, ada kesalahan komunikasi, atau toko kesehatan dibatasi). Menindaklanjuti dengan kueri kesehatan untuk entitas. Jika subkueri mengalami kesalahan sementara, seperti masalah jaringan, kueri tindak lanjut ini mungkin berhasil. Ini juga dapat memberi lebih banyak detail dari penyimpanan kesehatan tentang entitas yang tidak diekspos.
Kueri yang berisi HealthState untuk entitas adalah:
- Daftar node: Mengembalikan daftar node dalam kluster (dalam halaman).
- API: FabricClient.QueryClient.GetNodeListAsync
- PowerShell: Get-ServiceFabricNode
- Daftar aplikasi: Mengembalikan daftar aplikasi dalam kluster (dalam halaman).
- API: FabricClient.QueryClient.GetApplicationListAsync
- PowerShell: Get-ServiceFabricApplication
- Daftar layanan: Mengembalikan daftar layanan dalam aplikasi (dalam halaman).
- API: FabricClient.QueryClient.GetServiceListAsync
- PowerShell: Get-ServiceFabricService
- Daftar partisi: Mengembalikan daftar partisi dalam layanan (dalam halaman).
- API: FabricClient.QueryClient.GetPartitionListAsync
- PowerShell: Get-ServiceFabricPartition
- Daftar replika: Mengembalikan daftar replika dalam partisi (dalam halaman).
- API: FabricClient.QueryClient.GetReplicaListAsync
- PowerShell: Get-ServiceFabricReplica
- Daftar aplikasi yang disebarkan: Mengembalikan daftar aplikasi yang disebarkan pada node.
- API: FabricClient.QueryClient.GetDeployedApplicationListAsync
- PowerShell: Get-ServiceFabricDeployedApplication
- Daftar paket layanan yang disebarkan: Mengembalikan daftar paket layanan dalam aplikasi yang disebarkan.
- API: FabricClient.QueryClient.GetDeployedServicePackageListAsync
- PowerShell: Get-ServiceFabricDeployedApplication
Catatan
Beberapa kueri mengembalikan hasil dalam halaman. Pengembalian kueri ini adalah daftar yang berasal dari PagedList<T>. Jika hasilnya tidak sesuai dengan pesan, hanya halaman yang dikembalikan dan ContinuationToken yang melacak tempat enumerasi berhenti. Lanjutkan memanggil kueri yang sama dan meneruskan token kelanjutan dari kueri sebelumnya untuk mendapatkan hasil berikutnya.
Contoh
Kode berikut mendapatkan aplikasi tidak sehat dalam kluster:
var applications = fabricClient.QueryManager.GetApplicationListAsync().Result.Where(
app => app.HealthState == HealthState.Error);
Cmdlet berikut mendapatkan detail aplikasi untuk aplikasi fabric:/WordCount. Perhatikan bahwa status kesehatan sedang dalam peringatan.
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 berikut mendapatkan layanan dengan status kesehatan kesalahan:
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
Peningkatan kluster dan aplikasi
Selama peningkatan kluster dan aplikasi yang dipantau, Service Fabric memeriksa kesehatan untuk memastikan bahwa semuanya tetap sehat. Jika entitas tidak sehat seperti yang dievaluasi menggunakan kebijakan kesehatan yang dikonfigurasi, peningkatan menerapkan kebijakan khusus peningkatan untuk menentukan tindakan berikutnya. Peningkatan dapat dijeda untuk memungkinkan interaksi pengguna (seperti memperbaiki status kesalahan atau mengubah kebijakan), atau mungkin secara otomatis digulung balik ke versi sebelumnya yang bagus.
Selama peningkatan kluster, Anda bisa mendapatkan status peningkatan kluster. Status peningkatan termasuk evaluasi tidak sehat, yang menunjuk bagian yang tidak sehat dalam kluster. Jika peningkatan digulung balik karena masalah kesehatan, status peningkatan mengingat alasan terakhir yang tidak sehat. Informasi ini dapat membantu administrator menyelidiki apa yang salah setelah peningkatan digulung balik atau dihentikan.
Demikian pula, selama peningkatan aplikasi, semua evaluasi yang tidak sehat berada dalam status peningkatan aplikasi.
Berikut ini memperlihatkan status peningkatan aplikasi untuk aplikasi fabric:/WordCount yang dimodifikasi. Pengawas melaporkan kesalahan pada salah satu replikanya. Peningkatan gulung balik karena pemeriksaan kesehatan tidak dipatuhi.
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
Baca selengkapnya tentang peningkatan aplikasi Service Fabric.
Gunakan evaluasi kesehatan untuk menyelesaikan masalah
Setiap kali ada masalah dengan kluster atau aplikasi, lihatlah kluster atau kesehatan aplikasi untuk menentukan letak kesalahannya. Evaluasi yang tidak sehat memberikan detail tentang apa yang memicu status tidak sehat saat ini. Jika perlu, Anda dapat menelusuri paling detail ke dalam entitas elemen anak yang tidak sehat untuk mengidentifikasi penyebab akarnya.
Misalnya, pertimbangkan aplikasi yang tidak sehat karena ada laporan kesalahan pada salah satu replikanya. Cmdlet Powershell berikut menunjukkan evaluasi yang tidak sehat:
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
Anda dapat melihat replika untuk mendapatkan informasi selengkapnya:
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
Catatan
Evaluasi yang tidak sehat menunjukkan alasan pertama entitas dievaluasi ke kondisi kesehatan saat ini. Mungkin ada beberapa peristiwa lain yang memicu keadaan ini, tetapi mereka tidak tercermin dalam evaluasi. Untuk mendapatkan informasi selengkapnya, telusuri entitas kesehatan untuk mengetahui semua laporan yang tidak sehat dalam kluster.
Langkah berikutnya
Gunakan laporan kesehatan sistem untuk memecahkan masalah
Menambahkan laporan kesehatan Service Fabric khusus
Cara melaporkan dan memeriksa kesehatan layanan