Partilhar via


Comunicar e verificar o estado de funcionamento dos serviços

Quando seus serviços encontram problemas, sua capacidade de responder e corrigir incidentes e interrupções depende de sua capacidade de detetar os problemas rapidamente. Se comunicar problemas e falhas ao gestor de estado de funcionamento do Azure Service Fabric a partir do seu código de serviço, pode utilizar as ferramentas de monitorização de estado de funcionamento padrão que o Service Fabric fornece para verificar o estado de funcionamento.

Há três maneiras de relatar a integridade do serviço:

  • Use objetos Partition ou CodePackageActivationContext .
    Você pode usar os Partition objetos e CodePackageActivationContext para relatar a integridade de elementos que fazem parte do contexto atual. Por exemplo, o código executado como parte de uma réplica pode relatar a integridade somente nessa réplica, na partição à qual pertence e no aplicativo do qual faz parte.
  • FabricClientUtilize.
    Você pode usar FabricClient para relatar a integridade do código de serviço se o cluster não for seguro ou se o serviço estiver sendo executado com privilégios de administrador. A maioria dos cenários do mundo real não usa clusters não seguros nem fornece privilégios de administrador. Com FabricCliento , você pode relatar a integridade de qualquer entidade que faça parte do cluster. Idealmente, no entanto, o código de serviço deve enviar apenas relatórios relacionados à sua própria saúde.
  • Use as APIs REST nos níveis de cluster, aplicativo, aplicativo implantado, serviço, pacote de serviço, partição, réplica ou nó. Isso pode ser usado para relatar a integridade de dentro de um contêiner.

Este artigo orienta você por um exemplo que relata a integridade do código de serviço. O exemplo também mostra como as ferramentas fornecidas pelo Service Fabric podem ser usadas para verificar o status de integridade. Este artigo destina-se a ser uma introdução rápida aos recursos de monitoramento de integridade do Service Fabric. Para obter informações mais detalhadas, você pode ler a série de artigos detalhados sobre saúde que começam com o link no final deste artigo.

Pré-requisitos

Você deve ter o seguinte instalado:

  • Visual Studio 2015 ou Visual Studio 2019
  • Service Fabric SDK

Para criar um cluster de desenvolvimento seguro local

  • Abra o PowerShell com privilégios de administrador e execute os seguintes comandos:

Comandos que mostram como criar um cluster de desenvolvimento seguro

Para implantar um aplicativo e verificar sua integridade

  1. Abra o Visual Studio como administrador.

  2. Crie um projeto usando o modelo Stateful Service .

    Criar um aplicativo do Service Fabric com o Stateful Service

  3. Pressione F5 para executar o aplicativo no modo de depuração. O aplicativo é implantado no cluster local.

  4. Depois que o aplicativo estiver em execução, clique com o botão direito do mouse no ícone do Gerenciador de Cluster Local na área de notificação e selecione Gerenciar Cluster Local no menu de atalho para abrir o Service Fabric Explorer.

    Abra o Service Fabric Explorer na área de notificação

  5. A integridade do aplicativo deve ser exibida como nesta imagem. Neste momento, a aplicação deve estar saudável sem erros.

    Aplicativo íntegro no Service Fabric Explorer

  6. Você também pode verificar a integridade usando o PowerShell. Você pode usar Get-ServiceFabricApplicationHealth para verificar a integridade de um aplicativo e você pode usar Get-ServiceFabricServiceHealth para verificar a integridade de um serviço. O relatório de integridade para o mesmo aplicativo no PowerShell está nesta imagem.

    Aplicativo íntegro no PowerShell

Para adicionar eventos de integridade personalizados ao seu código de serviço

