Sdílet prostřednictvím


Zobrazení sestav stavu Service Fabric

Azure Service Fabric zavádí model stavu s entitami stavu, na kterých můžou systémové komponenty a watchdogs hlásit místní podmínky, které monitorují. Úložiště stavu agreguje všechna data o stavu a určí, jestli jsou entity v pořádku.

Cluster se automaticky naplní sestavami stavu odesílanými systémovými komponentami. Další informace najdete v článku Použití sestav stavu systému k řešení potíží.

Service Fabric nabízí několik způsobů, jak získat agregovaný stav entit:

  • Service Fabric Explorer nebo jiné vizualizační nástroje
  • Dotazy na stav (prostřednictvím PowerShellu, rozhraní API nebo REST)
  • Obecné dotazy, které vracejí seznam entit, které mají stav jako jednu z vlastností (prostřednictvím PowerShellu, rozhraní API nebo REST)

Abychom si ukázali tyto možnosti, použijeme místní cluster s pěti uzly a aplikací fabric:/WordCount. Aplikace fabric:/WordCount obsahuje dvě výchozí služby, stavovou službu typu WordCountServiceTypea bezstavovou službu typu WordCountWebServiceType. Změnil(a) ApplicationManifest.xml jsem požadavek na sedm cílových replik pro stavovou službu a jeden oddíl. Vzhledem k tomu, že v clusteru je pouze pět uzlů, systémové komponenty hlásí upozornění na oddíl služby, protože je pod cílovým počtem.

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

Stav v Service Fabric Exploreru

Service Fabric Explorer poskytuje vizuální zobrazení clusteru. Na následujícím obrázku vidíte, že:

  • Prostředky infrastruktury aplikace :/WordCount jsou červené (v chybě), protože má chybovou událost hlášenou aplikací MyWatchdog pro vlastnost Availability.
  • Jedna ze svých služeb fabric :/WordCount/WordCountService je žlutá (v upozornění). Služba je nakonfigurovaná se sedmi replikami a cluster má pět uzlů, takže nelze umístit dvě repliky. I když se zde nezobrazuje, oddíl služby je žlutý, protože systémová sestava System.FM říká, že Partition is below target replica or instance count. Žlutý oddíl aktivuje žlutou službu.
  • Cluster je červený kvůli červené aplikaci.

Vyhodnocení používá výchozí zásady z manifestu clusteru a manifestu aplikace. Jedná se o přísné zásady a netolerují žádné selhání.

Zobrazení clusteru pomocí Service Fabric Exploreru:

Zobrazení clusteru pomocí Service Fabric Exploreru

Poznámka:

Přečtěte si další informace o Service Fabric Exploreru.

Dotazy na stav

Service Fabric zveřejňuje dotazy na stav pro každý z podporovaných typů entit. K nim lze přistupovat prostřednictvím rozhraní API pomocí metod v Rutinách FabricClient.HealthManager, rutinách PowerShellu a REST. Tyto dotazy vrací úplné informace o stavu entity: agregovaný stav, události stavu entit, podřízené stavy (pokud je k dispozici), vyhodnocení, které není v pořádku, a podřízené statistiky stavu (pokud je to možné).

Poznámka:

Entita stavu se vrátí, když se plně naplní v úložišti stavu. Entita musí být aktivní (neodstraněná) a musí mít systémovou sestavu. Nadřazené entity v řetězu hierarchie musí mít také systémové sestavy. Pokud některé z těchto podmínek nejsou splněné, vrátí dotazy na stav výjimky FabricException s FabricErrorCodeFabricHealthEntityNotFound, které ukazují, proč se entita nevrátí.

Dotazy na stav musí předávat identifikátor entity, který závisí na typu entity. Dotazy přijímají volitelné parametry zásad stavu. Pokud nejsou zadány žádné zásady stavu, zásady stavu z clusteru nebo manifestu aplikace se použijí k vyhodnocení. Pokud manifesty neobsahují definici zásad stavu, použijí se k vyhodnocení výchozí zásady stavu. Výchozí zásady stavu netolerují žádné chyby. Dotazy také přijímají filtry pro vrácení pouze částečných podřízených objektů nebo událostí – ty, které respektují zadané filtry. Jiný filtr umožňuje vyloučit podřízené statistiky.

Poznámka:

