Share via


Ver relatórios de estado de funcionamento do Service Fabric

O Azure Service Fabric introduz um modelo de estado de funcionamento com entidades de estado de funcionamento em que os componentes do sistema e os watchdogs podem comunicar condições locais que estão a monitorizar. O arquivo de estado de funcionamento agrega todos os dados de estado de funcionamento para determinar se as entidades estão em bom estado de funcionamento.

O cluster é preenchido automaticamente com relatórios de estado de funcionamento enviados pelos componentes do sistema. Leia mais em Utilizar relatórios de estado de funcionamento do sistema para resolver problemas.

O Service Fabric fornece várias formas de obter o estado de funcionamento agregado das entidades:

  • Service Fabric Explorer ou outras ferramentas de visualização
  • Consultas de estado de funcionamento (através do PowerShell, API ou REST)
  • Consultas gerais que devolvem uma lista de entidades com estado de funcionamento como uma das propriedades (através do PowerShell, API ou REST)

Para demonstrar estas opções, vamos utilizar um cluster local com cinco nós e a aplicação fabric:/WordCount. A aplicação fabric:/WordCount contém dois serviços predefinidos, um serviço com monitorização de estado do tipo WordCountServiceTypee um serviço sem estado do tipo WordCountWebServiceType. Alterei o ApplicationManifest.xml para exigir sete réplicas de destino para o serviço com monitorização de estado e uma partição. Uma vez que existem apenas cinco nós no cluster, os componentes do sistema comunicam um aviso na partição do serviço porque 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>

Estado de funcionamento no Service Fabric Explorer

Service Fabric Explorer fornece uma vista visual do cluster. Na imagem abaixo, pode ver que:

  • O recurso de infraestrutura da aplicação:/WordCount está vermelho (por erro) porque tem um evento de erro comunicado pelo MyWatchdog para a propriedade Disponibilidade.
  • Um dos seus serviços, fabric:/WordCount/WordCountService , é amarelo (em aviso). O serviço está configurado com sete réplicas e o cluster tem cinco nós, pelo que não é possível colocar duas réplicas. Embora não seja apresentada aqui, a partição do serviço é amarela devido a um relatório de sistema que System.FM indica .Partition is below target replica or instance count A partição amarela aciona o serviço amarelo.
  • O cluster está vermelho devido à aplicação vermelha.

A avaliação utiliza políticas predefinidas do manifesto do cluster e do manifesto da aplicação. São políticas rigorosas e não toleram qualquer falha.

Vista do cluster com Service Fabric Explorer:

Vista do cluster com Service Fabric Explorer.

Nota

Leia mais sobre Service Fabric Explorer.

Consultas de estado de funcionamento

O Service Fabric expõe consultas de estado de funcionamento para cada um dos tipos de entidade suportados. Podem ser acedidos através da API através de métodos em FabricClient.HealthManager, cmdlets do PowerShell e REST. Estas consultas devolvem informações completas sobre o estado de funcionamento da entidade: o estado de funcionamento agregado, os eventos de estado de funcionamento da entidade, os estados de funcionamento subordinados (quando aplicável), as avaliações em mau estado de funcionamento (quando a entidade não está em bom estado de funcionamento) e as estatísticas de estado de funcionamento das crianças (quando aplicável).

Nota

Uma entidade de estado de funcionamento é devolvida quando está totalmente preenchida no arquivo de estado de funcionamento. A entidade tem de estar ativa (não eliminada) e ter um relatório de sistema. As entidades principais na cadeia de hierarquia também têm de ter relatórios de sistema. Se alguma destas condições não for satisfeita, as consultas de estado de funcionamento devolvem uma FabricException com FabricErrorCodeFabricHealthEntityNotFound que mostra o motivo pelo qual a entidade não é devolvida.

