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 WordCountServiceType
a 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
, ž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 striktní zásady a netolerují žádná selhání.
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:
- Seznam uzlů: Vrátí seznam uzlů v clusteru (stránkovaný).
- Rozhraní API: FabricClient.QueryClient.GetNodeListAsync
- PowerShell: Get-ServiceFabricNode
- Seznam aplikací: Vrátí seznam aplikací v clusteru (stránkovaný).
- Rozhraní API: FabricClient.QueryClient.GetApplicationListAsync
- PowerShell: Get-ServiceFabricApplication
- Seznam služeb: Vrátí seznam služeb v aplikaci (stránkovaný).
- 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
- Seznam nasazených aplikací: Vrátí seznam nasazených aplikací v uzlu.
- Rozhraní API: FabricClient.QueryClient.GetDeployedApplicationListAsync
- PowerShell: Get-ServiceFabricDeployedApplication
- Seznam nasazených balíčků služby: 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. 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