Výstupní filtry se použijí na straně serveru, takže se zmenší velikost odpovědi na zprávu. Doporučujeme použít výstupní filtry k omezení vrácených dat místo použití filtrů na straně klienta.

Stav entity obsahuje:

  • Agregovaný stav entity. Vypočítá se úložištěm stavu na základě sestav stavu entit, podřízených stavů (pokud je to možné) a zásad stavu. Přečtěte si další informace o vyhodnocení stavu entit.
  • Události stavu entity.
  • Kolekce stavů všech podřízených položek pro entity, které můžou mít podřízené položky. Stavy obsahují identifikátory entit a agregovaný stav. Chcete-li získat úplný stav pro dítě, zavolejte stav dotazu pro podřízený typ entity a předejte podřízený identifikátor.
  • Vyhodnocení, která nejsou v pořádku, odkazují na sestavu, která aktivovala stav entity, pokud entita není v pořádku. Vyhodnocení jsou rekurzivní a obsahují podřízené vyhodnocení stavu, které aktivovaly aktuální stav. Sledovací zařízení například nahlásilo chybu proti replice. Stav aplikace ukazuje vyhodnocení, které není v pořádku kvůli službě, která není v pořádku; služba není v pořádku kvůli chybě oddílu; oddíl není v pořádku kvůli chybě repliky; replika není v pořádku kvůli zprávě o stavu chyby sledovacího zařízení.
  • Statistika stavu pro všechny podřízené typy entit, které mají podřízené položky. Například stav clusteru zobrazuje celkový počet aplikací, služeb, oddílů, replik a nasazených entit v clusteru. Stav služby zobrazuje celkový počet oddílů a replik v rámci zadané služby.

Získání stavu clusteru

Vrátí stav entity clusteru a obsahuje stavy aplikací a uzlů (podřízené položky clusteru). Vstup:

  • [Volitelné] Zásady stavu clusteru použité k vyhodnocení uzlů a událostí clusteru.
  • [Volitelné] Mapa zásad stavu aplikace se zásadami stavu použitými k přepsání zásad manifestu aplikace.
  • [Volitelné] Filtry pro události, uzly a aplikace, které určují, které položky jsou zajímavé, a měly by se vrátit ve výsledku (například pouze chyby nebo upozornění i chyby). Všechny události, uzly a aplikace slouží k vyhodnocení agregovaného stavu entity bez ohledu na filtr.
  • [Volitelné] Filtrováním vyloučíte statistiky o stavu.
  • [Volitelné] Filtr pro zahrnutí prostředků infrastruktury:/Statistika stavu systému do statistik stavu Platí pouze v případě, že nejsou vyloučeny statistiky o stavu. Statistika stavu ve výchozím nastavení zahrnuje pouze statistiky pro uživatelské aplikace, nikoli systémovou aplikaci.

rozhraní API

Pokud chcete získat stav clusteru, vytvořte FabricClient a volejte metodu GetClusterHealthAsync na svém HealthManageru.

Následující volání získá stav clusteru:

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

Následující kód získá stav clusteru pomocí vlastních zásad stavu clusteru a filtrů pro uzly a aplikace. Určuje, že statistika stavu zahrnuje statistiky infrastruktury:/Systémové statistiky. Vytvoří clusterHealthQueryDescription, který obsahuje vstupní informace.

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

Rutina pro získání stavu clusteru je Get-ServiceFabricClusterHealth. Nejprve se připojte ke clusteru pomocí rutiny Connect-ServiceFabricCluster .

Stav clusteru je pět uzlů, systémová aplikace a prostředky infrastruktury:/WordCount nakonfigurované podle popisu.

Následující rutina získá stav clusteru pomocí výchozích zásad stavu. Agregovaný stav je upozornění, protože aplikace fabric:/WordCount je v upozornění. Všimněte si, jak vyhodnocení, které není v pořádku, poskytují podrobnosti o podmínkách, které aktivovaly agregovaný stav.

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

Následující rutina PowerShellu získá stav clusteru pomocí vlastních zásad aplikace. Filtruje výsledky, aby se při chybě nebo upozornění zobrazily jenom aplikace a uzly. V důsledku toho se nevrátí žádné uzly, protože jsou všechny v pořádku. Filtr aplikací respektuje pouze aplikace fabric:/WordCount. Vzhledem k tomu, že vlastní zásada určuje, že se mají upozornění považovat za chyby pro aplikaci fabric:/WordCount, vyhodnotí se aplikace jako v chybě, a tak i cluster.

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