As consultas de estado de funcionamento têm de passar no identificador da entidade, que depende do tipo de entidade. As consultas aceitam parâmetros opcionais da política de estado de funcionamento. Se não forem especificadas políticas de estado de funcionamento, as políticas de estado de funcionamento do cluster ou do manifesto da aplicação são utilizadas para avaliação. Se os manifestos não contiverem uma definição para políticas de estado de funcionamento, as políticas de estado de funcionamento predefinidas são utilizadas para avaliação. As políticas de estado de funcionamento predefinidas não toleram falhas. As consultas também aceitam filtros para devolver apenas subordinados parciais ou eventos – os que respeitam os filtros especificados. Outro filtro permite excluir as estatísticas subordinadas.

Nota

Os filtros de saída são aplicados no lado do servidor, pelo que o tamanho da resposta da mensagem é reduzido. Recomendamos que utilize os filtros de saída para limitar os dados devolvidos, em vez de aplicar filtros do lado do cliente.

O estado de funcionamento de uma entidade contém:

  • O estado de funcionamento agregado da entidade. Calculado pelo arquivo de estado de funcionamento com base em relatórios de estado de funcionamento de entidades, estados de funcionamento subordinados (quando aplicável) e políticas de estado de funcionamento. Leia mais sobre a avaliação do estado de funcionamento das entidades.
  • Os eventos de estado de funcionamento na entidade.
  • A coleção de estados de saúde de todas as crianças para as entidades que podem ter filhos. Os estados de funcionamento contêm identificadores de entidades e o estado de funcionamento agregado. Para obter o estado de funcionamento completo de um menor, chame o estado de funcionamento da consulta para o tipo de entidade subordinada e transmita o identificador subordinado.
  • As avaliações em mau estado de funcionamento que apontam para o relatório que acionou o estado da entidade, se a entidade não estiver em bom estado de funcionamento. As avaliações são recursivas, contendo as avaliações de estado de funcionamento das crianças que desencadearam o estado de funcionamento atual. Por exemplo, um cão de guarda comunicou um erro numa réplica. O estado de funcionamento da aplicação mostra uma avaliação em mau estado de funcionamento devido a um serviço em mau estado de funcionamento; o serviço está em mau estado de funcionamento devido a um erro de partição; a partição está em mau estado de funcionamento devido a uma réplica em erro; a réplica está em mau estado de funcionamento devido ao relatório de estado de funcionamento do erro watchdog.
  • As estatísticas de saúde para todos os tipos de crianças das entidades que têm filhos. Por exemplo, o estado de funcionamento do cluster mostra o número total de aplicações, serviços, partições, réplicas e entidades implementadas no cluster. Estado de funcionamento dos serviços mostra o número total de partições e réplicas no serviço especificado.

Obter o estado de funcionamento do cluster

Devolve o estado de funcionamento da entidade do cluster e contém os estados de funcionamento das aplicações e dos nós (subordinados do cluster). Entrada:

  • [Opcional] A política de estado de funcionamento do cluster utilizada para avaliar os nós e os eventos do cluster.
  • [Opcional] O mapa da política de estado de funcionamento da aplicação, com as políticas de estado de funcionamento utilizadas para substituir as políticas de manifesto da aplicação.
  • [Opcional] Filtros para eventos, nós e aplicações que especificam que entradas são de interesse e devem ser devolvidas no resultado (por exemplo, apenas erros ou avisos e erros). Todos os eventos, nós e aplicações são utilizados para avaliar o estado de funcionamento agregado da entidade, independentemente do filtro.
  • [Opcional] Filtre para excluir estatísticas de estado de funcionamento.
  • [Opcional] Filtre para incluir os recursos de infraestrutura:/Estatísticas do estado de funcionamento do sistema nas estatísticas de estado de funcionamento. Apenas aplicável quando as estatísticas de estado de funcionamento não são excluídas. Por predefinição, as estatísticas de estado de funcionamento incluem apenas estatísticas para aplicações de utilizador e não para a Aplicação de sistema.

API

Para obter o estado de funcionamento do cluster, crie um FabricClient e chame o método GetClusterHealthAsync no respetivo HealthManager.

A chamada seguinte obtém o estado de funcionamento do cluster:

ClusterHealth clusterHealth = await fabricClient.HealthManager.GetClusterHealthAsync();