Os modelos de projeto do Service Fabric no Visual Studio contêm código de exemplo. As etapas a seguir mostram como você pode relatar eventos de integridade personalizados a partir do seu código de serviço. Esses relatórios aparecem automaticamente nas ferramentas padrão para monitoramento de integridade fornecidas pelo Service Fabric, como o Service Fabric Explorer, a exibição de integridade do portal do Azure e o PowerShell.

  1. Reabra o aplicativo que você criou anteriormente no Visual Studio, ou crie um novo aplicativo usando o modelo Stateful Service Visual Studio.

  2. Abra o arquivo Stateful1.cs e localize a myDictionary.TryGetValueAsync RunAsync chamada no método. Você pode ver que esse método retorna um result que contém o valor atual do contador porque a lógica de chave neste aplicativo é manter uma contagem em execução. Se este aplicativo fosse um aplicativo real, e se a falta de resultado representasse uma falha, você desejaria sinalizar esse evento.

  3. Para relatar um evento de integridade quando a falta de resultado representa uma falha, adicione as etapas a seguir.

    a. Adicione o System.Fabric.Health namespace ao arquivo Stateful1.cs.

    using System.Fabric.Health;
    

    b. Adicione o seguinte código após a myDictionary.TryGetValueAsync chamada

    if (!result.HasValue)
    {
        HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
        this.Partition.ReportReplicaHealth(healthInformation);
    }
    

    Relatamos a integridade da réplica porque ela está sendo relatada de um serviço com monitoração de estado. O HealthInformation parâmetro armazena informações sobre o problema de integridade que está sendo relatado.

    Se você criou um serviço sem monitoração de estado, use o seguinte código

    if (!result.HasValue)
    {
        HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
        this.Partition.ReportInstanceHealth(healthInformation);
    }
    
  4. Se o serviço estiver sendo executado com privilégios de administrador ou se o cluster não for seguro, você também poderá usar FabricClient para relatar a integridade, conforme mostrado nas etapas a seguir.

    a. Crie a FabricClient instância após a var myDictionary declaração.

    var fabricClient = new FabricClient(new FabricClientSettings() { HealthReportSendInterval = TimeSpan.FromSeconds(0) });
    

    b. Adicione o seguinte código após a myDictionary.TryGetValueAsync chamada.

    if (!result.HasValue)
    {
       var replicaHealthReport = new StatefulServiceReplicaHealthReport(
            this.Context.PartitionId,
            this.Context.ReplicaId,
            new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error));
        fabricClient.HealthManager.ReportHealth(replicaHealthReport);
    }
    
  5. Vamos simular essa falha e vê-la aparecer nas ferramentas de monitoramento de integridade. Para simular a falha, comente a primeira linha no código de relatório de integridade que você adicionou anteriormente. Depois de comentar a primeira linha, o código será semelhante ao exemplo a seguir.

    //if(!result.HasValue)
    {
        HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
        this.Partition.ReportReplicaHealth(healthInformation);
    }
    

    Esse código dispara o relatório de integridade sempre que RunAsync é executado. Depois de fazer a alteração, pressione F5 para executar o aplicativo.

  6. Depois que o aplicativo estiver em execução, abra o Service Fabric Explorer para verificar a integridade do aplicativo. Desta vez, o Service Fabric Explorer mostra que o aplicativo não está íntegro. O aplicativo mostra como não íntegro porque o erro que foi relatado a partir do código que adicionamos anteriormente.

    Aplicativo não íntegro no Service Fabric Explorer

  7. Se você selecionar a réplica primária na exibição em árvore do Service Fabric Explorer, verá que o Estado de Integridade também indica um erro. O Service Fabric Explorer também exibe os detalhes do relatório de integridade que foram adicionados ao HealthInformation parâmetro no código. Você pode ver os mesmos relatórios de integridade no PowerShell e no portal do Azure.

    Integridade da réplica no Service Fabric Explorer

Esse relatório permanece no gerente de integridade até ser substituído por outro relatório ou até que essa réplica seja excluída. Como não definimos TimeToLive este relatório de saúde no HealthInformation objeto, o relatório nunca expira.

Recomendamos que a integridade seja relatada no nível mais granular, que neste caso é a réplica. Também pode comunicar o estado de saúde em Partition.

HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
this.Partition.ReportPartitionHealth(healthInformation);

Para comunicar o estado de funcionamento em Application, , e DeployedServicePackage, utilize CodePackageActivationContextDeployedApplication.

HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
var activationContext = FabricRuntime.GetActivationContext();
activationContext.ReportApplicationHealth(healthInformation);

Próximos passos