Stav clusteru můžete získat pomocí požadavku GET nebo požadavku POST, který obsahuje zásady stavu popsané v textu.

Získání stavu uzlu

Vrátí stav entity uzlu a obsahuje události stavu hlášené na uzlu. Vstup:

  • [Povinné] Název uzlu, který identifikuje uzel.
  • [Volitelné] Nastavení zásad stavu clusteru použité k vyhodnocení stavu.
  • [Volitelné] Filtry pro události, které určují, které položky jsou zajímavé, a měly by být vráceny ve výsledku (například pouze chyby nebo upozornění i chyby). Všechny události se používají k vyhodnocení agregovaného stavu entity bez ohledu na filtr.

rozhraní API

Pokud chcete získat stav uzlu prostřednictvím rozhraní API, vytvořte FabricClient metodu GetNodeHealthAsync na svém HealthManageru a zavolejte ji.

Následující kód získá stav uzlu pro zadaný název uzlu:

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

Následující kód získá stav uzlu pro zadaný název uzlu a předá filtr událostí a vlastní zásady prostřednictvím 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

Rutina pro získání stavu uzlu je Get-ServiceFabricNodeHealth. Nejprve se připojte ke clusteru pomocí rutiny Connect-ServiceFabricCluster . Následující rutina získá stav uzlu pomocí výchozích zásad stavu:

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

Následující rutina získá stav všech uzlů v clusteru:

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

Stav uzlu můžete získat pomocí požadavku GET nebo požadavku POST, který obsahuje zásady stavu popsané v textu.

Získání stavu aplikace

Vrátí stav entity aplikace. Obsahuje stavy nasazené aplikace a podřízených položek služby. Vstup:

  • [Povinné] Název aplikace (URI), který identifikuje aplikaci.
  • [Volitelné] Zásady stavu aplikace použité k přepsání zásad manifestu aplikace.
  • [Volitelné] Filtry pro události, služby a nasazené aplikace, které určují, které položky jsou zajímavé, a měly by se vrátit ve výsledku (například pouze chyby nebo upozornění i chyby). Všechny události, služby a nasazené aplikace se používají k vyhodnocení agregovaného stavu entity bez ohledu na filtr.
  • [Volitelné] Filtrováním vyloučíte statistiky o stavu. Pokud není zadaný, statistika stavu zahrnuje počet chyb ok, upozornění a počet chyb pro všechny podřízené aplikace: služby, oddíly, repliky, nasazené aplikace a nasazené balíčky služeb.

rozhraní API

Pokud chcete získat stav aplikace, vytvořte FabricClient metodu GetApplicationHealthAsync na svém HealthManageru a zavolejte ji.

Následující kód získá stav aplikace pro zadaný název aplikace (URI):

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

Následující kód získá stav aplikace pro zadaný název aplikace (URI) s filtry a vlastními zásadami zadanými prostřednictvím 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

Rutina pro získání stavu aplikace je Get-ServiceFabricApplicationHealth. Nejprve se připojte ke clusteru pomocí rutiny Connect-ServiceFabricCluster .

Následující rutina vrátí stav aplikace 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

Následující rutina PowerShellu předává vlastní zásady. Filtruje také podřízené položky a události.

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

Stav aplikace můžete získat pomocí požadavku GET nebo požadavku POST, který obsahuje zásady stavu popsané v textu.

Získání stavu služby

Vrátí stav entity služby. Obsahuje stavy stavu oddílu. Vstup:

  • [Povinné] Název služby (URI), který službu identifikuje.
  • [Volitelné] Zásady stavu aplikace použité k přepsání zásad manifestu aplikace.
  • [Volitelné] Filtry pro události a oddíly, které určují, které položky jsou zajímavé, a měly by se vrátit ve výsledku (například pouze chyby nebo upozornění i chyby). Všechny události a oddíly se používají k vyhodnocení agregovaného stavu entity bez ohledu na filtr.
  • [Volitelné] Filtrováním vyloučíte statistiky o stavu. Pokud není zadaný, statistika stavu zobrazuje počet chyb ok, upozornění a počet chyb pro všechny oddíly a repliky služby.

rozhraní API