O código seguinte obtém o estado de funcionamento do cluster com uma política de estado de funcionamento de cluster personalizada e filtros para nós e aplicações. Especifica que as estatísticas de estado de funcionamento incluem os recursos de infraestrutura:/Estatísticas do sistema. 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 o estado de funcionamento do cluster é Get-ServiceFabricClusterHealth. Em primeiro lugar, ligue-se ao cluster com o cmdlet Connect-ServiceFabricCluster .

O estado do cluster é de cinco nós, a aplicação de sistema e recursos de infraestrutura:/WordCount configurados conforme descrito.

O cmdlet seguinte obtém o estado de funcionamento do cluster com as políticas de estado de funcionamento predefinidas. O estado de funcionamento agregado é um aviso, porque a aplicação fabric:/WordCount está em aviso. Tenha em atenção como as avaliações em mau estado de funcionamento fornecem detalhes sobre as condições que acionaram o estado de funcionamento agregado.

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 seguinte cmdlet do PowerShell obtém o estado de funcionamento do cluster com uma política de aplicação personalizada. Filtra os resultados para obter apenas aplicações e nós com erro ou aviso. Como resultado, não são devolvidos nós, uma vez que estão todos em bom estado de funcionamento. Apenas a aplicação fabric:/WordCount respeita o filtro de aplicações. Uma vez que a política personalizada especifica considerar os avisos como erros para a aplicação fabric:/WordCount, a aplicação é avaliada como em erro, tal 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

Pode obter o estado de funcionamento do cluster com um pedido GET ou um pedido POST que inclua políticas de estado de funcionamento descritas no corpo.

Obter estado de funcionamento do nó

Devolve o estado de funcionamento de uma entidade de nó e contém os eventos de estado de funcionamento comunicados no nó. Entrada:

  • [Obrigatório] O nome do nó que identifica o nó.
  • [Opcional] As definições de política de estado de funcionamento do cluster utilizadas para avaliar o estado de funcionamento.
  • [Opcional] Filtros para eventos que especificam que entradas são de interesse e devem ser devolvidas no resultado (por exemplo, apenas erros ou avisos e erros). Todos os eventos são utilizados para avaliar o estado de funcionamento agregado da entidade, independentemente do filtro.

API

Para obter o estado de funcionamento do nó através da API, crie um FabricClient e chame o método GetNodeHealthAsync no respetivo HealthManager.

O código seguinte obtém o estado de funcionamento do nó para o nome do nó especificado:

NodeHealth nodeHealth = await fabricClient.HealthManager.GetNodeHealthAsync(nodeName);

O código seguinte obtém o estado de funcionamento do nó para o nome do nó especificado e transmite o filtro de eventos e a política personalizada através do 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 o estado de funcionamento do nó é Get-ServiceFabricNodeHealth. Em primeiro lugar, ligue-se ao cluster com o cmdlet Connect-ServiceFabricCluster . O seguinte cmdlet obtém o estado de funcionamento do nó com as políticas de estado de funcionamento predefinidas:

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 seguinte obtém o estado de funcionamento 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

Pode obter o estado de funcionamento do nó com um pedido GET ou um pedido POST que inclua políticas de estado de funcionamento descritas no corpo.

Obter o estado de funcionamento da aplicação

Devolve o estado de funcionamento de uma entidade de aplicação. Contém os estados de estado de funcionamento da aplicação implementada e dos serviços subordinados. Entrada:

  • [Obrigatório] O nome da aplicação (URI) que identifica a aplicação.
  • [Opcional] A política de estado de funcionamento da aplicação utilizada para substituir as políticas de manifesto da aplicação.
  • [Opcional] Filtros para eventos, serviços e aplicações implementadas que especificam que entradas são de interesse e devem ser devolvidas no resultado (por exemplo, apenas erros ou avisos e erros). Todos os eventos, serviços e aplicações implementadas são utilizados para avaliar o estado de funcionamento agregado da entidade, independentemente do filtro.
  • [Opcional] Filtre para excluir as estatísticas de estado de funcionamento. Se não forem especificadas, as estatísticas de estado de funcionamento incluem o ok, aviso e contagem de erros para todas as crianças da aplicação: serviços, partições, réplicas, aplicações implementadas e pacotes de serviço implementados.

