Dela via


Visa Service Fabric-hälsorapporter

Azure Service Fabric introducerar en hälsomodell med hälsoentiteter där systemkomponenter och vakthundar kan rapportera lokala förhållanden som de övervakar. Hälsolagret aggregerar alla hälsodata för att avgöra om entiteter är felfria.

Klustret fylls automatiskt i med hälsorapporter som skickas av systemkomponenterna. Läs mer i Använda systemhälsorapporter för att felsöka.

Service Fabric tillhandahåller flera sätt att få entiteternas aggregerade hälsotillstånd:

  • Service Fabric Explorer eller andra visualiseringsverktyg
  • Hälsofrågor (via PowerShell, API eller REST)
  • Allmänna frågor som returnerar en lista över entiteter som har hälsotillstånd som en av egenskaperna (via PowerShell, API eller REST)

För att demonstrera de här alternativen ska vi använda ett lokalt kluster med fem noder och programmet fabric:/WordCount. Programmet fabric:/WordCount innehåller två standardtjänster, en tillståndskänslig tjänst av typen WordCountServiceTypeoch en tillståndslös tjänst av typen WordCountWebServiceType. Jag ändrade ApplicationManifest.xml till att kräva sju målrepliker för den tillståndskänsliga tjänsten och en partition. Eftersom det bara finns fem noder i klustret rapporterar systemkomponenterna en varning på tjänstpartitionen eftersom den ligger under målantalet.

<Service Name="WordCountService">
  <StatefulService ServiceTypeName="WordCountServiceType" TargetReplicaSetSize="7" MinReplicaSetSize="2">
    <UniformInt64Partition PartitionCount="[WordCountService_PartitionCount]" LowKey="1" HighKey="26" />
  </StatefulService>
</Service>

Hälsa i Service Fabric Explorer

Service Fabric Explorer ger en visuell vy över klustret. I bilden nedan kan du se följande:

  • Programinfrastrukturen :/WordCount är röd (i fel) eftersom den har en felhändelse som rapporterats av MyWatchdog för egenskapen Tillgänglighet.
  • En av dess tjänster, fabric:/WordCount/WordCountService , är gul (i varning). Tjänsten är konfigurerad med sju repliker och klustret har fem noder, så två repliker kan inte placeras. Även om det inte visas här är tjänstpartitionen gul på grund av en systemrapport från System.FM att säga att Partition is below target replica or instance count. Den gula partitionen utlöser den gula tjänsten.
  • Klustret är rött på grund av det röda programmet.

Utvärderingen använder standardprinciper från klustermanifestet och programmanifestet. De är strikta principer och tolererar inte några fel.

Vy över klustret med Service Fabric Explorer:

Vy över klustret med Service Fabric Explorer.

Kommentar

Läs mer om Service Fabric Explorer.

Hälsofrågor

Service Fabric exponerar hälsofrågor för var och en av de entitetstyper som stöds. De kan nås via API:et med hjälp av metoder på FabricClient.HealthManager, PowerShell-cmdletar och REST. Dessa frågor returnerar fullständig hälsoinformation om entiteten: aggregerat hälsotillstånd, händelser för entitetshälsa, underordnade hälsotillstånd (i förekommande fall), felaktiga utvärderingar (när entiteten inte är felfri) och hälsostatistik för underordnade (i förekommande fall).

Kommentar

En hälsoentitet returneras när den är helt ifylld i hälsoarkivet. Entiteten måste vara aktiv (tas inte bort) och ha en systemrapport. Dess överordnade entiteter i hierarkikedjan måste också ha systemrapporter. Om något av dessa villkor inte uppfylls returnerar hälsofrågorna en FabricException med FabricErrorCode FabricHealthEntityNotFound som visar varför entiteten inte returneras.