Pokud chcete získat stav služby prostřednictvím rozhraní API, vytvořte FabricClient metodu GetServiceHealthAsync na svém HealthManageru a zavolejte ji.

Následující příklad získá stav služby se zadaným názvem služby (URI):

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

Následující kód získá stav služby pro zadaný název služby (URI), který určuje filtry a vlastní zásady prostřednictvím 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

Rutina pro získání stavu služby je Get-ServiceFabricServiceHealth. Nejprve se připojte ke clusteru pomocí rutiny Connect-ServiceFabricCluster .

Následující rutina získá stav služby pomocí výchozích zásad stavu:

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

Stav služby můžete získat pomocí požadavku GET nebo požadavku POST, který obsahuje zásady stavu popsané v textu.

Získání stavu oddílu

Vrátí stav entity oddílu. Obsahuje stavy stavu repliky. Vstup:

  • [Povinné] ID oddílu (GUID), které identifikuje oddíl.
  • [Volitelné] Zásady stavu aplikace použité k přepsání zásad manifestu aplikace.
  • [Volitelné] Filtry pro události a repliky, které určují, které položky jsou zajímavé, a měly by se vrátit ve výsledku (například pouze chyby nebo upozornění i chyby). Všechny události a repliky se používají k vyhodnocení agregovaného stavu entity bez ohledu na filtr.
  • [Volitelné] Filtrováním vyloučíte statistiky o stavu. Pokud není zadáno, statistika stavu ukazuje, kolik replik je v pořádku, upozornění a chybové stavy.

rozhraní API

Pokud chcete získat stav oddílu prostřednictvím rozhraní API, vytvořte FabricClient metodu GetPartitionHealthAsync na svém HealthManageru a volejte ji. Pokud chcete zadat volitelné parametry, vytvořte PartitionHealthQueryDescription.

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

PowerShell

Rutina pro získání stavu oddílu je Get-ServiceFabricPartitionHealth. Nejprve se připojte ke clusteru pomocí rutiny Connect-ServiceFabricCluster .

Následující rutina získá stav všech oddílů služby fabric:/WordCount/WordCountService a vyfiltruje stav repliky:

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

Stav oddílu můžete získat pomocí požadavku GET nebo požadavku POST, který obsahuje zásady stavu popsané v textu.

Získání stavu repliky

Vrátí stav repliky stavové služby nebo instance bezstavové služby. Vstup:

  • [Povinné] ID oddílu (GUID) a ID repliky, které repliku identifikují.
  • [Volitelné] Parametry zásad stavu aplikace používané k přepsání zásad manifestu aplikace.
  • [Volitelné] Filtry pro události, které určují, které položky jsou zajímavé, a měly by být vráceny ve výsledku (například pouze chyby nebo upozornění i chyby). Všechny události se používají k vyhodnocení agregovaného stavu entity bez ohledu na filtr.

rozhraní API

Pokud chcete získat stav repliky prostřednictvím rozhraní API, vytvořte FabricClient metodu GetReplicaHealthAsync na svém HealthManageru a zavolejte ji. Pokud chcete zadat pokročilé parametry, použijte ReplicaHealthQueryDescription.

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

PowerShell

Rutina pro získání stavu repliky je Get-ServiceFabricReplicaHealth. Nejprve se připojte ke clusteru pomocí rutiny Connect-ServiceFabricCluster .

Následující rutina získá stav primární repliky pro všechny oddíly služby:

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

Stav repliky můžete získat pomocí požadavku GET nebo požadavku POST, který obsahuje zásady stavu popsané v textu.

Získání stavu nasazené aplikace

Vrátí stav aplikace nasazené v entitě uzlu. Obsahuje stavy stavu nasazeného balíčku služby. Vstup:

  • [Povinné] Název aplikace (URI) a název uzlu (řetězec), které identifikují nasazenou aplikaci.
  • [Volitelné] Zásady stavu aplikace použité k přepsání zásad manifestu aplikace.
  • [Volitelné] Filtry pro události a nasazené balíčky služeb, které určují, které položky jsou zajímavé, a měly by se vrátit ve výsledku (například pouze chyby nebo upozornění i chyby). Všechny události a nasazené balíčky služeb se používají k vyhodnocení agregovaného stavu entity bez ohledu na filtr.
  • [Volitelné] Filtrováním vyloučíte statistiky o stavu. Pokud není zadaný, statistika stavu zobrazuje počet nasazených balíčků služby v pořádku, upozornění a stavu chyb.