API

Para obter o estado de funcionamento da aplicação, crie um FabricClient e chame o método GetApplicationHealthAsync no respetivo HealthManager.

O código seguinte obtém o estado de funcionamento da aplicação para o nome da aplicação (URI) especificado:

ApplicationHealth applicationHealth = await fabricClient.HealthManager.GetApplicationHealthAsync(applicationName);

O código seguinte obtém o estado de funcionamento da aplicação para o nome da aplicação (URI) especificado, com filtros e políticas personalizadas especificadas através de 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 o estado de funcionamento da aplicação é Get-ServiceFabricApplicationHealth. Em primeiro lugar, ligue-se ao cluster com o cmdlet Connect-ServiceFabricCluster .

O cmdlet seguinte devolve o estado de funcionamento da aplicação 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 seguinte cmdlet do PowerShell 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

Pode obter o estado de funcionamento da aplicação com um pedido GET ou um pedido POST que inclua políticas de estado de funcionamento descritas no corpo.

Obter o estado de funcionamento do serviço

Devolve o estado de funcionamento de uma entidade de serviço. Contém os estados de estado de funcionamento da partição. Entrada:

  • [Obrigatório] O nome do serviço (URI) que identifica o serviço.
  • [Opcional] A política de estado de funcionamento da aplicação utilizada para substituir a política de manifesto da aplicação.
  • [Opcional] Filtros para eventos e partições que especificam que entradas são de interesse e devem ser devolvidas no resultado (por exemplo, apenas erros ou avisos e erros). Todos os eventos e partições são utilizados para avaliar o estado de funcionamento agregado da entidade, independentemente do filtro.
  • [Opcional] Filtre para excluir estatísticas de estado de funcionamento. Se não forem especificadas, as estatísticas de estado de funcionamento mostram a contagem de erros, avisos e ok para todas as partições e réplicas do serviço.

API

Para obter o estado de funcionamento do serviço através da API, crie um FabricClient e chame o método GetServiceHealthAsync no respetivo HealthManager.

O exemplo seguinte obtém o estado de funcionamento de um serviço com o nome de serviço (URI) especificado:

ServiceHealth serviceHealth = await fabricClient.HealthManager.GetServiceHealthAsync(serviceName);

O código seguinte obtém o estado de funcionamento do serviço para o nome de serviço (URI) especificado, especificando filtros e política personalizada através 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 o estado de funcionamento do serviço é Get-ServiceFabricServiceHealth. Em primeiro lugar, ligue-se ao cluster com o cmdlet Connect-ServiceFabricCluster .

O seguinte cmdlet obtém o estado de funcionamento do serviço com as políticas de estado de funcionamento predefinidas:

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

Pode obter o estado de funcionamento do serviço com um pedido GET ou um pedido POST que inclua políticas de estado de funcionamento descritas no corpo.

Obter o estado de funcionamento da partição

Devolve o estado de funcionamento de uma entidade de partição. Contém os estados de estado de funcionamento da réplica. Entrada:

  • [Obrigatório] O ID da partição (GUID) que identifica a partição.
  • [Opcional] A política de estado de funcionamento da aplicação utilizada para substituir a política de manifesto da aplicação.
  • [Opcional] Filtros para eventos e réplicas que especificam que entradas são de interesse e devem ser devolvidas no resultado (por exemplo, apenas erros ou avisos e erros). Todos os eventos e réplicas são utilizados para avaliar o estado de funcionamento agregado da entidade, independentemente do filtro.
  • [Opcional] Filtre para excluir estatísticas de estado de funcionamento. Se não forem especificadas, as estatísticas de estado de funcionamento mostram quantas réplicas estão em ok, aviso e estados de erro.

API

Para obter o estado de funcionamento da partição através da API, crie um FabricClient e chame o método GetPartitionHealthAsync no seu HealthManager. Para especificar parâmetros opcionais, crie PartitionHealthQueryDescription.

