Exibir relatórios de integridade do Service Fabric
O Azure Service Fabric apresenta um modelo de integridade com entidades de integridade nas quais os componentes do sistema e os vigilantes podem relatar as condições locais que estão monitorando. O armazenamento de integridade agrega todos os dados de integridade para determinar se as entidades estão íntegras.
O cluster é preenchido automaticamente com relatórios de integridade enviados pelos componentes do sistema. Leia mais em Usar relatórios de integridade do sistema para solucionar problemas.
O Service Fabric fornece várias maneiras de obter a integridade agregada das entidades:
- Service Fabric Explorer ou outras ferramentas de visualização
- Consultas de integridade (por meio de PowerShell, API ou REST)
- Consultas gerais que retornam uma lista de entidades que têm a integridade como uma das propriedades (por meio do PowerShell, API ou REST)
Para demonstrar essas opções, vamos usar um cluster local com cinco nós e o aplicativo fabric:/WordCount. O aplicativo fabric:/WordCount contém dois serviços padrão, um serviço stateful do tipo WordCountServiceType
e um serviço stateless do tipo WordCountWebServiceType
. Mudei o ApplicationManifest.xml
para exigir sete réplicas de destino para o serviço stateful e uma partição. Como há apenas cinco nós no cluster, os componentes do sistema relatam um aviso na partição de serviço porque ela está abaixo da contagem de destino.
<Service Name="WordCountService">
<StatefulService ServiceTypeName="WordCountServiceType" TargetReplicaSetSize="7" MinReplicaSetSize="2">
<UniformInt64Partition PartitionCount="[WordCountService_PartitionCount]" LowKey="1" HighKey="26" />
</StatefulService>
</Service>
Integridade no Service Fabric Explorer
O Service Fabric Explorer fornece uma exibição visual do cluster. Na imagem abaixo, você pode ver que:
- A malha do aplicativo :/WordCount está vermelha (em erro) porque tem um evento de erro relatado por MyWatchdog para a propriedade Availability.
- Um de seus serviços, fabric:/WordCount/WordCountService é amarelo (em aviso). O serviço é configurado com sete réplicas e o cluster tem cinco nós, portanto, duas réplicas não podem ser colocadas. Embora não seja mostrada aqui, a partição de serviço é amarela por causa de um relatório do sistema dizendo
System.FM
quePartition is below target replica or instance count
. A partição amarela aciona o serviço amarelo. - O cluster é vermelho por causa do aplicativo vermelho.
A avaliação usa políticas padrão do manifesto do cluster e do manifesto do aplicativo. São políticas rigorosas e não toleram qualquer falha.
Vista do cluster com o Service Fabric Explorer:
Nota
Leia mais sobre o Service Fabric Explorer.
Consultas de saúde
O Service Fabric expõe consultas de integridade para cada um dos tipos de entidade suportados. Eles podem ser acessados por meio da API, usando métodos em FabricClient.HealthManager, cmdlets do PowerShell e REST. Essas consultas retornam informações completas de saúde sobre a entidade: o estado de saúde agregado, eventos de saúde da entidade, estados de saúde infantil (quando aplicável), avaliações não saudáveis (quando a entidade não é saudável) e estatísticas de saúde infantil (quando aplicável).
Nota
Uma entidade de integridade é retornada quando está totalmente preenchida no repositório de integridade. A entidade deve estar ativa (não excluída) e ter um relatório do sistema. Suas entidades-mãe na cadeia hierárquica também devem ter relatórios do sistema. Se qualquer uma dessas condições não for satisfeita, as consultas de integridade retornarão um FabricException com FabricErrorCode FabricHealthEntityNotFound
que mostra por que a entidade não é retornada.
As consultas de integridade devem passar o identificador de entidade, que depende do tipo de entidade. As consultas aceitam parâmetros opcionais de diretiva de integridade. Se nenhuma diretiva de integridade for especificada, as diretivas de integridade do cluster ou manifesto do aplicativo serão usadas para avaliação. Se os manifestos não contiverem uma definição para políticas de integridade, as políticas de integridade padrão serão usadas para avaliação. As políticas de integridade padrão não toleram falhas. As consultas também aceitam filtros para retornar apenas filhos ou eventos parciais - aqueles que respeitam os filtros especificados. Outro filtro permite excluir as estatísticas das crianças.
Nota
Os filtros de saída são aplicados no lado do servidor, para que o tamanho da resposta da mensagem seja reduzido. Recomendamos que você use os filtros de saída para limitar os dados retornados, em vez de aplicar filtros no lado do cliente.
A integridade de uma entidade contém:
- O estado de integridade agregado da entidade. Calculado pelo repositório de saúde com base em relatórios de integridade da entidade, estados de saúde infantil (quando aplicável) e políticas de saúde. Leia mais sobre a avaliação de saúde da entidade.
- Os eventos de saúde na entidade.
- A recolha de estados de saúde de todas as crianças para as entidades que podem ter filhos. Os estados de integridade contêm identificadores de entidade e o estado de integridade agregado. Para obter a integridade completa de uma criança, chame a integridade da consulta para o tipo de entidade filho e passe o identificador filho.
- As avaliações insalubres que apontam para o relatório que desencadeou o estado da entidade, se a entidade não estiver saudável. As avaliações são recursivas, contendo as avaliações de saúde da criança que desencadearam o estado de saúde atual. Por exemplo, um cão de guarda relatou um erro em relação a uma réplica. A integridade do aplicativo mostra uma avaliação insalubre devido a um serviço insalubre; o serviço não está íntegro devido a uma partição em erro; a partição não está íntegra devido a uma réplica em erro; A réplica não está íntegra devido ao relatório de integridade de erro do cão de guarda.
- As estatísticas de saúde para todos os tipos de crianças das entidades que têm filhos. Por exemplo, a integridade do cluster mostra o número total de aplicativos, serviços, partições, réplicas e entidades implantadas no cluster. A integridade do serviço mostra o número total de partições e réplicas no serviço especificado.
Obter integridade do cluster
Retorna a integridade da entidade de cluster e contém os estados de integridade de aplicativos e nós (filhos do cluster). Entrada:
- [Opcional] A diretiva de integridade do cluster usada para avaliar os nós e os eventos de cluster.
- [Opcional] O mapa de políticas de integridade do aplicativo, com as políticas de integridade usadas para substituir as diretivas de manifesto do aplicativo.
- [Opcional] Filtra eventos, nós e aplicativos que especificam quais entradas são de interesse e devem ser retornadas no resultado (por exemplo, somente erros ou avisos e erros). Todos os eventos, nós e aplicativos são usados para avaliar a integridade agregada da entidade, independentemente do filtro.
- [Opcional] Filtrar para excluir estatísticas de integridade.
- [Opcional] Filtre para incluir estatísticas de malha:/integridade do sistema nas estatísticas de integridade. Aplicável apenas quando as estatísticas de saúde não são excluídas. Por padrão, as estatísticas de integridade incluem apenas estatísticas para aplicativos de usuário e não para o aplicativo do sistema.
API
Para obter a integridade do cluster, crie um FabricClient
e chame o método GetClusterHealthAsync em seu HealthManager.
A chamada a seguir obtém a integridade do cluster:
ClusterHealth clusterHealth = await fabricClient.HealthManager.GetClusterHealthAsync();
O código a seguir obtém a integridade do cluster usando uma política de integridade de cluster personalizada e filtros para nós e aplicativos. Ele especifica que as estatísticas de integridade incluem as estatísticas de malha:/System. Ele cria ClusterHealthQueryDescription, que contém as informações de entrada.
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
O cmdlet para obter a integridade do cluster é Get-ServiceFabricClusterHealth. Primeiro, conecte-se ao cluster usando o cmdlet Connect-ServiceFabricCluster .
O estado do cluster é de cinco nós, o aplicativo do sistema e fabric:/WordCount configurado como descrito.
O cmdlet a seguir obtém a integridade do cluster usando diretivas de integridade padrão. O estado de integridade agregado é aviso, porque o aplicativo fabric:/WordCount está em aviso. Observe como as avaliações não saudáveis fornecem detalhes sobre as condições que desencadearam a saúde agregada.
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
O cmdlet PowerShell a seguir obtém a integridade do cluster usando uma política de aplicativo personalizada. Ele filtra os resultados para obter apenas aplicativos e nós em erro ou aviso. Como resultado, nenhum nó é retornado, pois todos estão saudáveis. Somente o aplicativo fabric:/WordCount respeita o filtro de aplicativos. Como a política personalizada especifica considerar avisos como erros para o aplicativo fabric:/WordCount, o aplicativo é avaliado como errado, assim como o 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
Você pode obter a integridade do cluster com uma solicitação GET ou uma solicitação POST que inclui políticas de integridade descritas no corpo.
Obter integridade do nó
Retorna a integridade de uma entidade de nó e contém os eventos de integridade relatados no nó. Entrada:
- [Obrigatório] O nome do nó que identifica o nó.
- [Opcional] As configurações de diretiva de integridade do cluster usadas para avaliar a integridade.
- [Opcional] Filtra eventos que especificam quais entradas são de interesse e devem ser retornadas no resultado (por exemplo, somente erros ou avisos e erros). Todos os eventos são usados para avaliar a integridade agregada da entidade, independentemente do filtro.
API
Para obter a integridade do nó por meio da API, crie um FabricClient
e chame o método GetNodeHealthAsync em seu HealthManager.
O código a seguir obtém a integridade do nó para o nome do nó especificado:
NodeHealth nodeHealth = await fabricClient.HealthManager.GetNodeHealthAsync(nodeName);
O código a seguir obtém a integridade do nó para o nome do nó especificado e passa o filtro de eventos e a política personalizada por meio de 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
O cmdlet para obter a integridade do nó é Get-ServiceFabricNodeHealth. Primeiro, conecte-se ao cluster usando o cmdlet Connect-ServiceFabricCluster . O cmdlet a seguir obtém a integridade do nó usando políticas de integridade padrão:
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
O cmdlet a seguir obtém a integridade de todos os nós no cluster:
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
Você pode obter a integridade do nó com uma solicitação GET ou uma solicitação POST que inclui políticas de saúde descritas no corpo.
Obter integridade do aplicativo
Retorna a integridade de uma entidade de aplicativo. Ele contém os estados de integridade do aplicativo implantado e filhos de serviço. Entrada:
- [Obrigatório] O nome do aplicativo (URI) que identifica o aplicativo.
- [Opcional] A política de integridade do aplicativo usada para substituir as diretivas de manifesto do aplicativo.
- [Opcional] Filtra eventos, serviços e aplicativos implantados que especificam quais entradas são de interesse e devem ser retornadas no resultado (por exemplo, somente erros ou avisos e erros). Todos os eventos, serviços e aplicativos implantados são usados para avaliar a integridade agregada da entidade, independentemente do filtro.
- [Opcional] Filtrar para excluir as estatísticas de integridade. Se não for especificado, as estatísticas de integridade incluem ok, aviso e contagem de erros para todos os filhos de aplicativos: serviços, partições, réplicas, aplicativos implantados e pacotes de serviços implantados.
API
Para obter a integridade do aplicativo, crie um FabricClient
e chame o método GetApplicationHealthAsync em seu HealthManager.
O código a seguir obtém a integridade do aplicativo para o nome do aplicativo especificado (URI):
ApplicationHealth applicationHealth = await fabricClient.HealthManager.GetApplicationHealthAsync(applicationName);
O código a seguir obtém a integridade do aplicativo para o nome do aplicativo especificado (URI), com filtros e políticas personalizadas especificadas 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
O cmdlet para obter a integridade do aplicativo é Get-ServiceFabricApplicationHealth. Primeiro, conecte-se ao cluster usando o cmdlet Connect-ServiceFabricCluster .
O cmdlet a seguir retorna a integridade do aplicativo 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
O cmdlet do PowerShell a seguir passa em políticas personalizadas. Também filtra crianças e eventos.
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
Você pode obter a integridade do aplicativo com uma solicitação GET ou uma solicitação POST que inclui as políticas de integridade descritas no corpo.
Obter estado de funcionamento do serviço
Retorna a integridade de uma entidade de serviço. Ele contém os estados de integridade da partição. Entrada:
- [Obrigatório] O nome do serviço (URI) que identifica o serviço.
- [Opcional] A política de integridade do aplicativo usada para substituir a política de manifesto do aplicativo.
- [Opcional] Filtra eventos e partições que especificam quais entradas são de interesse e devem ser retornadas no resultado (por exemplo, somente erros ou avisos e erros). Todos os eventos e partições são usados para avaliar a integridade agregada da entidade, independentemente do filtro.
- [Opcional] Filtrar para excluir estatísticas de integridade. Se não for especificado, as estatísticas de integridade mostram a contagem ok, aviso e erro para todas as partições e réplicas do serviço.
API
Para obter a integridade do serviço por meio da API, crie um FabricClient
e chame o método GetServiceHealthAsync em seu HealthManager.
O exemplo a seguir obtém a integridade de um serviço com nome de serviço especificado (URI):
ServiceHealth serviceHealth = await fabricClient.HealthManager.GetServiceHealthAsync(serviceName);
O código a seguir obtém a integridade do serviço para o nome de serviço especificado (URI), especificando filtros e política personalizada por meio de 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
O cmdlet para obter a integridade do serviço é Get-ServiceFabricServiceHealth. Primeiro, conecte-se ao cluster usando o cmdlet Connect-ServiceFabricCluster .
O cmdlet a seguir obtém a integridade do serviço usando políticas de integridade padrão:
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
Você pode obter a integridade do serviço com uma solicitação GET ou uma solicitação POST que inclui políticas de saúde descritas no corpo.
Obter integridade da partição
Retorna a integridade de uma entidade de partição. Ele contém os estados de integridade da réplica. Entrada:
- [Obrigatório] O ID da partição (GUID) que identifica a partição.
- [Opcional] A política de integridade do aplicativo usada para substituir a política de manifesto do aplicativo.
- [Opcional] Filtra eventos e réplicas que especificam quais entradas são de interesse e devem ser retornadas no resultado (por exemplo, somente erros ou avisos e erros). Todos os eventos e réplicas são usados para avaliar a integridade agregada da entidade, independentemente do filtro.
- [Opcional] Filtrar para excluir estatísticas de integridade. Se não for especificado, as estatísticas de integridade mostram quantas réplicas estão nos estados ok, aviso e erro.
API
Para obter a integridade da partição por meio da API, crie um FabricClient
e chame o método GetPartitionHealthAsync em seu HealthManager. Para especificar parâmetros opcionais, crie PartitionHealthQueryDescription.
PartitionHealth partitionHealth = await fabricClient.HealthManager.GetPartitionHealthAsync(partitionId);
PowerShell
O cmdlet para obter a integridade da partição é Get-ServiceFabricPartitionHealth. Primeiro, conecte-se ao cluster usando o cmdlet Connect-ServiceFabricCluster .
O cmdlet a seguir obtém a integridade de todas as partições do serviço fabric:/WordCount/WordCountService e filtra os estados de integridade da réplica:
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
Você pode obter a integridade da partição com uma solicitação GET ou uma solicitação POST que inclua as políticas de integridade descritas no corpo.
Obter integridade da réplica
Retorna a integridade de uma réplica de serviço com monitoração de estado ou de uma instância de serviço sem monitoração de estado. Entrada:
- [Obrigatório] O GUID (ID da partição) e o ID da réplica que identificam a réplica.
- [Opcional] Os parâmetros de política de integridade do aplicativo usados para substituir as políticas de manifesto do aplicativo.
- [Opcional] Filtra eventos que especificam quais entradas são de interesse e devem ser retornadas no resultado (por exemplo, somente erros ou avisos e erros). Todos os eventos são usados para avaliar a integridade agregada da entidade, independentemente do filtro.
API
Para obter a integridade da réplica por meio da API, crie um FabricClient
e chame o método GetReplicaHealthAsync em seu HealthManager. Para especificar parâmetros avançados, use ReplicaHealthQueryDescription.
ReplicaHealth replicaHealth = await fabricClient.HealthManager.GetReplicaHealthAsync(partitionId, replicaId);
PowerShell
O cmdlet para obter a integridade da réplica é Get-ServiceFabricReplicaHealth. Primeiro, conecte-se ao cluster usando o cmdlet Connect-ServiceFabricCluster .
O cmdlet a seguir obtém a integridade da réplica primária para todas as partições do serviço:
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
Você pode obter a integridade da réplica com uma solicitação GET ou uma solicitação POST que inclua as políticas de integridade descritas no corpo.
Obter integridade do aplicativo implantado
Retorna a integridade de um aplicativo implantado em uma entidade de nó. Ele contém os estados de integridade do pacote de serviço implantado. Entrada:
- [Obrigatório] O nome do aplicativo (URI) e o nome do nó (cadeia de caracteres) que identificam o aplicativo implantado.
- [Opcional] A política de integridade do aplicativo usada para substituir as diretivas de manifesto do aplicativo.
- [Opcional] Filtra eventos e pacotes de serviços implantados que especificam quais entradas são de interesse e devem ser retornadas no resultado (por exemplo, somente erros ou avisos e erros). Todos os eventos e pacotes de serviço implantados são usados para avaliar a integridade agregada da entidade, independentemente do filtro.
- [Opcional] Filtrar para excluir estatísticas de integridade. Se não for especificado, as estatísticas de integridade mostram o número de pacotes de serviço implantados nos estados de integridade ok, aviso e erro.
API
Para obter a integridade de um aplicativo implantado em um nó por meio da API, crie um FabricClient
e chame o método GetDeployedApplicationHealthAsync em seu HealthManager. Para especificar parâmetros opcionais, use DeployedApplicationHealthQueryDescription.
DeployedApplicationHealth health = await fabricClient.HealthManager.GetDeployedApplicationHealthAsync(
new DeployedApplicationHealthQueryDescription(applicationName, nodeName));
PowerShell
O cmdlet para obter a integridade do aplicativo implantado é Get-ServiceFabricDeployedApplicationHealth. Primeiro, conecte-se ao cluster usando o cmdlet Connect-ServiceFabricCluster . Para descobrir onde um aplicativo é implantado, execute Get-ServiceFabricApplicationHealth e examine os filhos do aplicativo implantado.
O cmdlet a seguir obtém a integridade do aplicativo fabric:/WordCount implantado no _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
Você pode obter a integridade do aplicativo implantado com uma solicitação GET ou uma solicitação POST que inclua as políticas de integridade descritas no corpo.
Obter integridade do pacote de serviço implantado
Retorna a integridade de uma entidade de pacote de serviço implantada. Entrada:
- [Obrigatório] O nome do aplicativo (URI), o nome do nó (cadeia de caracteres) e o nome do manifesto do serviço (cadeia de caracteres) que identificam o pacote de serviço implantado.
- [Opcional] A política de integridade do aplicativo usada para substituir a política de manifesto do aplicativo.
- [Opcional] Filtra eventos que especificam quais entradas são de interesse e devem ser retornadas no resultado (por exemplo, somente erros ou avisos e erros). Todos os eventos são usados para avaliar a integridade agregada da entidade, independentemente do filtro.
API
Para obter a integridade de um pacote de serviço implantado por meio da API, crie um FabricClient
e chame o método GetDeployedServicePackageHealthAsync em seu HealthManager. Para especificar parâmetros opcionais, use DeployedServicePackageHealthQueryDescription.
DeployedServicePackageHealth health = await fabricClient.HealthManager.GetDeployedServicePackageHealthAsync(
new DeployedServicePackageHealthQueryDescription(applicationName, nodeName, serviceManifestName));
PowerShell
O cmdlet para obter a integridade do pacote de serviço implantado é Get-ServiceFabricDeployedServicePackageHealth. Primeiro, conecte-se ao cluster usando o cmdlet Connect-ServiceFabricCluster . Para ver onde um aplicativo é implantado, execute Get-ServiceFabricApplicationHealth e examine os aplicativos implantados. Para ver quais pacotes de serviço estão em um aplicativo, examine os filhos do pacote de serviço implantado na saída Get-ServiceFabricDeployedApplicationHealth .
O cmdlet a seguir obtém a integridade do pacote de serviço WordCountServicePkg do aplicativo fabric:/WordCount implantado no _Node_2. A entidade tem relatórios System.Hosting para ativação bem-sucedida do pacote de serviço e do ponto de entrada e registro bem-sucedido do tipo de serviço.
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
Você pode obter a integridade do pacote de serviço implantado com uma solicitação GET ou uma solicitação POST que inclua as políticas de integridade descritas no corpo.
Consultas de bloco de saúde
As consultas de bloco de integridade podem retornar filhos de cluster de vários níveis (recursivamente), por filtros de entrada. Suporta filtros avançados que permitem muita flexibilidade na escolha das crianças a serem devolvidas. Os filtros podem especificar filhos pelo identificador exclusivo ou por outros identificadores de grupo e/ou estados de integridade. Por padrão, nenhuma criança é incluída, ao contrário dos comandos de saúde que sempre incluem crianças de primeiro nível.
As consultas de integridade retornam apenas filhos de primeiro nível da entidade especificada por filtros necessários. Para obter os filhos das crianças, você deve chamar APIs de saúde adicionais para cada entidade de interesse. Da mesma forma, para obter a integridade de entidades específicas, você deve chamar uma API de integridade para cada entidade desejada. A filtragem avançada de consulta de bloco permite solicitar vários itens de interesse em uma consulta, minimizando o tamanho da mensagem e o número de mensagens.
O valor da consulta de bloco é que você pode obter o estado de integridade para mais entidades de cluster (potencialmente todas as entidades de cluster começando na raiz necessária) em uma chamada. Você pode expressar consultas de integridade complexas, como:
- Retorne somente aplicativos com erro e, para esses aplicativos, inclua todos os serviços em aviso ou erro. Para serviços retornados, inclua todas as partições.
- Retornam apenas a integridade de quatro aplicativos, especificados por seus nomes.
- Retorne apenas a integridade de aplicativos de um tipo de aplicativo desejado.
- Retorne todas as entidades implantadas em um nó. Retorna todos os aplicativos, todos os aplicativos implantados no nó especificado e todos os pacotes de serviço implantados nesse nó.
- Retorne todas as réplicas por engano. Retorna todos os aplicativos, serviços, partições e apenas réplicas por engano.
- Devolver todas as aplicações. Para um serviço especificado, inclua todas as partições.
Atualmente, a consulta de bloco de integridade é exposta apenas para a entidade de cluster. Ele retorna um bloco de integridade do cluster, que contém:
- O estado de integridade agregado do cluster.
- A lista de partes do estado de integridade de nós que respeitam os filtros de entrada.
- A lista de partes do estado de integridade de aplicativos que respeitam os filtros de entrada. Cada bloco de estado de integridade do aplicativo contém uma lista de partes com todos os serviços que respeitam os filtros de entrada e uma lista de partes com todos os aplicativos implantados que respeitam os filtros. O mesmo para os filhos de serviços e aplicativos implantados. Dessa forma, todas as entidades no cluster podem ser potencialmente retornadas, se solicitadas, de forma hierárquica.
Consulta de bloco de integridade do cluster
Retorna a integridade da entidade de cluster e contém os blocos de estado de integridade hierárquica dos filhos necessários. Entrada:
- [Opcional] A diretiva de integridade do cluster usada para avaliar os nós e os eventos de cluster.
- [Opcional] O mapa de políticas de integridade do aplicativo, com as políticas de integridade usadas para substituir as diretivas de manifesto do aplicativo.
- [Opcional] Filtros para nós e aplicativos que especificam quais entradas são de interesse e devem ser retornadas no resultado. Os filtros são específicos de uma entidade/grupo de entidades ou são aplicáveis a todas as entidades nesse nível. A lista de filtros pode conter um filtro geral e/ou filtros para identificadores específicos para entidades de grão fino retornadas pela consulta. Se estiverem vazias, as crianças não serão devolvidas por padrão. Leia mais sobre os filtros em NodeHealthStateFilter e ApplicationHealthStateFilter. Os filtros de aplicativo podem especificar recursivamente filtros avançados para crianças.
O resultado do bloco inclui as crianças que respeitam os filtros.
Atualmente, a consulta de bloco não retorna avaliações não íntegras ou eventos de entidade. Essas informações adicionais podem ser obtidas usando a consulta de integridade do cluster existente.
API
Para obter o bloco de integridade do cluster, crie um FabricClient
e chame o método GetClusterHealthChunkAsync em seu HealthManager. Você pode passar ClusterHealthQueryDescription para descrever políticas de integridade e filtros avançados.
O código a seguir obtém o bloco de integridade do cluster com filtros avançados.
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
O cmdlet para obter a integridade do cluster é Get-ServiceFabricClusterChunkHealth. Primeiro, conecte-se ao cluster usando o cmdlet Connect-ServiceFabricCluster .
O código a seguir obtém nós somente se eles estiverem em Erro, exceto para um nó específico, que sempre deve ser retornado.
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
O cmdlet a seguir obtém o bloco de cluster com filtros de aplicativo.
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
O cmdlet a seguir retorna todas as entidades implantadas em um nó.
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
Você pode obter o bloco de integridade do cluster com uma solicitação GET ou uma solicitação POST que inclui políticas de integridade e filtros avançados descritos no corpo.
Consultas gerais
As consultas gerais retornam uma lista de entidades do Service Fabric de um tipo especificado. Eles são expostos por meio da API (por meio dos métodos em FabricClient.QueryManager), cmdlets do PowerShell e REST. Essas consultas agregam subconsultas de vários componentes. Um deles é o armazenamento de integridade, que preenche o estado de integridade agregado para cada resultado da consulta.
Nota
As consultas gerais retornam o estado de integridade agregado da entidade e não contêm dados de integridade avançados. Se uma entidade não for saudável, você pode acompanhar consultas de saúde para obter todas as suas informações de saúde, incluindo eventos, estados de saúde infantil e avaliações não saudáveis.
Se as consultas gerais retornarem um estado de integridade desconhecido para uma entidade, é possível que o armazenamento de integridade não tenha dados completos sobre a entidade. Também é possível que uma subconsulta ao repositório de integridade não tenha sido bem-sucedida (por exemplo, houve um erro de comunicação ou o armazenamento de integridade foi limitado). Acompanhe com uma consulta de saúde para a entidade. Se a subconsulta encontrou erros transitórios, como problemas de rede, essa consulta de acompanhamento poderá ser bem-sucedida. Também pode fornecer mais detalhes da loja de saúde sobre por que a entidade não está exposta.
As consultas que contêm HealthState para entidades são:
- Lista de nós: retorna os nós da lista no cluster (paginado).
- API: FabricClient.QueryClient.GetNodeListAsync
- PowerShell: Get-ServiceFabricNode
- Lista de aplicativos: retorna a lista de aplicativos no cluster (paginada).
- API: FabricClient.QueryClient.GetApplicationListAsync
- PowerShell: Get-ServiceFabricApplication
- Lista de serviços: retorna a lista de serviços em um aplicativo (paginado).
- API: FabricClient.QueryClient.GetServiceListAsync
- PowerShell: Get-ServiceFabricService
- Lista de partições: Devolve a lista de partições num serviço (paginado).
- API: FabricClient.QueryClient.GetPartitionListAsync
- PowerShell: Get-ServiceFabricPartition
- Lista de réplicas: retorna a lista de réplicas em uma partição (paginada).
- API: FabricClient.QueryClient.GetReplicaListAsync
- PowerShell: Get-ServiceFabricReplica
- Lista de aplicativos implantados: retorna a lista de aplicativos implantados em um nó.
- API: FabricClient.QueryClient.GetDeployedApplicationListAsync
- PowerShell: Get-ServiceFabricDeployedApplication
- Lista de pacotes de serviço implantados: retorna a lista de pacotes de serviço em um aplicativo implantado.
- API: FabricClient.QueryClient.GetDeployedServicePackageListAsync
- PowerShell: Get-ServiceFabricDeployedApplication
Nota
Algumas das consultas retornam resultados paginados. O retorno dessas consultas é uma lista derivada de PagedList<T>. Se os resultados não ajustarem a uma mensagem, apenas uma página será retornada e um ContinuationToken que controla onde a enumeração parou. Continue a chamar a mesma consulta e passe o token de continuação da consulta anterior para obter os próximos resultados.
Exemplos
O código a seguir obtém os aplicativos não íntegros no cluster:
var applications = fabricClient.QueryManager.GetApplicationListAsync().Result.Where(
app => app.HealthState == HealthState.Error);
O cmdlet a seguir obtém os detalhes do aplicativo fabric:/WordCount. Observe que o estado de saúde está em alerta.
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"}]" }
O cmdlet a seguir obtém os serviços com um estado de integridade de erro:
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
Atualizações de cluster e aplicativos
Durante uma atualização monitorada do cluster e do aplicativo, o Service Fabric verifica a integridade para garantir que tudo permaneça íntegro. Se uma entidade não estiver íntegra conforme avaliado usando políticas de integridade configuradas, a atualização aplicará políticas específicas de atualização para determinar a próxima ação. A atualização pode ser pausada para permitir a interação do usuário (como corrigir condições de erro ou alterar políticas) ou pode reverter automaticamente para a versão válida anterior.
Durante uma atualização de cluster , você pode obter o status de atualização de cluster. O status de atualização inclui avaliações não íntegras, que apontam para o que não está íntegro no cluster. Se a atualização for revertida devido a problemas de integridade, o status da atualização lembrará os últimos motivos não íntegros. Essas informações podem ajudar os administradores a investigar o que deu errado depois que a atualização foi revertida ou interrompida.
Da mesma forma, durante uma atualização de aplicativo , quaisquer avaliações não íntegras estão contidas no status de atualização do aplicativo.
A seguir mostra o status de atualização do aplicativo para um aplicativo de malha modificado:/WordCount. Um órgão de fiscalização relatou um erro em uma de suas réplicas. A atualização está sendo revertida porque as verificações de integridade não são respeitadas.
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
Leia mais sobre a atualização do aplicativo Service Fabric.
Usar avaliações de integridade para solucionar problemas
Sempre que houver um problema com o cluster ou um aplicativo, examine a integridade do cluster ou do aplicativo para identificar o que está errado. As avaliações insalubres fornecem detalhes sobre o que desencadeou o atual estado insalubre. Se precisar, você pode detalhar entidades filhas não íntegras para identificar a causa raiz.
Por exemplo, considere um aplicativo não íntegro porque há um relatório de erro em uma de suas réplicas. O cmdlet do PowerShell a seguir mostra as avaliações não íntegras:
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
Você pode olhar para a réplica para obter mais informações:
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
Nota
As avaliações insalubres mostram a primeira razão pela qual a entidade é avaliada para o estado de saúde atual. Pode haver vários outros eventos que desencadeiam esse estado, mas eles não são refletidos nas avaliações. Para obter mais informações, faça uma busca detalhada nas entidades de saúde para descobrir todos os relatórios não íntegros no cluster.
Próximos passos
Adicionar relatórios de integridade personalizados do Service Fabric
Como relatar e verificar a integridade do serviço