Hälsofrågorna måste skickas i entitetsidentifieraren, som är beroende av entitetstypen. Frågorna accepterar valfria hälsoprincipparametrar. Om inga hälsoprinciper anges används hälsoprinciperna från klustret eller programmanifestet för utvärdering. Om manifesten inte innehåller någon definition för hälsoprinciper används standardhälsoprinciperna för utvärdering. Standardhälsoprinciperna tolererar inte några fel. Frågorna accepterar också filter för att endast returnera partiella underordnade eller händelser – de som respekterar de angivna filtren. Ett annat filter tillåter exkluderande barnstatistik.

Kommentar

Utdatafiltren tillämpas på serversidan, så meddelandets svarsstorlek minskas. Vi rekommenderar att du använder utdatafiltren för att begränsa de data som returneras i stället för att använda filter på klientsidan.

En entitets hälsotillstånd innehåller:

  • Entitetens aggregerade hälsotillstånd. Beräknas av hälsoarkivet baserat på entitetshälsorapporter, underordnade hälsotillstånd (i förekommande fall) och hälsoprinciper. Läs mer om utvärdering av entitetshälsa.
  • Hälsohändelserna på entiteten.
  • Insamling av hälsotillstånd för alla underordnade för de entiteter som kan ha underordnade. Hälsotillstånden innehåller entitetsidentifierare och det aggregerade hälsotillståndet. Om du vill få fullständig hälsa för ett underordnat barn anropar du frågehälsan för den underordnade entitetstypen och skickar in den underordnade identifieraren.
  • De felaktiga utvärderingar som pekar på rapporten som utlöste entitetens tillstånd, om entiteten inte är felfri. Utvärderingarna är rekursiva och innehåller underordnade hälsoutvärderingar som utlöste det aktuella hälsotillståndet. En vakthund rapporterade till exempel ett fel mot en replik. Programmets hälsotillstånd visar en felaktig utvärdering på grund av en tjänst som inte är felfri. tjänsten är inte felfri på grund av en partition i fel. partitionen är inte felfri på grund av en replik i fel. repliken är inte felfri på grund av övervakningsfelets hälsorapport.
  • Hälsostatistiken för alla underordnade typer av entiteter som har underordnade. Klusterhälsa visar till exempel det totala antalet program, tjänster, partitioner, repliker och distribuerade entiteter i klustret. Ispravnost usluge visar det totala antalet partitioner och repliker under den angivna tjänsten.

Hämta klusterhälsa

Returnerar hälsotillståndet för klusterentiteten och innehåller hälsotillståndet för program och noder (underordnade i klustret). Indata:

  • [Valfritt] Den klusterhälsoprincip som används för att utvärdera noderna och klusterhändelserna.
  • [Valfritt] Programhälsoprincipkartan med de hälsoprinciper som används för att åsidosätta programmanifestprinciperna.
  • [Valfritt] Filter för händelser, noder och program som anger vilka poster som är av intresse och som ska returneras i resultatet (till exempel endast fel eller både varningar och fel). Alla händelser, noder och program används för att utvärdera entitetens aggregerade hälsa, oavsett filter.
  • [Valfritt] Filtrera för att undanta hälsostatistik.
  • [Valfritt] Filtrera för att inkludera infrastrukturresurser:/Systemhälsostatistik i hälsostatistiken. Gäller endast när hälsostatistiken inte är exkluderad. Hälsostatistiken innehåller som standard endast statistik för användarprogram och inte systemprogrammet.

API

För att få klusterhälsa skapar du en FabricClient och anropar metoden GetClusterHealthAsync på dess HealthManager.

Följande anrop hämtar klusterhälsan:

ClusterHealth clusterHealth = await fabricClient.HealthManager.GetClusterHealthAsync();

Följande kod hämtar klustrets hälsa med hjälp av en anpassad hälsoprincip för kluster och filter för noder och program. Den anger att hälsostatistiken innehåller statistiken fabric:/System. Den skapar ClusterHealthQueryDescription, som innehåller indatainformationen.

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