PartitionHealth partitionHealth = await fabricClient.HealthManager.GetPartitionHealthAsync(partitionId);

PowerShell

O cmdlet para obter o estado de funcionamento da partição é Get-ServiceFabricPartitionHealth. Em primeiro lugar, ligue-se ao cluster com o cmdlet Connect-ServiceFabricCluster .

O seguinte cmdlet obtém o estado de funcionamento de todas as partições do serviço fabric:/WordCount/WordCountService e filtra os estados de estado de funcionamento 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

Pode obter o estado de funcionamento da partição com um pedido GET ou um pedido POST que inclua políticas de estado de funcionamento descritas no corpo.

Obter estado de funcionamento da réplica

Devolve o estado de funcionamento de uma réplica de serviço com estado ou de uma instância de serviço sem estado. Entrada:

  • [Obrigatório] O ID da partição (GUID) e o ID de réplica que identificam a réplica.
  • [Opcional] Os parâmetros da política de estado de funcionamento da aplicação utilizados para substituir as políticas de manifesto da aplicação.
  • [Opcional] Filtros para eventos que especificam que entradas são de interesse e devem ser devolvidas no resultado (por exemplo, apenas erros ou avisos e erros). Todos os eventos são utilizados para avaliar o estado de funcionamento agregado da entidade, independentemente do filtro.

API

Para obter o estado de funcionamento da réplica através da API, crie um FabricClient e chame o método GetReplicaHealthAsync no seu HealthManager. Para especificar parâmetros avançados, utilize ReplicaHealthQueryDescription.

ReplicaHealth replicaHealth = await fabricClient.HealthManager.GetReplicaHealthAsync(partitionId, replicaId);

PowerShell

O cmdlet para obter o estado de funcionamento da réplica é Get-ServiceFabricReplicaHealth. Em primeiro lugar, ligue-se ao cluster com o cmdlet Connect-ServiceFabricCluster .

O cmdlet seguinte obtém o estado de funcionamento 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

Pode obter o estado de funcionamento da réplica com um pedido GET ou um pedido POST que inclua políticas de estado de funcionamento descritas no corpo.

Obter o estado de funcionamento da aplicação implementado

Devolve o estado de funcionamento de uma aplicação implementada numa entidade de nó. Contém os estados de estado de funcionamento do pacote de serviço implementados. Entrada:

  • [Obrigatório] O nome da aplicação (URI) e o nome do nó (cadeia) que identificam a aplicação implementada.
  • [Opcional] A política de estado de funcionamento da aplicação utilizada para substituir as políticas de manifesto da aplicação.
  • [Opcional] Filtros para eventos e pacotes de serviço implementados que especificam que entradas são de interesse e devem ser devolvidas no resultado (por exemplo, apenas erros ou avisos e erros). Todos os eventos e pacotes de serviço implementados são utilizados para avaliar o estado de funcionamento agregado da entidade, independentemente do filtro.
  • [Opcional] Filtre para excluir estatísticas de estado de funcionamento. Se não forem especificadas, as estatísticas de estado de funcionamento mostram o número de pacotes de serviço implementados nos estados ok, aviso e estado de funcionamento do erro.

API

Para obter o estado de funcionamento de uma aplicação implementada num nó através da API, crie uma FabricClient e chame o método GetDeployedApplicationHealthAsync no respetivo HealthManager. Para especificar parâmetros opcionais, utilize DeployedApplicationHealthQueryDescription.

DeployedApplicationHealth health = await fabricClient.HealthManager.GetDeployedApplicationHealthAsync(
    new DeployedApplicationHealthQueryDescription(applicationName, nodeName));

PowerShell

O cmdlet para obter o estado de funcionamento da aplicação implementado é Get-ServiceFabricDeployedApplicationHealth. Em primeiro lugar, ligue-se ao cluster com o cmdlet Connect-ServiceFabricCluster . Para saber onde uma aplicação está implementada, execute Get-ServiceFabricApplicationHealth e observe as crianças da aplicação implementada.

O cmdlet seguinte obtém o estado de funcionamento da aplicação fabric:/WordCount implementada 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

