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čuje, jestli jsou entity v pořádku.

Cluster se automaticky naplní zprávami o stavu odesílanými součástmi systému. Další informace najdete v tématu Řešení potíží pomocí sestav stavu systému.

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)

K předvedení těchto možností použijeme místní cluster s pěti uzly a aplikaci 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 hodnotu tak, aby vyžadovala sedm cílových replik pro stavovou službu a jeden oddíl. Vzhledem k tomu, že v clusteru je pouze pět uzlů, součásti systému hlásí upozornění na oddíl služby, protože je nižší než cílový počet.

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

Stav v Service Fabric Explorer

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

  • Application fabric:/WordCount je červený (v chybě), protože má chybovou událost hlášenou myWatchdog pro vlastnost Availability.
  • Jedna ze 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 není možné umístit dvě repliky. I když se tady nezobrazuje, oddíl služby je žlutý, protože systémová sestava říká System.FM , ž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 striktní zásady a netolerují žádná selhání.

Zobrazení clusteru s Service Fabric Explorer:

Zobrazení clusteru s Service Fabric Explorer

Poznámka

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

Dotazy na stav

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

Poznámka

Entita stavu se vrátí po úplném naplnění v úložišti stavů. Entita musí být aktivní (neodstraněná) a musí mít systémovou sestavu. Její nadřazené entity v hierarchickém řetězci musí mít také systémové sestavy. Pokud některá z těchto podmínek není splněna, dotazy na stav vrátí fabricException s kódem FabricErrorCodeFabricHealthEntityNotFound , který ukazuje, proč se entita nevrátí.

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

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. Počítá se úložištěm stavů na základě sestav o stavu entit, stavů podřízených (pokud jsou k dispozici) a zásad stavu. Přečtěte si další informace o vyhodnocení stavu entit.
  • Události stavu v entitě
  • Kolekce stavů všech podřízených entit pro entity, které mohou mít podřízené položky. Stavy obsahují identifikátory entit a agregovaný stav. Pokud chcete získat úplný stav dítěte, zavolejte stav dotazu pro typ podřízené entity a předejte podřízený identifikátor.
  • Vyhodnocení špatného stavu, která ukazují na sestavu, která aktivovala stav entity, pokud entita není v pořádku. Hodnocení jsou rekurzivní a obsahují vyhodnocení podřízeného stavu, která aktivovala aktuální stav. Například sledovací zařízení nahlásilo chybu u repliky. Stav aplikace ukazuje vyhodnocení, že 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 chyb sledovacího zařízení.
  • Statistika stavu pro všechny podřízené typy entit, které mají podřízené. 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 stav 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 které by se měly vrátit ve výsledku (například pouze chyby nebo upozornění i chyby). Všechny události, uzly a aplikace se používají k vyhodnocení agregovaného stavu entity bez ohledu na filtr.
  • [Volitelné] Filtrováním vyloučíte zdravotní statistiky.
  • [Volitelné] Filtrem zahrňte do statistiky stavu prostředky infrastruktury:/Statistika stavu systému. Platí pouze v případě, že nejsou vyloučeny zdravotní statistiky. Ve výchozím nastavení statistika stavu zahrnuje pouze statistiky pro uživatelské aplikace, a ne pro systémovou aplikaci.

rozhraní API

Pokud chcete získat stav clusteru, vytvořte metodu 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 vyfiltruje uzly a aplikace. Určuje, že statistika stavu zahrnuje statistiku fabric:/System. 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