Cmdleten för att hämta klusterhälsan är Get-ServiceFabricClusterHealth. Anslut först till klustret med hjälp av cmdleten Connect-ServiceFabricCluster .

Klustrets tillstånd är fem noder, systemprogrammet och infrastrukturresurser:/WordCount konfigurerade enligt beskrivningen.

Följande cmdlet hämtar klusterhälsa med hjälp av standardhälsoprinciper. Det aggregerade hälsotillståndet är varning eftersom programmet fabric:/WordCount är i varningsläge. Observera hur de felaktiga utvärderingarna ger information om de villkor som utlöste den aggregerade hälsan.

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

Följande PowerShell-cmdlet hämtar hälsotillståndet för klustret med hjälp av en anpassad programprincip. Det filtrerar resultat för att endast hämta program och noder i fel eller varning. Därför returneras inga noder eftersom de alla är felfria. Endast programmet fabric:/WordCount respekterar programfiltret. Eftersom den anpassade principen anger att varningar ska betraktas som fel för programmet fabric:/WordCount utvärderas programmet som ett fel, och det är även klustret.

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

Du kan hämta klusterhälsa med en GET-begäran eller en POST-begäran som innehåller hälsoprinciper som beskrivs i brödtexten.

Hämta nodhälsa

Returnerar hälsotillståndet för en nodentitet och innehåller hälsohändelserna som rapporteras på noden. Indata:

  • [Krävs] Nodnamnet som identifierar noden.
  • [Valfritt] De inställningar för klusterhälsa som används för att utvärdera hälsotillståndet.
  • [Valfritt] Filter för händelser som anger vilka poster som är av intresse och som ska returneras i resultatet (till exempel endast fel eller både varningar och fel). Alla händelser används för att utvärdera entitetens aggregerade hälsa, oavsett filtret.

API

Om du vill hämta nodhälsa via API:et skapar du en FabricClient och anropar metoden GetNodeHealthAsync på dess HealthManager.

Följande kod hämtar nodhälsan för det angivna nodnamnet:

NodeHealth nodeHealth = await fabricClient.HealthManager.GetNodeHealthAsync(nodeName);

Följande kod hämtar nodhälsan för det angivna nodnamnet och skickar in händelsefilter och anpassad princip via 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

Cmdleten för att hämta nodhälsan är Get-ServiceFabricNodeHealth. Anslut först till klustret med hjälp av cmdleten Connect-ServiceFabricCluster . Följande cmdlet hämtar nodhälsan med hjälp av standardhälsoprinciper:

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

Följande cmdlet hämtar hälsotillståndet för alla noder i klustret:

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

Du kan få nodhälsa med en GET-begäran eller en POST-begäran som innehåller hälsoprinciper som beskrivs i brödtexten.

Hämta programhälsa

Returnerar hälsotillståndet för en programentitet. Den innehåller hälsotillståndet för det distribuerade programmet och tjänstbarnen. Indata:

  • [Krävs] Programnamnet (URI) som identifierar programmet.
  • [Valfritt] Den programhälsoprincip som används för att åsidosätta programmanifestprinciperna.
  • [Valfritt] Filter för händelser, tjänster och distribuerade program som anger vilka poster som är av intresse och som ska returneras i resultatet (till exempel endast fel eller både varningar och fel). Alla händelser, tjänster och distribuerade program används för att utvärdera entitetens aggregerade hälsa, oavsett filter.
  • [Valfritt] Filtrera för att undanta hälsostatistiken. Om inget anges innehåller hälsostatistiken antalet ok, varningar och fel för alla programbarn: tjänster, partitioner, repliker, distribuerade program och distribuerade tjänstpaket.

API

För att få programmets hälsa skapar du en FabricClient och anropar metoden GetApplicationHealthAsync på dess HealthManager.

Följande kod hämtar programhälsan för det angivna programnamnet (URI):

