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 WordCountServiceType
a 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á, žePartition 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:
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:
- Seznam uzlů: Vrátí uzly seznamu v clusteru (stránkované).
- Rozhraní API: FabricClient.QueryClient.GetNodeListAsync
- PowerShell: Get-ServiceFabricNode
- Seznam aplikací: Vrátí seznam aplikací v clusteru (stránka).
- Rozhraní API: FabricClient.QueryClient.GetApplicationListAsync
- PowerShell: Get-ServiceFabricApplication
- Seznam služeb: Vrátí seznam služeb v aplikaci (stránka).
- Rozhraní API: FabricClient.QueryClient.GetServiceListAsync
- PowerShell: Get-ServiceFabricService
- Seznam oddílů: Vrátí seznam oddílů ve službě (stránkované).
- Rozhraní API: FabricClient.QueryClient.GetPartitionListAsync
- PowerShell: Get-ServiceFabricPartition
- Seznam replik: Vrátí seznam replik v oddílu (stránkovaný).
- Rozhraní API: FabricClient.QueryClient.GetReplicaListAsync
- PowerShell: Get-ServiceFabricReplica
- Nasazený seznam aplikací: Vrátí seznam nasazených aplikací na uzlu.
- Rozhraní API: FabricClient.QueryClient.GetDeployedApplicationListAsync
- PowerShell: Get-ServiceFabricDeployedApplication
- Nasazený seznam balíčků služeb: Vrátí seznam balíčků služeb v nasazené aplikaci.
- Rozhraní API: FabricClient.QueryClient.GetDeployedServicePackageListAsync
- PowerShell: Get-ServiceFabricDeployedApplication
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