Rutinou 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 fabric:/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, že hodnocení, 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 tak, aby zobrazovaly chybu nebo upozornění pouze u aplikací a uzlů. V důsledku toho se nevrátí žádné uzly, protože všechny jsou 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, aplikace se vyhodnotí jako chyba a stejně tak 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 sloužící k vyhodnocení stavu.
  • [Volitelné] Filtry pro události, které určují, které položky jsou zajímavé a které by se měly vrátit 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 metodu FabricClient a volejte metodu GetNodeHealthAsync ve svém healthManageru.

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 stav nasazené aplikace a podřízených položek služby. Vstup:

  • [Povinné] Název aplikace (URI), který aplikaci identifikuje.
  • [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 které by se měly 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 zdravotní statistiky. Pokud není zadaný, statistika stavu zahrnuje počet OK, upozornění a 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 metodu FabricClient a zavolejte metodu GetApplicationHealthAsync na svém healthManageru.

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 stav 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 které by se měly 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 zdravotní statistiky. Pokud není zadaný, statistika stavu zobrazí 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 a volejte metodu GetServiceHealthAsync ve svém healthManageru.

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) a prostřednictvím serviceHealthQueryDescription zadá filtry a vlastní zásady:

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 stav 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 které by se měly ve výsledku vrátit (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 zdravotní statistiky. Pokud není zadaný, statistika stavu ukazuje, kolik replik je v ok, upozornění a chybovém stavu.

rozhraní API

Pokud chcete získat stav oddílu prostřednictvím rozhraní API, vytvořte FabricClient a volejte metodu GetPartitionHealthAsync ve svém healthManageru. 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 pro všechny oddíly 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é identifikují repliku.
  • [Volitelné] Parametry zásad 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 které by se měly vrátit 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 metodu FabricClient a volejte metodu GetReplicaHealthAsync ve svém healthManageru. 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 POST , který obsahuje zásady stavu popsané v textu.

Získání stavu nasazené aplikace

Vrátí stav aplikace nasazené v entitě uzlu. Obsahuje stav 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 které by se měly 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 zdravotní statistiky. Pokud není zadaný, statistika stavu zobrazí počet nasazených balíčků služeb ve stavech OK, upozornění a chyb.

rozhraní API

Pokud chcete zjistit stav aplikace nasazené na uzlu prostřednictvím rozhraní API, vytvořte FabricClient a zavolejte metodu GetDeployedApplicationHealthAsync ve svém healthManageru. Pokud chcete zadat volitelné parametry, použijte DeployedApplicationHealthQueryDescription.

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

PowerShell

Rutinou pro získání stavu nasazené aplikace je Get-ServiceFabricDeployedApplicationHealth. Nejprve se připojte ke clusteru pomocí rutiny Connect-ServiceFabricCluster . Pokud chcete zjistit, kde je aplikace nasazená, spusťte rutinu 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 nasazené 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 nasazených balíčků služeb

Vrátí stav nasazené entity 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 které by se měly vrátit 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 zavolejte metodu GetDeployedServicePackageHealthAsync ve svém healthManageru. Pokud chcete zadat volitelné parametry, použijte 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 rutinu Get-ServiceFabricApplicationHealth a prohlédněte si nasazené aplikace. Pokud chcete zjistit, které balíčky služeb jsou v aplikaci, podívejte se na nasazené podřízené položky balíčku služby ve výstupu Get-ServiceFabricDeployedApplicationHealth .

Následující rutina získá stav balíčku služby WordCountServicePkg aplikace fabric:/WordCount nasazené v _Node_2. Entita obsahuje sestavy System.Hosting pro úspěšnou aktivaci balíčku služby 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 nasazeného balíčku služby můžete získat pomocí požadavku GET nebo POŽADAVKU POST , který obsahuje zásady stavu popsané v textu.

Dotazy na bloky dat o stavu

Dotazy na bloky dat o stavu můžou vracet víceúrovňové podřízené položky clusteru (rekurzivně) podle vstupních filtrů. Podporuje pokročilé filtry, které umožňují značnou flexibilitu při výběru vrácených podřízených položek. Filtry můžou určovat podřízené položky podle jedinečného identifikátoru nebo podle jiných identifikátorů skupin nebo stavů. Ve výchozím nastavení nejsou zahrnuty žádné podřízené položky, na rozdíl od příkazů pro stav, které vždy obsahují podřízené položky první úrovně.

Dotazy na stav vrací pro všechny požadované filtry pouze podřízené položky první úrovně zadané entity. Pokud chcete získat podřízené položky, musíte pro každou entitu, kterou vás zajímají, volat další rozhraní API stavu. Podobně platí, že pokud chcete získat stav konkrétních entit, musíte volat jedno rozhraní API stavu pro každou požadovanou entitu. Rozšířené filtrování dotazů na bloky dat umožňuje v jednom dotazu vyžadovat více položek zájmu, čímž se minimalizuje velikost zprávy a počet zpráv.

Hodnota dotazu na blok dat spočívá v tom, že jedním voláním můžete získat stav 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é dotazy na stav, například:

  • Vrátit pouze chybové aplikace 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žeb na daném uzlu.
  • Vrátí všechny repliky, u které došlo k chybě. Vrátí všechny aplikace, služby, oddíly a pouze repliky, u které došlo k chybě.
  • Vrátit všechny aplikace. Pro zadanou službu zahrňte všechny oddíly.

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

  • Agregovaný stav clusteru
  • Seznam bloků dat stavu uzlů, které respektují vstupní filtry.
  • Seznam bloků dat 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é filtry respektují. Totéž platí pro podřízené položky služeb a nasazených aplikací. Díky tomu se všechny entity v clusteru můžou v případě požadavku vracet hierarchicky.

Dotaz na blok dat 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 které by se měly vrátit ve výsledku. Filtry jsou specifické pro entitu nebo skupinu entit nebo se vztahují na všechny entity na této úrovni. Seznam filtrů může obsahovat jeden obecný filtr nebo filtry pro konkrétní identifikátory podrobných entit vrácených dotazem. Pokud je hodnota prázdná, podřízené položky se ve výchozím nastavení nevrátí. Další informace o filtrech najdete v tématu NodeHealthStateFilter a ApplicationHealthStateFilter. Filtry aplikací můžou rekurzivně určovat pokročilé filtry pro podřízené položky.

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

Dotaz bloku dat v současné době nevrací vyhodnocení, které není 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 a zavolejte metodu GetClusterHealthChunkAsync na jeho healthManager. Pokud chcete popsat zásady stavu a pokročilé filtry, můžete předat popis ClusterHealthQueryDescription .

Následující kód získá blok stavu clusteru s rozšířený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 určitého uzlu, který by měl být vždy vrácen.

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 v 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 informací o 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 zpřístupněny prostřednictvím rozhraní API (prostřednictvím metod v FabricClient.QueryManager), rutin prostředí PowerShell a REST. Tyto dotazy agregují poddotazy z více komponent. Jedním z nich je úložiště stavů, které naplní agregovaný stav pro každý výsledek dotazu.

Poznámka

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

Pokud obecné dotazy vrátí neznámý stav entity, je možné, že úložiště stavu neobsahuje úplná data o entitě. Je také možné, že poddotaz úložiště stavů nebyl úspěšný (například došlo k chybě komunikace nebo došlo k omezení úložiště stavu). Pokračujte dotazem na stav entity. Pokud v poddotazu došlo k přechodným chybám, 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ě stavů o tom, proč entita není vystavená.

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

Poznámka

Některé dotazy vrací stránkované výsledky. Vrácením těchto dotazů je seznam odvozený ze stránky PagedList<T>. Pokud se výsledky nevejdou do zprávy, vrátí se pouze stránka a 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ískáte 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 o 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 chyba:

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 clusterů 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 se vyhodnocuje pomocí nakonfigurovaných zásad stavu, upgrade použije zásady specifické pro upgrade a určí další akci. Upgrade se může pozastavit, aby umožňoval interakci uživatele (například oprava chybových podmínek nebo změna 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á nejsou v pořádku, která ukazují na to, co není v pořádku v clusteru. Pokud je upgrade vrácen 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, k čemu došlo po vrácení nebo zastavení upgradu.

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é ze svých replik. Upgrade se vrací zpět, protože se nedodržují 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ě. Hodnocení, které není v pořádku, poskytují podrobnosti o tom, co aktivovalo aktuální stav Není 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, že aplikace 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

Další informace získáte z repliky:

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

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

Další kroky

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

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

Jak nahlásit a zkontrolovat stav služby

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

Upgrade aplikace Service Fabric