ApplicationHealth applicationHealth = await fabricClient.HealthManager.GetApplicationHealthAsync(applicationName);

Följande kod hämtar programhälsan för det angivna programnamnet (URI), med filter och anpassade principer som anges via 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

Cmdleten för att hämta programmets hälsa är Get-ServiceFabricApplicationHealth. Anslut först till klustret med hjälp av cmdleten Connect-ServiceFabricCluster .

Följande cmdlet returnerar hälsotillståndet för programmet 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

Följande PowerShell-cmdlet skickar anpassade principer. Den filtrerar även underordnade och händelser.

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

Du kan få programhälsa med en GET-begäran eller en POST-begäran som innehåller hälsoprinciper som beskrivs i brödtexten.

Hämta tjänstens hälsa

Returnerar hälsotillståndet för en tjänstentitet. Den innehåller partitionens hälsotillstånd. Indata:

  • [Krävs] Tjänstnamnet (URI) som identifierar tjänsten.
  • [Valfritt] Den programhälsoprincip som används för att åsidosätta programmets manifestprincip.
  • [Valfritt] Filter för händelser och partitioner som anger vilka poster som är av intresse och som ska returneras i resultatet (till exempel endast fel eller både varningar och fel). Alla händelser och partitioner används för att utvärdera entitetens aggregerade hälsa, oavsett filtret.
  • [Valfritt] Filtrera för att undanta hälsostatistik. Om inget anges visar hälsostatistiken ok, varning och felantal för alla partitioner och repliker i tjänsten.

API

För att få tjänstens hälsa via API:et skapar du en FabricClient och anropar metoden GetServiceHealthAsync på dess HealthManager.

I följande exempel hämtas hälsotillståndet för en tjänst med angivet tjänstnamn (URI):

ServiceHealth serviceHealth = await fabricClient.HealthManager.GetServiceHealthAsync(serviceName);

Följande kod hämtar tjänstens hälsotillstånd för det angivna tjänstnamnet (URI) och anger filter och anpassad princip via 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

Cmdleten för att hämta tjänstens hälsa är Get-ServiceFabricServiceHealth. Anslut först till klustret med hjälp av cmdleten Connect-ServiceFabricCluster .

Följande cmdlet hämtar tjänstens hälsotillstånd med hjälp av standardhälsoprinciper:

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

Du kan få tjänstens hälsa med en GET-begäran eller en POST-begäran som innehåller hälsoprinciper som beskrivs i brödtexten.

Hämta partitionshälsa

Returnerar hälsotillståndet för en partitionsentitet. Den innehåller replikens hälsotillstånd. Indata:

  • [Krävs] Partitions-ID (GUID) som identifierar partitionen.
  • [Valfritt] Den programhälsoprincip som används för att åsidosätta programmets manifestprincip.
  • [Valfritt] Filter för händelser och repliker som anger vilka poster som är av intresse och som ska returneras i resultatet (till exempel endast fel eller både varningar och fel). Alla händelser och repliker används för att utvärdera entitetens aggregerade hälsa, oavsett filtret.
  • [Valfritt] Filtrera för att undanta hälsostatistik. Om det inte anges visar hälsostatistiken hur många repliker som är i ok, varnings- och feltillstånd.

API

Om du vill hämta partitionshälsa via API:et skapar du en FabricClient och anropar metoden GetPartitionHealthAsync på dess HealthManager. Om du vill ange valfria parametrar skapar du PartitionHealthQueryDescription.

PartitionHealth partitionHealth = await fabricClient.HealthManager.GetPartitionHealthAsync(partitionId);

PowerShell

Cmdleten för att hämta partitionshälsan är Get-ServiceFabricPartitionHealth. Anslut först till klustret med hjälp av cmdleten Connect-ServiceFabricCluster .

Följande cmdlet hämtar hälsotillståndet för alla partitioner i tjänsten fabric:/WordCount/WordCountService och filtrerar bort replikhälsotillstånd:

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

