Partilhar via


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 WordCountServiceTypee 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 que Partition 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:

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:

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

Use system health reports to troubleshoot (Utilizar relatórios de estado de funcionamento do sistema para resolver problemas)

Adicionar relatórios de integridade personalizados do Service Fabric

Como relatar e verificar a integridade do serviço

Monitorar e diagnosticar serviços localmente

Atualização do aplicativo Service Fabric