Pode obter o estado de funcionamento da aplicação implementado com um pedido GET ou um pedido POST que inclua políticas de estado de funcionamento descritas no corpo.

Obter o estado de funcionamento do pacote de serviço implementado

Devolve o estado de funcionamento de uma entidade de pacote de serviço implementada. Entrada:

  • [Obrigatório] O nome da aplicação (URI), o nome do nó (cadeia) e o nome do manifesto de serviço (cadeia) que identificam o pacote de serviço implementado.
  • [Opcional] A política de estado de funcionamento da aplicação utilizada para substituir a política de manifesto da aplicação.
  • [Opcional] Filtros para eventos que especificam que entradas são de interesse e devem ser devolvidas no resultado (por exemplo, apenas erros ou avisos e erros). Todos os eventos são utilizados para avaliar o estado de funcionamento agregado da entidade, independentemente do filtro.

API

Para obter o estado de funcionamento de um pacote de serviço implementado através da API, crie um FabricClient e chame o método GetDeployedServicePackageHealthAsync no respetivo HealthManager. Para especificar parâmetros opcionais, utilize DeployedServicePackageHealthQueryDescription.

DeployedServicePackageHealth health = await fabricClient.HealthManager.GetDeployedServicePackageHealthAsync(
    new DeployedServicePackageHealthQueryDescription(applicationName, nodeName, serviceManifestName));

PowerShell

O cmdlet para obter o estado de funcionamento do pacote de serviço implementado é Get-ServiceFabricDeployedServicePackageHealth. Em primeiro lugar, ligue-se ao cluster com o cmdlet Connect-ServiceFabricCluster . Para ver onde uma aplicação é implementada, execute Get-ServiceFabricApplicationHealth e veja as aplicações implementadas. Para ver que pacotes de serviço estão numa aplicação, veja o pacote de serviço implementado subordinado na saída Get-ServiceFabricDeployedApplicationHealth .

O cmdlet seguinte obtém o estado de funcionamento do pacote de serviço WordCountServicePkg da aplicação fabric:/WordCount implementada no _Node_2. A entidade tem relatórios System.Hosting para ativação bem-sucedida do service-package e do ponto de entrada e registo de tipo de serviço com êxito.

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

Pode obter o estado de funcionamento do pacote de serviço implementado com um pedido GET ou um pedido POST que inclua políticas de estado de funcionamento descritas no corpo.

Consultas de segmentos de estado de funcionamento

As consultas de segmentos de estado de funcionamento podem devolver crianças 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 para serem devolvidas. Os filtros podem especificar subordinados pelo identificador exclusivo ou por outros identificadores de grupo e/ou estados de estado de funcionamento. Por predefinição, não são incluídas crianças, ao contrário dos comandos de saúde que incluem sempre crianças de primeiro nível.

As consultas de estado de funcionamento devolvem apenas os subordinados de primeiro nível da entidade especificada por filtros necessários. Para obter os menores das crianças, tem de chamar APIs de saúde adicionais para cada entidade de interesse. Da mesma forma, para obter o estado de funcionamento de entidades específicas, tem de chamar uma API de estado de funcionamento para cada entidade pretendida. A filtragem avançada da consulta de segmento permite-lhe pedir vários itens de interesse numa consulta, minimizando o tamanho da mensagem e o número de mensagens.

O valor da consulta de segmento é que pode obter o estado de funcionamento de mais entidades de cluster (potencialmente todas as entidades de cluster que começam na raiz necessária) numa chamada. Pode expressar uma consulta de estado de funcionamento complexa, como:

  • Devolva apenas aplicações com erro e, para essas aplicações, inclua todos os serviços em aviso ou erro. Para serviços devolvidos, inclua todas as partições.
  • Devolve apenas o estado de funcionamento de quatro aplicações, especificadas pelos respetivos nomes.
  • Devolver apenas o estado de funcionamento das aplicações de um tipo de aplicação pretendido.
  • Devolver todas as entidades implementadas num nó. Devolve todas as aplicações, todas as aplicações implementadas no nó especificado e todos os pacotes de serviço implementados nesse nó.
  • Devolva todas as réplicas por erro. Devolve todas as aplicações, serviços, partições e apenas réplicas com erro.
  • Devolver todas as aplicações. Para um serviço especificado, inclua todas as partições.