Du kan få partitionshälsa med en GET-begäran eller en POST-begäran som innehåller hälsoprinciper som beskrivs i brödtexten.

Hämta replikhälsa

Returnerar hälsotillståndet för en tillståndskänslig tjänstreplik eller en tillståndslös tjänstinstans. Indata:

  • [Krävs] Partitions-ID (GUID) och replik-ID som identifierar repliken.
  • [Valfritt] Parametrarna för programmets hälsoprincip som används för att åsidosätta programmanifestprinciperna.
  • [Valfritt] Filter för händelser som anger vilka poster som är av intresse och som ska returneras i resultatet (till exempel endast fel eller både varningar och fel). Alla händelser används för att utvärdera entitetens aggregerade hälsa, oavsett filtret.

API

Om du vill hämta replikhälsan via API:et skapar du en FabricClient och anropar metoden GetReplicaHealthAsync på dess HealthManager. Om du vill ange avancerade parametrar använder du ReplicaHealthQueryDescription.

ReplicaHealth replicaHealth = await fabricClient.HealthManager.GetReplicaHealthAsync(partitionId, replicaId);

PowerShell

Cmdleten för att hämta replikhälsan är Get-ServiceFabricReplicaHealth. Anslut först till klustret med hjälp av cmdleten Connect-ServiceFabricCluster .

Följande cmdlet hämtar hälsotillståndet för den primära repliken för alla partitioner i tjänsten:

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

Du kan få replikhälsa med en GET-begäran eller en POST-begäran som innehåller hälsoprinciper som beskrivs i brödtexten.

Hämta distribuerad programhälsa

Returnerar hälsotillståndet för ett program som distribuerats på en nodentitet. Den innehåller hälsotillståndet för distribuerade tjänstpaket. Indata:

  • [Krävs] Programnamnet (URI) och nodnamnet (strängen) som identifierar det distribuerade programmet.
  • [Valfritt] Den programhälsoprincip som används för att åsidosätta programmanifestprinciperna.
  • [Valfritt] Filter för händelser och distribuerade tjänstpaket som anger vilka poster som är intressanta och som ska returneras i resultatet (till exempel endast fel eller både varningar och fel). Alla händelser och distribuerade tjänstpaket används för att utvärdera entitetens aggregerade hälsa, oavsett filtret.
  • [Valfritt] Filtrera för att undanta hälsostatistik. Om inget anges visar hälsostatistiken antalet distribuerade tjänstpaket i statusen ok, varning och felhälsa.

API

Om du vill hämta hälsotillståndet för ett program som distribueras på en nod via API:et skapar du en FabricClient och anropar metoden GetDeployedApplicationHealthAsync på dess HealthManager. Om du vill ange valfria parametrar använder du DeployedApplicationHealthQueryDescription.

DeployedApplicationHealth health = await fabricClient.HealthManager.GetDeployedApplicationHealthAsync(
    new DeployedApplicationHealthQueryDescription(applicationName, nodeName));

PowerShell

Cmdleten för att hämta det distribuerade programmets hälsa är Get-ServiceFabricDeployedApplicationHealth. Anslut först till klustret med hjälp av cmdleten Connect-ServiceFabricCluster . Om du vill ta reda på var ett program distribueras kör du Get-ServiceFabricApplicationHealth och tittar på de distribuerade programbarnen.

Följande cmdlet hämtar hälsotillståndet för infrastrukturresursen :/WordCount-programmet som distribueras på _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

Du kan få distribuerad programhälsa med en GET-begäran eller en POST-begäran som innehåller hälsoprinciper som beskrivs i brödtexten.

Hämta hälsotillstånd för distribuerade tjänstpaket