rozhraní API

Pokud chcete získat stav aplikace nasazené na uzlu prostřednictvím rozhraní API, vytvořte FabricClient metodu GetDeployedApplicationHealthAsync a volejte ji na svém HealthManageru. Pokud chcete zadat volitelné parametry, použijte parametr DeployedApplicationHealthQueryDescription.

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

PowerShell

Rutina pro získání nasazeného stavu aplikace je Get-ServiceFabricDeployedApplicationHealth. Nejprve se připojte ke clusteru pomocí rutiny Connect-ServiceFabricCluster . Pokud chcete zjistit, kde je aplikace nasazená, spusťte Get-ServiceFabricApplicationHealth a podívejte se na podřízené položky nasazené aplikace.

Následující rutina získá stav aplikace fabric:/WordCount nasazené v _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

Stav aplikace můžete nasadit pomocí požadavku GET nebo požadavku POST, který obsahuje zásady stavu popsané v textu.

Získání stavu nasazených balíčků služeb

Vrátí stav entity nasazeného balíčku služby. Vstup:

  • [Povinné] Název aplikace (URI), název uzlu (řetězec) a název manifestu služby (řetězec), které identifikují nasazený balíček služby.
  • [Volitelné] Zásady stavu aplikace použité k přepsání zásad manifestu aplikace.
  • [Volitelné] Filtry pro události, které určují, které položky jsou zajímavé, a měly by být vráceny ve výsledku (například pouze chyby nebo upozornění i chyby). Všechny události se používají k vyhodnocení agregovaného stavu entity bez ohledu na filtr.

rozhraní API

Pokud chcete získat stav nasazeného balíčku služby prostřednictvím rozhraní API, vytvořte FabricClient a volejte metodu GetDeployedServicePackageHealthAsync na svém HealthManageru. Pokud chcete zadat volitelné parametry, použijte parametr DeployedServicePackageHealthQueryDescription.

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

PowerShell

Rutina pro získání stavu nasazeného balíčku služby je Get-ServiceFabricDeployedServicePackageHealth. Nejprve se připojte ke clusteru pomocí rutiny Connect-ServiceFabricCluster . Pokud chcete zjistit, kde je aplikace nasazená, spusťte Get-ServiceFabricApplicationHealth a podívejte se na nasazené aplikace. Pokud chcete zjistit, které balíčky služeb jsou v aplikaci, podívejte se na podřízené balíčky nasazené služby ve výstupu Get-ServiceFabricDeployedApplicationHealth .

Následující rutina získá stav balíčku služby WordCountServicePkg aplikace fabric:/WordCount nasazené na _Node_2. Entita obsahuje sestavy System.Hosting pro úspěšnou aktivaci balíčku služeb a vstupního bodu a úspěšnou registraci typu služby.

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

Stav balíčku služby můžete nasadit pomocí požadavku GET nebo požadavku POST, který obsahuje zásady stavu popsané v textu.

Dotazy na blok stavu

Dotazy na blok stavu můžou na vstupní filtry vracet podřízené clustery s více úrovněmi (rekurzivně). Podporuje pokročilé filtry, které umožňují spoustu flexibility při výběru podřízených položek, které se mají vrátit. Filtry můžou určovat podřízené položky podle jedinečného identifikátoru nebo podle jiných identifikátorů skupin a/nebo stavů. Ve výchozím nastavení nejsou zahrnuty žádné podřízené položky, na rozdíl od příkazů stavu, které vždy obsahují podřízené položky první úrovně.

Dotazy na stav vrací pouze podřízené položky první úrovně zadané entity podle požadovaných filtrů. Abyste získali podřízené položky, musíte pro každou entitu, která vás zajímají, volat další rozhraní API pro stav. Podobně pokud chcete získat stav konkrétních entit, musíte pro každou požadovanou entitu volat jedno rozhraní API stavu. Rozšířené filtrování dotazu bloků dat umožňuje požadovat více položek, které vás zajímají v jednom dotazu, což minimalizuje velikost zprávy a počet zpráv.