Atualmente, a consulta do segmento de estado de funcionamento é exposta apenas para a entidade do cluster. Devolve um segmento de estado de funcionamento do cluster, que contém:

  • O estado de funcionamento agregado do cluster.
  • A lista de segmentos de estado de funcionamento dos nós que respeitam os filtros de entrada.
  • A lista de segmentos de estado de funcionamento das aplicações que respeitam os filtros de entrada. Cada segmento de estado de funcionamento da aplicação contém uma lista de segmentos com todos os serviços que respeitam os filtros de entrada e uma lista de segmentos com todas as aplicações implementadas que respeitam os filtros. O mesmo para os menores de serviços e aplicações implementadas. Desta forma, todas as entidades no cluster podem ser potencialmente devolvidas se solicitado, de forma hierárquica.

Consulta de segmentos do estado de funcionamento do cluster

Devolve o estado de funcionamento da entidade do cluster e contém os segmentos de estado de funcionamento hierárquico das crianças necessárias. Entrada:

  • [Opcional] A política de estado de funcionamento do cluster utilizada para avaliar os nós e os eventos do cluster.
  • [Opcional] O mapa da política de estado de funcionamento da aplicação, com as políticas de estado de funcionamento utilizadas para substituir as políticas de manifesto da aplicação.
  • [Opcional] Filtros para nós e aplicações que especificam que entradas são de interesse e devem ser devolvidas 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 detalhadas devolvidas pela consulta. Se estiverem vazias, as crianças não serão devolvidas por predefinição. Leia mais sobre os filtros em NodeHealthStateFilter e ApplicationHealthStateFilter. Os filtros da aplicação podem especificar filtros avançados de forma recursiva para menores.

O resultado do segmento inclui as crianças que respeitam os filtros.

Atualmente, a consulta de segmento não devolve avaliações ou eventos de entidade em mau estado de funcionamento. Essas informações adicionais podem ser obtidas com a consulta de estado de funcionamento do cluster existente.

API

Para obter o segmento de estado de funcionamento do cluster, crie um FabricClient e chame o método GetClusterHealthChunkAsync no seu HealthManager. Pode transmitir ClusterHealthQueryDescription para descrever políticas de estado de funcionamento e filtros avançados.

O código seguinte obtém o segmento de estado de funcionamento 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 o estado de funcionamento do cluster é Get-ServiceFabricClusterChunkHealth. Em primeiro lugar, ligue-se ao cluster com o cmdlet Connect-ServiceFabricCluster .

O código seguinte só obtém nós se estiverem em Erro, exceto um nó específico, que deve ser sempre devolvido.

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 seguinte obtém o segmento de cluster com filtros de aplicação.

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 seguinte devolve todas as entidades implementadas num 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

Pode obter um segmento de estado de funcionamento do cluster com um pedido GET ou um pedido POST que inclua políticas de estado de funcionamento e filtros avançados descritos no corpo.

Consultas gerais

As consultas gerais devolvem uma lista de entidades do Service Fabric de um tipo especificado. São expostos através da API (através dos métodos em FabricClient.QueryManager), cmdlets do PowerShell e REST. Estas consultas agregam subconsultas de vários componentes. Um deles é o arquivo de estado de funcionamento, que preenche o estado de funcionamento agregado para cada resultado de consulta.

Nota

As consultas gerais devolvem o estado de funcionamento agregado da entidade e não contêm dados de estado de funcionamento avançados. Se uma entidade não estiver em bom estado de funcionamento, pode acompanhar as consultas de estado de funcionamento para obter todas as informações de estado de funcionamento, incluindo eventos, estados de saúde subordinados e avaliações em mau estado de funcionamento.