Returnerar hälsotillståndet för en distribuerad tjänstpaketentitet. Indata:

  • [Krävs] Programnamnet (URI), nodnamnet (strängen) och tjänstmanifestnamnet (strängen) som identifierar det distribuerade tjänstpaketet.
  • [Valfritt] Den programhälsoprincip som används för att åsidosätta programmets manifestprincip.
  • [Valfritt] Filter för händelser som anger vilka poster som är av intresse och som ska returneras i resultatet (till exempel endast fel eller både varningar och fel). Alla händelser används för att utvärdera entitetens aggregerade hälsa, oavsett filtret.

API

Om du vill hämta hälsotillståndet för ett distribuerat tjänstpaket via API:et skapar du en FabricClient och anropar metoden GetDeployedServicePackageHealthAsync på dess HealthManager. Om du vill ange valfria parametrar använder du DeployedServicePackageHealthQueryDescription.

DeployedServicePackageHealth health = await fabricClient.HealthManager.GetDeployedServicePackageHealthAsync(
    new DeployedServicePackageHealthQueryDescription(applicationName, nodeName, serviceManifestName));

PowerShell

Cmdleten för att hämta det distribuerade tjänstpaketets hälsa är Get-ServiceFabricDeployedServicePackageHealth. Anslut först till klustret med hjälp av cmdleten Connect-ServiceFabricCluster . Om du vill se var ett program distribueras kör du Get-ServiceFabricApplicationHealth och tittar på de distribuerade programmen. Om du vill se vilka tjänstpaket som finns i ett program kan du titta på de distribuerade tjänstpaketsbarnen i Get-ServiceFabricDeployedApplicationHealth-utdata .

Följande cmdlet hämtar hälsotillståndet för WordCountServicePkg-tjänstpaketet för fabric:/WordCount-programmet som distribueras på _Node_2. Entiteten har System.Hosting-rapporter för lyckad tjänstpaket- och startpunktsaktivering och lyckad registrering av tjänsttyp.

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

Du kan få status för distribuerade tjänstpaket med en GET-begäran eller en POST-begäran som innehåller hälsoprinciper som beskrivs i brödtexten.

Frågor om hälsosegment

Hälsosegmentfrågorna kan returnera klusterbarn på flera nivåer (rekursivt) per indatafilter. Det stöder avancerade filter som gör det möjligt att returnera mycket flexibilitet när det gäller att välja underordnade. Filtren kan ange underordnade efter den unika identifieraren eller av andra gruppidentifierare och/eller hälsotillstånd. Som standard ingår inga underordnade objekt, till skillnad från hälsokommandon som alltid innehåller underordnade på första nivån.

Hälsofrågorna returnerar endast underordnade på första nivån för den angivna entiteten per nödvändiga filter. För att hämta underordnade barn måste du anropa ytterligare hälso-API:er för varje entitet av intresse. För att få hälsotillståndet för specifika entiteter måste du anropa ett hälso-API för varje önskad entitet. Med avancerad filtrering av segmentfrågor kan du begära flera intressanta objekt i en fråga, vilket minimerar meddelandestorleken och antalet meddelanden.

Värdet för segmentfrågan är att du kan få hälsotillstånd för fler klusterentiteter (potentiellt alla klusterentiteter som börjar vid nödvändig rot) i ett anrop. Du kan uttrycka komplexa hälsofrågor som:

  • Returnera endast program i fel, och för dessa program inkluderar alla tjänster i varning eller fel. Inkludera alla partitioner för returnerade tjänster.
  • Returnera endast hälsotillståndet för fyra program, som anges av deras namn.
  • Returnera endast hälsotillståndet för program av önskad programtyp.
  • Returnera alla distribuerade entiteter på en nod. Returnerar alla program, alla distribuerade program på den angivna noden och alla distribuerade tjänstpaket på den noden.
  • Returnera alla repliker i fel. Returnerar alla program, tjänster, partitioner och endast repliker i fel.
  • Returnera alla program. Inkludera alla partitioner för en angiven tjänst.

