Service Fabric-statusrapporten weergeven
Azure Service Fabric introduceert een statusmodel met statusentiteiten waarop systeemonderdelen en watchdogs lokale voorwaarden kunnen rapporteren die ze bewaken. De Health Store aggregeert alle statusgegevens om te bepalen of de entiteiten in orde zijn.
Het cluster wordt automatisch ingevuld met statusrapporten die worden verzonden door de systeemonderdelen. Lees Systeemstatusrapporten gebruiken om fouten op te lossen voor meer informatie.
Service Fabric biedt meerdere manieren om de geaggregeerde status van de entiteiten op te halen:
- Service Fabric Explorer of andere visualisatiehulpprogramma's
- Statusquery's (via PowerShell, API of REST)
- Algemene query's die een lijst met entiteiten retourneren die de status hebben als een van de eigenschappen (via PowerShell, API of REST)
Om deze opties te demonstreren, gebruiken we een lokaal cluster met vijf knooppunten en de fabric:/WordCount-toepassing. De fabric:/WordCount-toepassing bevat twee standaardservices, een stateful service van het type WordCountServiceType
en een stateless service van het type WordCountWebServiceType
. Ik heb de ApplicationManifest.xml
vereiste zeven doelreplica's voor de stateful service en één partitie gewijzigd. Omdat er slechts vijf knooppunten in het cluster zijn, rapporteren de systeemonderdelen een waarschuwing over de servicepartitie omdat deze zich onder het doelaantal bevindt.
<Service Name="WordCountService">
<StatefulService ServiceTypeName="WordCountServiceType" TargetReplicaSetSize="7" MinReplicaSetSize="2">
<UniformInt64Partition PartitionCount="[WordCountService_PartitionCount]" LowKey="1" HighKey="26" />
</StatefulService>
</Service>
Status in Service Fabric Explorer
Service Fabric Explorer biedt een visuele weergave van het cluster. In de onderstaande afbeelding ziet u dat:
- De toepassingsinfrastructuur:/WordCount is rood (in fout) omdat er een foutgebeurtenis is gerapporteerd door MyWatchdog voor de beschikbaarheid van de eigenschap.
- Een van de services fabric :/WordCount/WordCountService is geel (in waarschuwing). De service is geconfigureerd met zeven replica's en het cluster heeft vijf knooppunten, zodat er geen twee replica's kunnen worden geplaatst. Hoewel het hier niet wordt weergegeven, is de servicepartitie geel vanwege een systeemrapport dat
System.FM
datPartition is below target replica or instance count
zegt. De gele partitie activeert de gele service. - Het cluster is rood vanwege de rode toepassing.
De evaluatie maakt gebruik van standaardbeleid uit het clustermanifest en het toepassingsmanifest. Ze zijn strikt beleid en tolereren geen fouten.
Weergave van het cluster met Service Fabric Explorer:
Notitie
Lees meer over Service Fabric Explorer.
Statusquery's
Service Fabric geeft statusquery's weer voor alle ondersteunde entiteitstypes. Ze kunnen worden geopend via de API met behulp van methoden op FabricClient.HealthManager, PowerShell-cmdlets en REST. Deze query's retourneren gegevens over de status van de entiteit: de geaggregeerde status, de statusgebeurtenissen van de entiteit, de status van onderliggende items (indien van toepassing), de beschadigde evaluaties (wanneer de entiteit niet in orde is) en de statusstatistieken van onderliggende items (indien van toepassing).
Notitie
Er wordt een statusentiteit geretourneerd wanneer deze volledig is ingevuld in het statusarchief. De entiteit moet actief zijn (niet verwijderd) en een systeemrapport hebben. De bovenliggende entiteiten in de hiërarchieketen moeten ook systeemrapporten hebben. Als aan een van deze voorwaarden niet wordt voldaan, retourneren de statusquery's een FabricException met FabricErrorCode FabricHealthEntityNotFound
die laat zien waarom de entiteit niet wordt geretourneerd.
De statusquery's moeten de entiteits-id doorgeven, die afhankelijk is van het entiteitstype. De query's accepteren optionele statusbeleidsparameters. Als er geen statusbeleid is opgegeven, worden de statusbeleidsregels van het cluster of toepassingsmanifest gebruikt voor evaluatie. Als de manifesten geen definitie voor statusbeleid bevatten, worden de standaardstatusbeleidsregels gebruikt voor evaluatie. Het standaardstatusbeleid tolereert geen fouten. De query's accepteren ook filters voor het retourneren van alleen gedeeltelijke onderliggende items of gebeurtenissen. De query's die de opgegeven filters respecteren. Met een ander filter kunnen de onderliggende statistieken worden uitgesloten.
Notitie
De uitvoerfilters worden toegepast aan de serverzijde, zodat de antwoordgrootte van het bericht wordt verkleind. We raden u aan de uitvoerfilters te gebruiken om de geretourneerde gegevens te beperken in plaats van filters toe te passen aan de clientzijde.
De status van een entiteit bevat:
- De geaggregeerde status van de entiteit. Berekend door het statusarchief op basis van entiteitsstatusrapporten, onderliggende statussen (indien van toepassing) en statusbeleid. Lees meer over de evaluatie van de entiteitsstatus.
- De status gebeurtenissen op de entiteit.
- De verzameling statussen van alle onderliggende objecten voor de entiteiten die kinderen kunnen hebben. De statussen bevatten entiteits-id's en de geaggregeerde status. Als u de volledige status voor een kind wilt ophalen, roept u de querystatus aan voor het type onderliggende entiteit en geeft u de onderliggende id door.
- De beschadigde evaluaties die verwijzen naar het rapport dat de status van de entiteit heeft geactiveerd, als de entiteit niet in orde is. De evaluaties zijn recursief, met de onderliggende gezondheidsevaluaties die de huidige status hebben geactiveerd. Een watchdog heeft bijvoorbeeld een fout gerapporteerd voor een replica. De status van de toepassing toont een beschadigde evaluatie vanwege een beschadigde service; de service is beschadigd vanwege een partitie in een fout; de partitie is beschadigd vanwege een replica in een fout; de replica is beschadigd vanwege het statusrapport van de watchdog-fout.
- De statusstatistieken voor alle onderliggende typen entiteiten met kinderen. De clusterstatus toont bijvoorbeeld het totale aantal toepassingen, services, partities, replica's en geïmplementeerde entiteiten in het cluster. Servicestatus toont het totale aantal partities en replica's onder de opgegeven service.
Clusterstatus ophalen
Retourneert de status van de clusterentiteit en bevat de status van toepassingen en knooppunten (onderliggende elementen van het cluster). Invoer:
- [Optioneel] Het clusterstatusbeleid dat wordt gebruikt om de knooppunten en de cluster gebeurtenissen te evalueren.
- [Optioneel] De toepassingsstatusbeleidstoewijzing, waarbij het statusbeleid wordt gebruikt om het manifestbeleid voor toepassingen te overschrijven.
- [Optioneel] Filters voor gebeurtenissen, knooppunten en toepassingen die aangeven welke vermeldingen van belang zijn en moeten worden geretourneerd in het resultaat (bijvoorbeeld alleen fouten of waarschuwingen en fouten). Alle gebeurtenissen, knooppunten en toepassingen worden gebruikt om de geaggregeerde status van de entiteit te evalueren, ongeacht het filter.
- [Optioneel] Filter om statusstatistieken uit te sluiten.
- [Optioneel] Filter om infrastructuur op te nemen:/Systeemstatusstatistieken in de statusstatistieken. Alleen van toepassing wanneer de gezondheidsstatistieken niet worden uitgesloten. De statusstatistieken bevatten standaard alleen statistieken voor gebruikerstoepassingen en niet de systeemtoepassing.
API
Als u de clusterstatus wilt ophalen, maakt u een getclusterHealthAsync-methode en roept u deze aan in de HealthManager.FabricClient
Met de volgende aanroep wordt de clusterstatus opgehaald:
ClusterHealth clusterHealth = await fabricClient.HealthManager.GetClusterHealthAsync();
Met de volgende code wordt de clusterstatus opgehaald met behulp van een aangepast clusterstatusbeleid en filters voor knooppunten en toepassingen. Hiermee wordt aangegeven dat de statusstatistieken de infrastructuurstatistieken bevatten:/Systeemstatistieken. Het maakt ClusterHealthQueryDescription, dat de invoergegevens bevat.
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
De cmdlet voor het ophalen van de clusterstatus is Get-ServiceFabricClusterHealth. Gebruik eerst de cmdlet Connect-ServiceFabricCluster om verbinding te maken met het cluster.
De status van het cluster is vijf knooppunten, de systeemtoepassing en infrastructuur:/WordCount geconfigureerd zoals beschreven.
Met de volgende cmdlet wordt de clusterstatus opgehaald met behulp van standaardstatusbeleid. De geaggregeerde status is waarschuwing, omdat de fabric:/WordCount-toepassing een waarschuwing heeft. U ziet hoe de beschadigingsevaluaties details bevatten over de omstandigheden die de geaggregeerde status hebben geactiveerd.
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
Met de volgende PowerShell-cmdlet wordt de status van het cluster opgehaald met behulp van een aangepast toepassingsbeleid. De resultaten worden gefilterd om alleen toepassingen en knooppunten met een fout of waarschuwing op te halen. Als gevolg hiervan worden er geen knooppunten geretourneerd, omdat ze allemaal in orde zijn. Alleen de fabric:/WordCount-toepassing respecteert het toepassingsfilter. Omdat het aangepaste beleid aangeeft dat waarschuwingen worden gezien als fouten voor de fabric:/WordCount-toepassing, wordt de toepassing als fout geëvalueerd en is het 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
U kunt de clusterstatus ophalen met een GET-aanvraag of een POST-aanvraag die statusbeleid bevat dat in de hoofdtekst wordt beschreven.
Status van knooppunten ophalen
Retourneert de status van een knooppuntentiteit en bevat de status gebeurtenissen die zijn gerapporteerd op het knooppunt. Invoer:
- [Vereist] De naam van het knooppunt waarmee het knooppunt wordt geïdentificeerd.
- [Optioneel] De instellingen voor het clusterstatusbeleid die worden gebruikt om de status te evalueren.
- [Optioneel] Filters voor gebeurtenissen die aangeven welke vermeldingen van belang zijn en moeten worden geretourneerd in het resultaat (bijvoorbeeld alleen fouten of zowel waarschuwingen als fouten). Alle gebeurtenissen worden gebruikt om de geaggregeerde status van de entiteit te evalueren, ongeacht het filter.
API
Als u de status van knooppunten wilt ophalen via de API, maakt u een FabricClient
getNodeHealthAsync-methode en roept u deze aan in de HealthManager.
Met de volgende code wordt de status van het knooppunt voor de opgegeven knooppuntnaam opgehaald:
NodeHealth nodeHealth = await fabricClient.HealthManager.GetNodeHealthAsync(nodeName);
Met de volgende code wordt de knooppuntstatus voor de opgegeven knooppuntnaam opgehaald en worden gebeurtenissenfilter en aangepast beleid doorgegeven via NodeHealthQueryDescription:
var queryDescription = new NodeHealthQueryDescription(nodeName)
{
HealthPolicy = new ClusterHealthPolicy() { ConsiderWarningAsError = true },
EventsFilter = new HealthEventsFilter() { HealthStateFilterValue = HealthStateFilter.Warning },
};
NodeHealth nodeHealth = await fabricClient.HealthManager.GetNodeHealthAsync(queryDescription);
Powershell
De cmdlet voor het ophalen van de knooppuntstatus is Get-ServiceFabricNodeHealth. Gebruik eerst de cmdlet Connect-ServiceFabricCluster om verbinding te maken met het cluster. Met de volgende cmdlet wordt de status van het knooppunt opgehaald met behulp van standaardstatusbeleid:
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
Met de volgende cmdlet wordt de status van alle knooppunten in het cluster opgehaald:
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
U kunt de status van knooppunten ophalen met een GET-aanvraag of een POST-aanvraag die statusbeleid bevat dat in de hoofdtekst wordt beschreven.
Toepassingsstatus ophalen
Retourneert de status van een toepassingsentiteit. Het bevat de statusstatussen van de geïmplementeerde toepassing en service-onderliggende elementen. Invoer:
- [Vereist] De toepassingsnaam (URI) die de toepassing identificeert.
- [Optioneel] Het toepassingsstatusbeleid dat wordt gebruikt om het manifestbeleid voor toepassingen te overschrijven.
- [Optioneel] Filters voor gebeurtenissen, services en geïmplementeerde toepassingen die aangeven welke vermeldingen van belang zijn en moeten worden geretourneerd in het resultaat (bijvoorbeeld alleen fouten of waarschuwingen en fouten). Alle gebeurtenissen, services en geïmplementeerde toepassingen worden gebruikt om de geaggregeerde status van de entiteit te evalueren, ongeacht het filter.
- [Optioneel] Filter om de statusstatistieken uit te sluiten. Als dit niet is opgegeven, bevatten de statusstatistieken het aantal ok, waarschuwingen en fouten voor alle onderliggende toepassingen: services, partities, replica's, geïmplementeerde toepassingen en geïmplementeerde servicepakketten.
API
Als u de status van de toepassing wilt ophalen, maakt u een FabricClient
getApplicationHealthAsync-methode en roept u deze aan in de HealthManager.
Met de volgende code wordt de toepassingsstatus voor de opgegeven toepassingsnaam (URI) ophaalt:
ApplicationHealth applicationHealth = await fabricClient.HealthManager.GetApplicationHealthAsync(applicationName);
De volgende code haalt de toepassingsstatus op voor de opgegeven toepassingsnaam (URI), met filters en aangepaste beleidsregels die zijn opgegeven via ApplicationHealthQueryDescription.
HealthStateFilter warningAndErrors = HealthStateFilter.Error | HealthStateFilter.Warning;
var serviceTypePolicy = new ServiceTypeHealthPolicy()
{
MaxPercentUnhealthyPartitionsPerService = 0,
MaxPercentUnhealthyReplicasPerPartition = 5,
MaxPercentUnhealthyServices = 0,
};
var policy = new ApplicationHealthPolicy()
{
ConsiderWarningAsError = false,
DefaultServiceTypeHealthPolicy = serviceTypePolicy,
MaxPercentUnhealthyDeployedApplications = 0,
};
var queryDescription = new ApplicationHealthQueryDescription(applicationName)
{
HealthPolicy = policy,
EventsFilter = new HealthEventsFilter() { HealthStateFilterValue = warningAndErrors },
ServicesFilter = new ServiceHealthStatesFilter() { HealthStateFilterValue = warningAndErrors },
DeployedApplicationsFilter = new DeployedApplicationHealthStatesFilter() { HealthStateFilterValue = warningAndErrors },
};
ApplicationHealth applicationHealth = await fabricClient.HealthManager.GetApplicationHealthAsync(queryDescription);
Powershell
De cmdlet voor het ophalen van de toepassingsstatus is Get-ServiceFabricApplicationHealth. Gebruik eerst de cmdlet Connect-ServiceFabricCluster om verbinding te maken met het cluster.
De volgende cmdlet retourneert de status van de fabric:/WordCount-toepassing :
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
De volgende PowerShell-cmdlet geeft aangepaste beleidsregels door. Het filtert ook kinderen en gebeurtenissen.
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
U kunt de status van de toepassing ophalen met een GET-aanvraag of een POST-aanvraag die statusbeleid bevat dat in de hoofdtekst wordt beschreven.
Servicestatus ophalen
Retourneert de status van een service-entiteit. Deze bevat de statussen van de partitie. Invoer:
- [Vereist] De servicenaam (URI) die de service identificeert.
- [Optioneel] Het toepassingsstatusbeleid dat wordt gebruikt om het manifestbeleid van de toepassing te overschrijven.
- [Optioneel] Filters voor gebeurtenissen en partities die aangeven welke vermeldingen van belang zijn en moeten worden geretourneerd in het resultaat (bijvoorbeeld alleen fouten of zowel waarschuwingen als fouten). Alle gebeurtenissen en partities worden gebruikt om de geaggregeerde status van de entiteit te evalueren, ongeacht het filter.
- [Optioneel] Filter om statusstatistieken uit te sluiten. Als dit niet is opgegeven, worden in de statusstatistieken het aantal ok, waarschuwingen en fouten weergegeven voor alle partities en replica's van de service.
API
Als u de servicestatus via de API wilt ophalen, maakt u een FabricClient
getServiceHealthAsync-methode en roept u deze aan in de HealthManager.
In het volgende voorbeeld wordt de status van een service met de opgegeven servicenaam (URI) ophaalt:
ServiceHealth serviceHealth = await fabricClient.HealthManager.GetServiceHealthAsync(serviceName);
De volgende code haalt de servicestatus op voor de opgegeven servicenaam (URI), waarbij filters en aangepast beleid worden opgegeven via ServiceHealthQueryDescription:
var queryDescription = new ServiceHealthQueryDescription(serviceName)
{
EventsFilter = new HealthEventsFilter() { HealthStateFilterValue = HealthStateFilter.All },
PartitionsFilter = new PartitionHealthStatesFilter() { HealthStateFilterValue = HealthStateFilter.Error },
};
ServiceHealth serviceHealth = await fabricClient.HealthManager.GetServiceHealthAsync(queryDescription);
Powershell
De cmdlet voor het ophalen van de servicestatus is Get-ServiceFabricServiceHealth. Gebruik eerst de cmdlet Connect-ServiceFabricCluster om verbinding te maken met het cluster.
De volgende cmdlet haalt de servicestatus op met behulp van standaardstatusbeleid:
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
U kunt servicestatus ophalen met een GET-aanvraag of een POST-aanvraag die statusbeleid bevat dat in de hoofdtekst wordt beschreven.
Partitiestatus ophalen
Retourneert de status van een partitie-entiteit. Deze bevat de statussen van de replica. Invoer:
- [Vereist] De partitie-id (GUID) die de partitie identificeert.
- [Optioneel] Het toepassingsstatusbeleid dat wordt gebruikt om het manifestbeleid van de toepassing te overschrijven.
- [Optioneel] Filters voor gebeurtenissen en replica's die aangeven welke vermeldingen van belang zijn en moeten worden geretourneerd in het resultaat (bijvoorbeeld alleen fouten of zowel waarschuwingen als fouten). Alle gebeurtenissen en replica's worden gebruikt om de geaggregeerde status van de entiteit te evalueren, ongeacht het filter.
- [Optioneel] Filter om statusstatistieken uit te sluiten. Als dit niet is opgegeven, laten de statusstatistieken zien hoeveel replica's in orde, waarschuwing en foutstatussen zijn.
API
Als u de partitiestatus wilt ophalen via de API, maakt u een FabricClient
getPartitionHealthAsync-methode en roept u deze aan in de HealthManager. Als u optionele parameters wilt opgeven, maakt u PartitionHealthQueryDescription.
PartitionHealth partitionHealth = await fabricClient.HealthManager.GetPartitionHealthAsync(partitionId);
Powershell
De cmdlet voor het ophalen van de partitiestatus is Get-ServiceFabricPartitionHealth. Gebruik eerst de cmdlet Connect-ServiceFabricCluster om verbinding te maken met het cluster.
De volgende cmdlet haalt de status op voor alle partities van de fabric:/WordCount/WordCountService-service en filtert replicastatussen:
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
U kunt partitiestatus ophalen met een GET-aanvraag of een POST-aanvraag die statusbeleid bevat dat in de hoofdtekst wordt beschreven.
Replicastatus ophalen
Retourneert de status van een stateful servicereplica of een stateless service-exemplaar. Invoer:
- [Vereist] De partitie-id (GUID) en replica-id die de replica identificeert.
- [Optioneel] De parameters van het toepassingsstatusbeleid die worden gebruikt om het manifestbeleid van de toepassing te overschrijven.
- [Optioneel] Filters voor gebeurtenissen die aangeven welke vermeldingen van belang zijn en moeten worden geretourneerd in het resultaat (bijvoorbeeld alleen fouten of zowel waarschuwingen als fouten). Alle gebeurtenissen worden gebruikt om de geaggregeerde status van de entiteit te evalueren, ongeacht het filter.
API
Als u de replicastatus via de API wilt ophalen, maakt u een FabricClient
getReplicaHealthAsync-methode en roept u deze aan in de HealthManager. Gebruik ReplicaHealthQueryDescription om geavanceerde parameters op te geven.
ReplicaHealth replicaHealth = await fabricClient.HealthManager.GetReplicaHealthAsync(partitionId, replicaId);
Powershell
De cmdlet voor het ophalen van de replicastatus is Get-ServiceFabricReplicaHealth. Gebruik eerst de cmdlet Connect-ServiceFabricCluster om verbinding te maken met het cluster.
Met de volgende cmdlet wordt de status van de primaire replica voor alle partities van de service ophaalt:
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
U kunt de status van de replica ophalen met een GET-aanvraag of een POST-aanvraag die statusbeleid bevat dat in de hoofdtekst wordt beschreven.
Geïmplementeerde toepassingsstatus ophalen
Retourneert de status van een toepassing die is geïmplementeerd op een knooppuntentiteit. Het bevat de statusstatus van het geïmplementeerde servicepakket. Invoer:
- [Vereist] De toepassingsnaam (URI) en knooppuntnaam (tekenreeks) die de geïmplementeerde toepassing identificeren.
- [Optioneel] Het toepassingsstatusbeleid dat wordt gebruikt om het manifestbeleid voor toepassingen te overschrijven.
- [Optioneel] Filters voor gebeurtenissen en geïmplementeerde servicepakketten die aangeven welke vermeldingen van belang zijn en moeten worden geretourneerd in het resultaat (bijvoorbeeld alleen fouten, of zowel waarschuwingen als fouten). Alle gebeurtenissen en geïmplementeerde servicepakketten worden gebruikt om de geaggregeerde status van de entiteit te evalueren, ongeacht het filter.
- [Optioneel] Filter om statusstatistieken uit te sluiten. Als dit niet is opgegeven, geven de statusstatistieken het aantal geïmplementeerde servicepakketten weer in ok, waarschuwing en status van de fout.
API
Als u de status van een toepassing wilt ophalen die is geïmplementeerd op een knooppunt via de API, maakt u een FabricClient
getDeployedApplicationHealthAsync-methode en roept u deze aan in de HealthManager. Als u optionele parameters wilt opgeven, gebruikt u DeployedApplicationHealthQueryDescription.
DeployedApplicationHealth health = await fabricClient.HealthManager.GetDeployedApplicationHealthAsync(
new DeployedApplicationHealthQueryDescription(applicationName, nodeName));
Powershell
De cmdlet voor het ophalen van de geïmplementeerde toepassingsstatus is Get-ServiceFabricDeployedApplicationHealth. Gebruik eerst de cmdlet Connect-ServiceFabricCluster om verbinding te maken met het cluster. Als u wilt achterhalen waar een toepassing is geïmplementeerd, voert u Get-ServiceFabricApplicationHealth uit en bekijkt u de onderliggende toepassingen van de geïmplementeerde toepassing.
Met de volgende cmdlet wordt de status van de fabric-/WordCount-toepassing opgehaald die is geïmplementeerd op _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
U kunt de status van de geïmplementeerde toepassing krijgen met een GET-aanvraag of een POST-aanvraag die statusbeleid bevat dat in de hoofdtekst wordt beschreven.
Status van geïmplementeerd servicepakket ophalen
Retourneert de status van een geïmplementeerde servicepakketentiteit. Invoer:
- [Vereist] De naam van de toepassing (URI), de naam van het knooppunt (tekenreeks) en de naam van het servicemanifest (tekenreeks) waarmee het geïmplementeerde servicepakket wordt geïdentificeerd.
- [Optioneel] Het toepassingsstatusbeleid dat wordt gebruikt om het manifestbeleid van de toepassing te overschrijven.
- [Optioneel] Filters voor gebeurtenissen die aangeven welke vermeldingen van belang zijn en moeten worden geretourneerd in het resultaat (bijvoorbeeld alleen fouten of zowel waarschuwingen als fouten). Alle gebeurtenissen worden gebruikt om de geaggregeerde status van de entiteit te evalueren, ongeacht het filter.
API
Als u de status van een geïmplementeerd servicepakket wilt ophalen via de API, maakt u een FabricClient
getDeployedServicePackageHealthAsync-methode op de HealthManager en roept u dit aan. Als u optionele parameters wilt opgeven, gebruikt u DeployedServicePackageHealthQueryDescription.
DeployedServicePackageHealth health = await fabricClient.HealthManager.GetDeployedServicePackageHealthAsync(
new DeployedServicePackageHealthQueryDescription(applicationName, nodeName, serviceManifestName));
Powershell
De cmdlet voor het ophalen van de status van het geïmplementeerde servicepakket is Get-ServiceFabricDeployedServicePackageHealth. Gebruik eerst de cmdlet Connect-ServiceFabricCluster om verbinding te maken met het cluster. Als u wilt zien waar een toepassing is geïmplementeerd, voert u Get-ServiceFabricApplicationHealth uit en bekijkt u de geïmplementeerde toepassingen. Als u wilt zien welke servicepakketten zich in een toepassing bevinden, bekijkt u de geïmplementeerde servicepakket-onderliggende items in de uitvoer Get-ServiceFabricDeployedApplicationHealth .
Met de volgende cmdlet wordt de status opgehaald van het WordCountServicePkg-servicepakket van de fabric:/WordCount-toepassing die is geïmplementeerd op _Node_2. De entiteit heeft System.Hosting-rapporten voor een geslaagde activering van servicepakketten en toegangspunten en een geslaagde registratie van het servicetype.
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
U kunt de status van het geïmplementeerde servicepakket ophalen met een GET-aanvraag of een POST-aanvraag die statusbeleid bevat dat in de hoofdtekst wordt beschreven.
Statussegmentquery's
De query's voor statussegmenten kunnen clusterondertekeningen op meerdere niveaus retourneren (recursief), per invoerfilter. Het biedt ondersteuning voor geavanceerde filters die veel flexibiliteit bieden bij het kiezen van de kinderen die moeten worden geretourneerd. De filters kunnen kinderen opgeven op basis van de unieke id of door andere groeps-id's en/of statussen. Standaard zijn er geen onderliggende items opgenomen, in tegenstelling tot gezondheidsopdrachten die altijd onderliggende elementen op het eerste niveau bevatten.
De statusquery's retourneren alleen onderliggende elementen op het eerste niveau van de opgegeven entiteit per vereiste filters. Als u de kinderen van de kinderen wilt ophalen, moet u aanvullende status-API's aanroepen voor elke entiteit van belang. Om de status van specifieke entiteiten op te halen, moet u ook één status-API aanroepen voor elke gewenste entiteit. Met het geavanceerde filteren van segmentquery's kunt u meerdere interessante items in één query aanvragen, waardoor de berichtgrootte en het aantal berichten worden geminimaliseerd.
De waarde van de segmentquery is dat u in één aanroep de status voor meer clusterentiteiten (mogelijk alle clusterentiteiten vanaf de vereiste hoofdmap) kunt krijgen. U kunt complexe statusquery's uitdrukken, zoals:
- Retourneer alleen toepassingen in een fout en voor deze toepassingen zijn alle services in waarschuwing of fout opgenomen. Neem voor geretourneerde services alle partities op.
- Retourneert alleen de status van vier toepassingen, opgegeven door hun namen.
- Alleen de status van toepassingen van een gewenst toepassingstype retourneren.
- Alle geïmplementeerde entiteiten op een knooppunt retourneren. Retourneert alle toepassingen, alle geïmplementeerde toepassingen op het opgegeven knooppunt en alle geïmplementeerde servicepakketten op dat knooppunt.
- Retourneert alle replica's in een fout. Retourneert alle toepassingen, services, partities en alleen replica's die fouten veroorzaken.
- Alle toepassingen retourneren. Neem voor een opgegeven service alle partities op.
Momenteel wordt de statussegmentquery alleen weergegeven voor de clusterentiteit. Het retourneert een clusterstatussegment, dat het volgende bevat:
- De geaggregeerde status van het cluster.
- De lijst met statussegmenten van knooppunten die invoerfilters respecteren.
- De lijst met statusstatussegmenten van toepassingen die invoerfilters respecteren. Elk segment van de status van de toepassing bevat een segmentlijst met alle services die invoerfilters en een segmentlijst respecteren met alle geïmplementeerde toepassingen die de filters respecteren. Hetzelfde voor de onderliggende services en geïmplementeerde toepassingen. Op deze manier kunnen alle entiteiten in het cluster op een hiërarchische manier worden geretourneerd als dit wordt aangevraagd.
Clusterstatussegmentquery
Retourneert de status van de clusterentiteit en bevat de hiërarchische statussegmenten van vereiste onderliggende items. Invoer:
- [Optioneel] Het clusterstatusbeleid dat wordt gebruikt om de knooppunten en de cluster gebeurtenissen te evalueren.
- [Optioneel] De toepassingsstatusbeleidstoewijzing, waarbij het statusbeleid wordt gebruikt om het manifestbeleid voor toepassingen te overschrijven.
- [Optioneel] Filters voor knooppunten en toepassingen die aangeven welke vermeldingen van belang zijn en die in het resultaat moeten worden geretourneerd. De filters zijn specifiek voor een entiteit/groep entiteiten of zijn van toepassing op alle entiteiten op dat niveau. De lijst met filters kan één algemeen filter en/of filters voor specifieke id's bevatten om entiteiten te verfijnen die door de query worden geretourneerd. Als deze leeg zijn, worden de onderliggende items niet standaard geretourneerd. Lees meer over de filters op NodeHealthStateFilter en ApplicationHealthStateFilter. De toepassingsfilters kunnen recursief geavanceerde filters voor kinderen opgeven.
Het segmentresultaat bevat de onderliggende elementen die de filters respecteren.
Momenteel retourneert de segmentquery geen beschadigde evaluaties of entiteitsgebeurtenissen. Deze extra informatie kan worden verkregen met behulp van de bestaande clusterstatusquery.
API
Als u clusterstatussegment wilt ophalen, maakt u een getClusterHealthChunkAsync-methode en roept u deze aan in de HealthManager.FabricClient
U kunt ClusterHealthQueryDescription doorgeven om statusbeleid en geavanceerde filters te beschrijven.
Met de volgende code wordt clusterstatussegment opgehaald met geavanceerde filters.
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
De cmdlet voor het ophalen van de clusterstatus is Get-ServiceFabricClusterChunkHealth. Gebruik eerst de cmdlet Connect-ServiceFabricCluster om verbinding te maken met het cluster.
Met de volgende code worden alleen knooppunten opgehaald als deze fouten bevatten, met uitzondering van een specifiek knooppunt, dat altijd moet worden geretourneerd.
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
Met de volgende cmdlet wordt clustersegment opgehaald met toepassingsfilters.
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
De volgende cmdlet retourneert alle geïmplementeerde entiteiten op een knooppunt.
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
U kunt clusterstatussegment ophalen met een GET-aanvraag of een POST-aanvraag die statusbeleid en geavanceerde filters bevat die in de hoofdtekst worden beschreven.
Algemene query's
Algemene query's retourneren een lijst met Service Fabric-entiteiten van een opgegeven type. Ze worden weergegeven via de API (via de methoden op FabricClient.QueryManager), PowerShell-cmdlets en REST. Met deze query's worden subquery's van meerdere onderdelen samengevoegd. Een van deze is het statusarchief, dat de geaggregeerde status voor elk queryresultaat vult.
Notitie
Algemene query's retourneren de geaggregeerde status van de entiteit en bevatten geen uitgebreide statusgegevens. Als een entiteit niet in orde is, kunt u de statusquery's opvolgen om alle statusgegevens op te halen, waaronder gebeurtenissen, statussen van kinderen en evaluaties met een slechte status.
Als algemene query's een onbekende status voor een entiteit retourneren, is het mogelijk dat het statusarchief geen volledige gegevens over de entiteit bevat. Het is ook mogelijk dat een subquery voor het statusarchief niet is geslaagd (er is bijvoorbeeld een communicatiefout opgetreden of de statusopslag is beperkt). Volg de statusquery voor de entiteit op. Als er tijdelijke fouten zijn opgetreden in de subquery, zoals netwerkproblemen, kan deze opvolgingsquery slagen. Het kan u ook meer informatie geven uit het statusarchief over waarom de entiteit niet wordt weergegeven.
De query's die HealthState voor entiteiten bevatten, zijn:
- Knooppuntlijst: retourneert de lijstknooppunten in het cluster (paged).
- API: FabricClient.QueryClient.GetNodeListAsync
- PowerShell: Get-ServiceFabricNode
- Lijst met toepassingen: retourneert de lijst met toepassingen in het cluster (paged).
- API: FabricClient.QueryClient.GetApplicationListAsync
- PowerShell: Get-ServiceFabricApplication
- Servicelijst: retourneert de lijst met services in een toepassing (gepaginad).
- API: FabricClient.QueryClient.GetServiceListAsync
- PowerShell: Get-ServiceFabricService
- Partitielijst: retourneert de lijst met partities in een service (paged).
- API: FabricClient.QueryClient.GetPartitionListAsync
- PowerShell: Get-ServiceFabricPartition
- Replicalijst: retourneert de lijst met replica's in een partitie (paged).
- API: FabricClient.QueryClient.GetReplicaListAsync
- PowerShell: Get-ServiceFabricReplica
- Lijst met geïmplementeerde toepassingen: retourneert de lijst met geïmplementeerde toepassingen op een knooppunt.
- API: FabricClient.QueryClient.GetDeployedApplicationListAsync
- PowerShell: Get-ServiceFabricDeployedApplication
- Lijst met geïmplementeerde servicepakketten: retourneert de lijst met servicepakketten in een geïmplementeerde toepassing.
- API: FabricClient.QueryClient.GetDeployedServicePackageListAsync
- PowerShell: Get-ServiceFabricDeployedApplication
Notitie
Sommige query's retourneren gepaginade resultaten. Het resultaat van deze query's is een lijst die is afgeleid van PagedList<T>. Als de resultaten niet in een bericht passen, wordt alleen een pagina geretourneerd en wordt een Vervolgtoken bijgehouden waar opsomming is gestopt. Blijf dezelfde query aanroepen en geef het vervolgtoken van de vorige query door om de volgende resultaten op te halen.
Voorbeelden
Met de volgende code worden de beschadigde toepassingen in het cluster opgehaald:
var applications = fabricClient.QueryManager.GetApplicationListAsync().Result.Where(
app => app.HealthState == HealthState.Error);
Met de volgende cmdlet worden de toepassingsgegevens voor de fabric-/WordCount-toepassing opgehaald. U ziet dat de status waarschuwing heeft.
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"}]" }
Met de volgende cmdlet worden de services met de status van de fout ophaalt:
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
Cluster- en toepassingsupgrades
Tijdens een bewaakte upgrade van het cluster en de toepassing controleert Service Fabric de status om ervoor te zorgen dat alles in orde blijft. Als een entiteit niet in orde is zoals geëvalueerd met behulp van geconfigureerd statusbeleid, past de upgrade specifiek beleid toe om de volgende actie te bepalen. De upgrade kan worden onderbroken om gebruikersinteractie toe te staan (zoals het oplossen van foutvoorwaarden of het wijzigen van beleid), of het kan automatisch worden teruggedraaid naar de vorige goede versie.
Tijdens een clusterupgrade kunt u de upgradestatus van het cluster ophalen. De upgradestatus bevat beschadigde evaluaties, die verwijzen naar wat niet in orde is in het cluster. Als de upgrade wordt teruggedraaid vanwege statusproblemen, onthoudt de upgradestatus de laatste beschadigde redenen. Met deze informatie kunnen beheerders onderzoeken wat er fout is gegaan nadat de upgrade is teruggedraaid of gestopt.
Op dezelfde manier worden eventuele beschadigde evaluaties tijdens een upgrade van de toepassing opgenomen in de status van de toepassingsupgrade.
Hieronder ziet u de status van de toepassingsupgrade voor een gewijzigde infrastructuur:/WordCount-toepassing. Een watchdog heeft een fout gerapporteerd op een van de replica's. De upgrade wordt teruggezet omdat de statuscontroles niet worden gerespecteerd.
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
Lees meer over de service fabric-toepassingsupgrade.
Statusevaluaties gebruiken om problemen op te lossen
Wanneer er een probleem is met het cluster of een toepassing, bekijkt u de status van het cluster of de toepassing om vast te stellen wat er mis is. De evaluaties met een slechte status geven details over wat de huidige beschadigde status heeft geactiveerd. Als dat nodig is, kunt u inzoomen op beschadigde onderliggende entiteiten om de hoofdoorzaak te identificeren.
Denk bijvoorbeeld aan een toepassing die niet in orde is omdat er een foutenrapport is op een van de replica's. In de volgende PowerShell-cmdlet worden de beschadigde evaluaties weergegeven:
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
U kunt de replica bekijken voor meer informatie:
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
Notitie
De beschadigde evaluaties geven de eerste reden aan dat de entiteit wordt geëvalueerd op de huidige status. Er kunnen meerdere andere gebeurtenissen zijn die deze status activeren, maar deze worden niet weergegeven in de evaluaties. Voor meer informatie kunt u inzoomen op de statusentiteiten om alle beschadigde rapporten in het cluster te achterhalen.
Volgende stappen
Aangepaste Service Fabric-statusrapporten toevoegen
Servicestatus rapporteren en controleren