Se as consultas gerais devolverem um estado de funcionamento desconhecido para uma entidade, é possível que o arquivo de estado de funcionamento não tenha dados completos sobre a entidade. Também é possível que uma subconsulta para o arquivo de estado de funcionamento não tenha sido bem-sucedida (por exemplo, ocorreu um erro de comunicação ou o arquivo de estado de funcionamento foi limitado). Dar seguimento a uma consulta de estado de funcionamento da entidade. Se a subconsulta tiver encontrado erros transitórios, como problemas de rede, esta consulta de seguimento poderá ter êxito. Também pode fornecer-lhe mais detalhes do arquivo de estado de funcionamento sobre o motivo pelo qual a entidade não está exposta.

As consultas que contêm HealthState para entidades são:

Nota

Algumas das consultas devolvem resultados paginados. A devolução destas consultas é uma lista derivada de PagedList<T>. Se os resultados não se ajustarem a uma mensagem, só é devolvida uma página e um ContinuationToken que controla onde a enumeração parou. Continue a chamar a mesma consulta e transmita o token de continuação da consulta anterior para obter os resultados seguintes.

Exemplos

O código seguinte obtém as aplicações em mau estado de funcionamento no cluster:

var applications = fabricClient.QueryManager.GetApplicationListAsync().Result.Where(
  app => app.HealthState == HealthState.Error);

O cmdlet seguinte obtém os detalhes da aplicação para a aplicação fabric:/WordCount. Repare que o estado de funcionamento está em aviso.

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 seguinte obtém os serviços com um estado de funcionamento 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 clusters e aplicações

Durante uma atualização monitorizada do cluster e da aplicação, o Service Fabric verifica o estado de funcionamento para garantir que tudo permanece em bom estado de funcionamento. Se uma entidade estiver em mau estado de funcionamento, conforme avaliado através de políticas de estado de funcionamento configuradas, a atualização aplica políticas específicas de atualização para determinar a ação seguinte. A atualização pode ser colocada em pausa para permitir a interação do utilizador (como corrigir condições de erro ou alterar políticas) ou pode reverter automaticamente para a versão boa anterior.

Durante uma atualização do cluster , pode obter o estado de atualização do cluster. O estado de atualização inclui avaliações em mau estado de funcionamento, que apontam para o mau estado de funcionamento do cluster. Se a atualização for revertida devido a problemas de estado de funcionamento, o estado de atualização memoriza os últimos motivos de mau estado de funcionamento. Estas informações podem ajudar os administradores a investigar o que correu mal após a atualização ser revertida ou parada.

Da mesma forma, durante uma atualização da aplicação , todas as avaliações em mau estado de funcionamento estão contidas no estado de atualização da aplicação.

O seguinte mostra o estado de atualização da aplicação para uma aplicação de recursos de infraestrutura modificados:/WordCount. Um cão de guarda relatou um erro numa das réplicas. A atualização está a ser revertida porque as verificações de estado de funcionamento 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 da aplicação do Service Fabric.

Utilizar avaliações de estado de funcionamento para resolver problemas

Sempre que existir um problema com o cluster ou uma aplicação, observe o estado de funcionamento do cluster ou da aplicação para identificar o que está errado. As avaliações em mau estado de funcionamento fornecem detalhes sobre o que acionou o estado de funcionamento atual. Se for necessário, pode desagregar entidades subordinadas em mau estado de funcionamento para identificar a causa.

Por exemplo, considere uma aplicação em mau estado de funcionamento porque existe um relatório de erros numa das respetivas réplicas. O seguinte cmdlet do PowerShell mostra as avaliações em mau estado de funcionamento:

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

Pode ver 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 em mau estado de funcionamento mostram o primeiro motivo pelo qual a entidade é avaliada para o estado de funcionamento atual. Podem existir vários outros eventos que acionam este estado, mas não se refletem nas avaliações. Para obter mais informações, desagregar as entidades de estado de funcionamento para descobrir todos os relatórios em mau estado de funcionamento no cluster.

Passos seguintes

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

Adicionar relatórios de estado de funcionamento personalizados do Service Fabric

Como comunicar e verificar o estado de funcionamento do serviço

Monitorizar e diagnosticar os serviços localmente

Atualização da aplicação do Service Fabric