För närvarande exponeras hälsosegmentfrågan endast för klusterentiteten. Den returnerar ett klusterhälsosegment som innehåller:

  • Klustrets aggregerade hälsotillstånd.
  • Segmentlistan för hälsotillstånd med noder som respekterar indatafilter.
  • Segmentlistan för hälsotillstånd för program som respekterar indatafilter. Varje programhälsotillståndssegment innehåller en segmentlista med alla tjänster som respekterar indatafilter och en segmentlista med alla distribuerade program som respekterar filtren. Samma sak gäller för underordnade tjänster och distribuerade program. På så sätt kan alla entiteter i klustret eventuellt returneras om det begärs, på ett hierarkiskt sätt.

Fråga om klusterhälsosegment

Returnerar hälsotillståndet för klusterentiteten och innehåller de hierarkiska hälsotillståndssegmenten för nödvändiga underordnade. Indata:

  • [Valfritt] Den klusterhälsoprincip som används för att utvärdera noderna och klusterhändelserna.
  • [Valfritt] Programhälsoprincipkartan med de hälsoprinciper som används för att åsidosätta programmanifestprinciperna.
  • [Valfritt] Filter för noder och program som anger vilka poster som är intressanta och som ska returneras i resultatet. Filtren är specifika för en entitet/grupp av entiteter eller gäller för alla entiteter på den nivån. Listan med filter kan innehålla ett allmänt filter och/eller filter för specifika identifierare för detaljerade entiteter som returneras av frågan. Om de är tomma returneras inte underordnade objekt som standard. Läs mer om filtren på NodeHealthStateFilter och ApplicationHealthStateFilter. Programfiltren kan rekursivt ange avancerade filter för underordnade.

Segmentresultatet innehåller de underordnade objekt som respekterar filtren.

För närvarande returnerar segmentfrågan inte felfria utvärderingar eller entitetshändelser. Den extra informationen kan hämtas med hjälp av den befintliga klusterhälsofrågan.

API

Om du vill hämta klustrets hälsosegment skapar du en FabricClient och anropar metoden GetClusterHealthChunkAsync på dess HealthManager. Du kan skicka in ClusterHealthQueryDescription för att beskriva hälsoprinciper och avancerade filter.

Följande kod hämtar klustrets hälsosegment med avancerade filter.

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

Cmdleten för att hämta klusterhälsan är Get-ServiceFabricClusterChunkHealth. Anslut först till klustret med hjälp av cmdleten Connect-ServiceFabricCluster .

Följande kod hämtar endast noder om de är i Fel förutom en specifik nod, som alltid ska returneras.

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

Följande cmdlet hämtar klustersegment med programfilter.

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

Följande cmdlet returnerar alla distribuerade entiteter på en nod.

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

Du kan hämta klustrets hälsosegment med en GET-begäran eller en POST-begäran som innehåller hälsoprinciper och avancerade filter som beskrivs i brödtexten.

Allmänna frågor

Allmänna frågor returnerar en lista över Service Fabric-entiteter av en angiven typ. De exponeras via API:et (via metoderna i FabricClient.QueryManager), PowerShell-cmdletar och REST. Dessa frågor aggregerar underfrågor från flera komponenter. En av dem är hälsoarkivet, som fyller det aggregerade hälsotillståndet för varje frågeresultat.

Kommentar

Allmänna frågor returnerar entitetens aggregerade hälsotillstånd och innehåller inte omfattande hälsodata. Om en entitet inte är felfri kan du följa upp med hälsofrågor för att hämta all dess hälsoinformation, inklusive händelser, hälsotillstånd för barn och utvärderingar som inte är felfria.

Om allmänna frågor returnerar ett okänt hälsotillstånd för en entitet är det möjligt att hälsoarkivet inte har fullständiga data om entiteten. Det är också möjligt att en underfråga till hälsoarkivet inte lyckades (till exempel uppstod ett kommunikationsfel eller att hälsoarkivet begränsades). Följ upp med en hälsofråga för entiteten. Om underfrågan påträffade tillfälliga fel, till exempel nätverksproblem, kan den här uppföljningsfrågan lyckas. Det kan också ge dig mer information från hälsoarkivet om varför entiteten inte exponeras.

