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 bahwa Partition 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:

Tampilkan 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 FabricErrorCodeFabricHealthEntityNotFound 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:

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 kustom

Cara melaporkan dan memeriksa kesehatan layanan

Memantau dan mendiagnosis layanan secara lokal

Peningkatan aplikasi Service Fabric