Hodnota dotazu bloku dat spočívá v tom, že v jednom volání můžete získat stav pro více entit clusteru (potenciálně všechny entity clusteru začínající na požadovaném kořenovém adresáři). Můžete vyjádřit složitý dotaz na stav, například:

  • Vrátit pouze aplikace v chybě a pro tyto aplikace zahrnují všechny služby v upozornění nebo chybě. U vrácených služeb zahrňte všechny oddíly.
  • Vrátí pouze stav čtyř aplikací určených jejich názvy.
  • Vrátí pouze stav aplikací požadovaného typu aplikace.
  • Vrátí všechny nasazené entity na uzlu. Vrátí všechny aplikace, všechny nasazené aplikace na zadaném uzlu a všechny nasazené balíčky služby na daném uzlu.
  • Vrátí všechny repliky s chybou. Vrátí všechny aplikace, služby, oddíly a pouze repliky v chybě.
  • Vrátí všechny aplikace. Pro zadanou službu zahrňte všechny oddíly.

V současné době je dotaz bloku stavu zpřístupněn pouze pro entitu clusteru. Vrátí blok stavu clusteru, který obsahuje:

  • Agregovaný stav clusteru.
  • Seznam bloků stavu uzlů, které respektují vstupní filtry.
  • Seznam bloků stavu aplikací, které respektují vstupní filtry. Každý blok stavu aplikace obsahuje seznam bloků dat se všemi službami, které respektují vstupní filtry, a seznam bloků dat se všemi nasazenými aplikacemi, které respektují filtry. Stejné jako u podřízených položek služeb a nasazených aplikací. Tímto způsobem můžou být všechny entity v clusteru potenciálně vráceny, pokud jsou požadovány, hierarchicky.

Dotaz bloku stavu clusteru

Vrátí stav entity clusteru a obsahuje hierarchické bloky stavu požadovaných podřízených položek. Vstup:

  • [Volitelné] Zásady stavu clusteru použité k vyhodnocení uzlů a událostí clusteru.
  • [Volitelné] Mapa zásad stavu aplikace se zásadami stavu použitými k přepsání zásad manifestu aplikace.
  • [Volitelné] Filtry pro uzly a aplikace, které určují, které položky jsou zajímavé, a měly by být vráceny ve výsledku. Filtry jsou specifické pro entitu nebo skupinu entit nebo jsou použitelné pro všechny entity na této úrovni. Seznam filtrů může obsahovat jeden obecný filtr nebo filtry pro konkrétní identifikátory pro jemně odstupňované entity vrácené dotazem. Pokud jsou prázdné, podřízené položky se ve výchozím nastavení nevrátí. Přečtěte si další informace o filtrech v NodeHealthStateFilter a ApplicationHealthStateFilter. Filtry aplikací můžou rekurzivně určovat pokročilé filtry pro podřízené položky.

Výsledek bloku obsahuje podřízené položky, které respektují filtry.

V současné době dotaz bloku nevrací vyhodnocení v pořádku ani události entit. Další informace lze získat pomocí existujícího dotazu na stav clusteru.

rozhraní API

Pokud chcete získat blok stavu clusteru, vytvořte FabricClient metodu GetClusterHealthChunkAsync na svém HealthManageru a zavolejte ji. ClusterHealthQueryDescription můžete předat popis zásad stavu a pokročilých filtrů.

Následující kód získá blok stavu clusteru s pokročilými filtry.

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

Rutina pro získání stavu clusteru je Get-ServiceFabricClusterChunkHealth. Nejprve se připojte ke clusteru pomocí rutiny Connect-ServiceFabricCluster .

Následující kód získá uzly pouze v případě, že jsou v chybě s výjimkou konkrétního uzlu, který by se měl vždy vrátit.

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

Následující rutina získá blok dat clusteru s filtry aplikací.

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

Následující rutina vrátí všechny nasazené entity na uzlu.

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

Blok stavu clusteru můžete získat pomocí požadavku GET nebo požadavku POST, který obsahuje zásady stavu a pokročilé filtry popsané v textu.

Obecné dotazy

Obecné dotazy vrátí seznam entit Service Fabric zadaného typu. Jsou přístupné prostřednictvím rozhraní API (prostřednictvím metod v FabricClient.QueryManager), rutin PowerShellu a rest. Tyto dotazy agregují poddotazy z více komponent. Jedním z nich je úložiště stavu, které naplní agregovaný stav každého výsledku dotazu.

Poznámka:

Obecné dotazy vrací agregovaný stav entity a neobsahují bohatá data o stavu. Pokud entita není v pořádku, můžete pomocí dotazů na stav získat všechny informace o stavu, včetně událostí, stavů podřízených a vyhodnocení, které nejsou v pořádku.

Pokud obecné dotazy vrátí pro entitu neznámý stav, je možné, že úložiště stavu neobsahuje úplná data o entitě. Je také možné, že poddotaz do úložiště stavu nebyl úspěšný (například došlo k chybě komunikace nebo došlo k omezení úložiště stavu). Projděte si dotaz na stav entity. Pokud poddotaz zjistil přechodné chyby, jako jsou problémy se sítí, může být tento následný dotaz úspěšný. Může vám také poskytnout další podrobnosti z úložiště stavu o tom, proč entita není vystavena.

Dotazy, které obsahují HealthState pro entity, jsou:

Poznámka:

Některé dotazy vrací stránkované výsledky. Návrat těchto dotazů je seznam odvozený z PagedList<T>. Pokud se výsledky nevejdou do zprávy, vrátí se pouze stránka a funkce ContinuationToken, která sleduje, kde se výčet zastavil. Pokračujte voláním stejného dotazu a předáním tokenu pro pokračování z předchozího dotazu získejte další výsledky.

Příklady

Následující kód získá aplikace, které nejsou v pořádku, v clusteru:

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

Následující rutina získá podrobnosti aplikace pro aplikaci fabric:/WordCount. Všimněte si, že stav je v upozornění.

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

Následující rutina získá služby se stavem chyby:

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

Upgrady clusteru a aplikací

Během monitorovaného upgradu clusteru a aplikace Service Fabric kontroluje stav, aby se zajistilo, že všechno zůstane v pořádku. Pokud entita není v pořádku, jak je vyhodnoceno pomocí nakonfigurovaných zásad stavu, upgrade použije zásady specifické pro upgrade a určí další akci. Upgrade může být pozastaven, aby umožňoval interakci uživatelů (například opravu chybových podmínek nebo změnu zásad), nebo se může automaticky vrátit k předchozí dobré verzi.

Během upgradu clusteru můžete získat stav upgradu clusteru. Stav upgradu zahrnuje vyhodnocení, která jsou v pořádku, což ukazuje na to, co není v clusteru v pořádku. Pokud se upgrade vrátí zpět kvůli problémům se stavem, stav upgradu si pamatuje poslední důvody, které nejsou v pořádku. Tyto informace můžou správcům pomoct zjistit, co se po vrácení nebo zastavení upgradu nepovedlo.

Podobně během upgradu aplikace jsou všechna vyhodnocení, která nejsou v pořádku, obsažena ve stavu upgradu aplikace.

Následující příklad ukazuje stav upgradu aplikace pro upravenou aplikaci fabric:/WordCount. Sledovací zařízení nahlásilo chybu na jedné z jejích replik. Upgrade se vrací zpět, protože se nerespektují kontroly stavu.

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

Přečtěte si další informace o upgradu aplikace Service Fabric.

Řešení potíží s využitím vyhodnocení stavu

Kdykoli dojde k problému s clusterem nebo aplikací, podívejte se na stav clusteru nebo aplikace a zjistěte, co je špatně. Vyhodnocení, které není v pořádku, obsahují podrobnosti o tom, co aktivovalo aktuální stav v pořádku. Pokud potřebujete, můžete přejít k podrobnostem o podřízených entitách, které nejsou v pořádku, a identifikovat původní příčinu.

Představte si například aplikaci, která není v pořádku, protože na jedné z jejích replik existuje zpráva o chybách. Následující rutina PowerShellu ukazuje vyhodnocení, která nejsou v pořádku:

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

Pokud chcete získat další informace, můžete se podívat na repliku:

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

Poznámka:

Vyhodnocení, které není v pořádku, ukazují první důvod, proč se entita vyhodnotí jako aktuální stav. Může existovat několik dalších událostí, které tento stav aktivují, ale ve vyhodnocení se neprojeví. Pokud chcete získat další informace, přejděte k podrobnostem entit stavu, abyste zjistili všechny sestavy, které nejsou v pořádku v clusteru.

Další kroky

Použití sestav o stavu systému k řešení problémů

Přidání vlastních sestav stavu Service Fabric

Jak hlásit a zkontrolovat stav služby

Místní monitorování a diagnostika služeb

Upgrade aplikace Service Fabric