Frågorna som innehåller HealthState för entiteter är:

Kommentar

Vissa av frågorna returnerar sidiga resultat. Returen av dessa frågor är en lista som härleds från PagedList<T>. Om resultatet inte passar ett meddelande returneras bara en sida och en ContinuationToken som spårar var uppräkningen stoppades. Fortsätt att anropa samma fråga och skicka in fortsättningstoken från föregående fråga för att få nästa resultat.

Exempel

Följande kod hämtar de program som inte är felfria i klustret:

var applications = fabricClient.QueryManager.GetApplicationListAsync().Result.Where(
  app => app.HealthState == HealthState.Error);

Följande cmdlet hämtar programinformationen för programmet fabric:/WordCount. Observera att hälsotillståndet är vid varning.

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"}]" }

Följande cmdlet hämtar tjänsterna med ett feltillstånd för hälsotillståndet:

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

Kluster- och programuppgraderingar

Under en övervakad uppgradering av klustret och programmet kontrollerar Service Fabric hälsotillståndet för att säkerställa att allt förblir felfritt. Om en entitet inte är felfri enligt utvärdering med hjälp av konfigurerade hälsoprinciper tillämpar uppgraderingen uppgraderingsspecifika principer för att fastställa nästa åtgärd. Uppgraderingen kan pausas för att tillåta användarinteraktion (till exempel att åtgärda feltillstånd eller ändra principer), eller så kan den automatiskt återställas till den tidigare bra versionen.

Under en klusteruppgradering kan du hämta status för klusteruppgradering. Uppgraderingsstatusen innehåller utvärderingar som inte är felfria, vilket pekar på vad som är felfritt i klustret. Om uppgraderingen återställs på grund av hälsoproblem kommer uppgraderingsstatusen ihåg de senaste felorsakerna. Den här informationen kan hjälpa administratörer att undersöka vad som gick fel när uppgraderingen återställdes eller stoppades.

Under en programuppgradering finns även eventuella felaktiga utvärderingar i programuppgraderingsstatusen.

Följande visar programuppgraderingsstatus för en modifierad infrastrukturresurs:/WordCount-program. En vakthund rapporterade ett fel på en av replikerna. Uppgraderingen återställs eftersom hälsokontrollerna inte respekteras.

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

Läs mer om uppgraderingen av Service Fabric-programmet.

Använda hälsoutvärderingar för att felsöka

När det uppstår ett problem med klustret eller ett program kan du titta på klustret eller programmets hälsa för att fastställa vad som är fel. Utvärderingarna med feltillstånd ger information om vad som utlöste det aktuella tillståndet för feltillstånd. Om du behöver kan du öka detaljnivån i underordnade entiteter som inte är felfria för att identifiera rotorsaken.

Anta till exempel att ett program är felaktigt eftersom det finns en felrapport på en av replikerna. Följande PowerShell-cmdlet visar de felaktiga utvärderingarna:

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

Du kan titta på repliken för att få mer information:

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

Kommentar

De felaktiga utvärderingarna visar den första orsaken till att entiteten utvärderas till aktuellt hälsotillstånd. Det kan finnas flera andra händelser som utlöser det här tillståndet, men de återspeglas inte i utvärderingarna. Om du vill få mer information kan du öka detaljnivån i hälsoentiteterna för att ta reda på alla rapporter som inte är felfria i klustret.

Nästa steg

Felsök med hjälp av systemhälsorapporter

Lägga till anpassade Service Fabric-hälsorapporter

Så här rapporterar och kontrollerar du tjänstens hälsa

Övervaka och diagnostisera tjänster lokalt

Uppgradering av Service Fabric-program