Comunicar e verificar o estado de funcionamento dos serviços

Quando os seus serviços se deparam com problemas, a sua capacidade de responder e corrigir incidentes e indisponibilidades depende da capacidade de detetar os problemas rapidamente. Se comunicar problemas e falhas ao gestor de estado de funcionamento do Azure Service Fabric a partir do código de serviço, pode utilizar as ferramentas padrão de monitorização do estado de funcionamento fornecidas pelo Service Fabric para verificar o estado de funcionamento.

Existem três formas de comunicar o estado de funcionamento a partir do serviço:

  • Utilize objetos Partition ou CodePackageActivationContext .
    Pode utilizar os Partition objetos e CodePackageActivationContext para comunicar o estado de funcionamento dos elementos que fazem parte do contexto atual. Por exemplo, o código que é executado como parte de uma réplica só pode comunicar o estado de funcionamento nessa réplica, a partição à qual pertence e a aplicação da qual faz parte.
  • Utilize FabricClient.
    Pode utilizar FabricClient para comunicar o estado de funcionamento a partir do código de serviço se o cluster não for seguro ou se o serviço estiver em execução com privilégios de administrador. A maioria dos cenários do mundo real não utiliza clusters não garantidos nem fornece privilégios de administrador. Com FabricCliento , pode comunicar o estado de funcionamento em qualquer entidade que faça parte do cluster. No entanto, idealmente, o código de serviço só deve enviar relatórios relacionados com o seu próprio estado de funcionamento.
  • Utilize as APIs REST nos níveis de cluster, aplicação, aplicação, serviço, pacote de serviço, partição, réplica ou nó implementados. Isto pode ser utilizado para comunicar o estado de funcionamento a partir de um contentor.

Este artigo explica-lhe um exemplo que comunica o estado de funcionamento a partir do código de serviço. O exemplo também mostra como as ferramentas fornecidas pelo Service Fabric podem ser utilizadas para verificar o estado de funcionamento. Este artigo destina-se a ser uma introdução rápida às capacidades de monitorização do estado de funcionamento do Service Fabric. Para obter informações mais detalhadas, pode ler a série de artigos aprofundados sobre o estado de funcionamento que começam com a ligação no final deste artigo.

Pré-requisitos

Tem de ter o seguinte instalado:

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

Para criar um cluster de programador seguro local

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

Comandos que mostram como criar um cluster de programador seguro

Para implementar uma aplicação e verificar o respetivo estado de funcionamento

  1. Abra o Visual Studio como administrador.

  2. Crie um projeto com o modelo Serviço com Monitorização de Estado .

    Criar uma aplicação do Service Fabric com o Serviço com Estado

  3. Prima F5 para executar a aplicação no modo de depuração. A aplicação é implementada no cluster local.

  4. Depois de a aplicação estar em execução, clique com o botão direito do rato no ícone Gestor de Clusters Local na área de notificação e selecione Gerir Cluster Local no menu de atalho para abrir Service Fabric Explorer.

    Abrir Service Fabric Explorer a partir da área de notificação

  5. O estado de funcionamento da aplicação deve ser apresentado como nesta imagem. Neste momento, a aplicação deve estar em bom estado de funcionamento sem erros.

    Aplicação em bom estado de funcionamento no Service Fabric Explorer

  6. Também pode verificar o estado de funcionamento com o PowerShell. Pode utilizar Get-ServiceFabricApplicationHealth para verificar o estado de funcionamento de uma aplicação e pode utilizar Get-ServiceFabricServiceHealth para verificar o estado de funcionamento de um serviço. O relatório de estado de funcionamento da mesma aplicação no PowerShell está nesta imagem.

    Aplicação em bom estado de funcionamento no PowerShell

Para adicionar eventos de estado de funcionamento personalizados ao código de serviço

Os modelos de projeto do Service Fabric no Visual Studio contêm código de exemplo. Os passos seguintes mostram como pode comunicar eventos de estado de funcionamento personalizados a partir do código de serviço. Estes relatórios são apresentados automaticamente nas ferramentas padrão de monitorização do estado de funcionamento que o Service Fabric fornece, como Service Fabric Explorer, portal do Azure vista de estado de funcionamento e o PowerShell.

  1. Reabra a aplicação que criou anteriormente no Visual Studio ou crie uma nova aplicação com o modelo Stateful Service Visual Studio.

  2. Abra o ficheiro Stateful1.cs e localize a myDictionary.TryGetValueAsync chamada no RunAsync método . Pode ver que este método devolve um result que contém o valor atual do contador porque a lógica da chave nesta aplicação é manter uma contagem em execução. Se esta aplicação fosse uma aplicação real e se a falta de resultado representasse uma falha, seria útil sinalizar esse evento.

  3. Para comunicar um evento de estado de funcionamento quando a falta de resultados representa uma falha, adicione os seguintes passos.

    a. Adicione o System.Fabric.Health espaço de nomes ao ficheiro 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);
    }
    

    Reportamos o estado de funcionamento da réplica porque está a ser comunicado a partir de um serviço com monitorização de estado. O HealthInformation parâmetro armazena informações sobre o problema de estado de funcionamento que está a ser comunicado.

    Se tiver criado um serviço sem estado, utilize o seguinte código

    if (!result.HasValue)
    {
        HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
        this.Partition.ReportInstanceHealth(healthInformation);
    }
    
  4. Se o seu serviço estiver em execução com privilégios de administrador ou se o cluster não for seguro, também pode utilizar FabricClient para comunicar o estado de funcionamento, conforme mostrado nos passos seguintes.

    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 esta falha e vê-la aparecer nas ferramentas de monitorização do estado de funcionamento. Para simular a falha, comente a primeira linha no código do relatório de estado de funcionamento que adicionou anteriormente. Depois de comentar a primeira linha, o código terá o seguinte aspeto.

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

    Este código aciona o relatório de estado de funcionamento sempre RunAsync que é executado. Depois de fazer a alteração, prima F5 para executar a aplicação.

  6. Depois de a aplicação estar em execução, abra Service Fabric Explorer para verificar o estado de funcionamento da aplicação. Desta vez, Service Fabric Explorer mostra que a aplicação está em mau estado de funcionamento. A aplicação aparece como em mau estado de funcionamento porque o erro que foi comunicado a partir do código que adicionámos anteriormente.

    Aplicação em mau estado de funcionamento no Service Fabric Explorer

  7. Se selecionar a réplica primária na vista de árvore do Service Fabric Explorer, verá que o Estado de Funcionamento também indica um erro. Service Fabric Explorer também apresenta os detalhes do relatório de estado de funcionamento que foram adicionados ao HealthInformation parâmetro no código. Pode ver os mesmos relatórios de estado de funcionamento no PowerShell e no portal do Azure.

    Estado de funcionamento da réplica no Service Fabric Explorer

Este relatório permanece no gestor de estado de funcionamento até ser substituído por outro relatório ou até que esta réplica seja eliminada. Como não definimos TimeToLive para este relatório de estado de funcionamento no HealthInformation objeto, o relatório nunca expira.

Recomendamos que o estado de funcionamento seja comunicado ao nível mais granular, que neste caso é a réplica. Também pode comunicar o estado de funcionamento em Partition.

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

Para comunicar o estado de funcionamento em Application, DeployedApplicatione DeployedServicePackage, utilize CodePackageActivationContext.

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

Passos seguintes