Creare report e verificare l'integrità dei serviziReport and check service health

Quando si verificano problemi nei servizi, la possibilità di rispondere e correggere interruzioni ed eventi imprevisti dipende dalla capacità di rilevare i problemi in tempi rapidi.When your services encounter problems, your ability to respond to and fix incidents and outages depends on your ability to detect the issues quickly. Se si segnalano problemi ed errori allo strumento di gestione dell'integrità di Azure Service Fabric dal codice del servizio, è possibile usare gli strumenti standard di monitoraggio dell'integrità forniti da Service Fabric per verificare lo stato di integrità.If you report problems and failures to the Azure Service Fabric health manager from your service code, you can use standard health monitoring tools that Service Fabric provides to check the health status.

È possibile segnalare lo stato di integrità dal servizio in tre modi:There are three ways that you can report health from the service:

  • Usare gli oggetti Partition o CodePackageActivationContext.Use Partition or CodePackageActivationContext objects.
    È possibile usare gli oggetti Partition e CodePackageActivationContext per segnalare lo stato di integrità degli elementi appartenenti al contesto corrente.You can use the Partition and CodePackageActivationContext objects to report the health of elements that are part of the current context. Il codice in esecuzione come parte di una replica può ad esempio segnalare lo stato di integrità solo sulla replica, sulla partizione a cui appartiene e sull'applicazione di cui fa parte.For example, code that runs as part of a replica can report health only on that replica, the partition that it belongs to, and the application that it is a part of.
  • Usare FabricClient.Use FabricClient.
    È possibile usare FabricClient per segnalare lo stato di integrità dal codice del servizio se il cluster non è sicuro o se il servizio è in esecuzione con privilegi di amministratore.You can use FabricClient to report health from the service code if the cluster is not secure or if the service is running with admin privileges. La maggior parte degli scenari reali non usa cluster non protetti oppure fornisce privilegi di amministratore.Most real-world scenarios do not use unsecured clusters, or provide admin privileges. Con FabricClientè possibile segnalare lo stato di integrità per qualsiasi entità appartenente al cluster.With FabricClient, you can report health on any entity that is a part of the cluster. Idealmente il codice del servizio dovrebbe tuttavia inviare solo report correlati alla propria integrità.Ideally, however, service code should only send reports that are related to its own health.
  • Usare le API REST a livello di cluster, applicazione, applicazione distribuita, servizio, pacchetto di servizio, replica o nodo.Use the REST APIs at the cluster, application, deployed application, service, service package, partition, replica, or node levels. In questo modo è possibile segnalare l'integrità direttamente da un contenitore.This can be used to report health from within a container.

Questo articolo illustra un esempio in cui viene segnalato lo stato di integrità dal codice del servizio.This article walks you through an example that reports health from the service code. L'esempio mostra anche come usare gli strumenti forniti da Service Fabric per verificare lo stato di integrità.The example also shows how the tools provided by Service Fabric can be used to check the health status. Questo articolo può essere usato come breve introduzione alle funzionalità di monitoraggio dell'integrità di Service Fabric.This article is intended to be a quick introduction to the health monitoring capabilities of Service Fabric. Per informazioni più dettagliate, è possibile leggere la serie di articoli di approfondimento sull'integrità accessibili dal collegamento presente alla fine di questo documento.For more detailed information, you can read the series of in-depth articles about health that start with the link at the end of this article.

PrerequisitiPrerequisites

È necessario che siano installati i seguenti elementi:You must have the following installed:

  • Visual Studio 2015 o Visual Studio 2017Visual Studio 2015 or Visual Studio 2017
  • Service Fabric SDKService Fabric SDK

Per creare un cluster di sviluppo sicuro localeTo create a local secure dev cluster

  • Aprire PowerShell con privilegi di amministratore ed eseguire i comandi seguenti:Open PowerShell with admin privileges, and run the following commands:

Comandi che mostrano come creare un cluster di sviluppo sicuro locale

Per distribuire un'applicazione e verificarne l'integritàTo deploy an application and check its health

  1. Aprire Visual Studio come amministratore.Open Visual Studio as an administrator.
  2. Creare un progetto usando il modello Servizio con stato .Create a project by using the Stateful Service template.

    Creare un'applicazione di Service Fabric con un servizio con stato

  3. Premere F5 per eseguire l'applicazione in modalità di debug.Press F5 to run the application in debug mode. L'applicazione verrà distribuita nel cluster locale.The application is deployed to the local cluster.
  4. Dopo aver eseguito l'applicazione, fare clic con il tasto destro del mouse sull'icona di Local Cluster Manager nell'area di notifica e aprire Service Fabric Explorer selezionando Gestisci cluster locale dal menu di scelta rapida.After the application is running, right-click the Local Cluster Manager icon in the notification area and select Manage Local Cluster from the shortcut menu to open Service Fabric Explorer.

    Apertura di Service Fabric Explorer dall'area di notifica

  5. L'integrità dell'applicazione sarà simile a quella visualizzata in questa immagine.The application health should be displayed as in this image. A questo punto, l'applicazione dovrebbe essere integra e senza errori.At this time, the application should be healthy with no errors.

    Applicazione integra in Service Fabric Explorer

  6. Per verificare l'integrità è possibile usare anche PowerShell.You can also check the health by using PowerShell. È possibile verificare l'integrità di un'applicazione usando Get-ServiceFabricApplicationHealth e l'integrità di un servizio usando Get-ServiceFabricServiceHealth.You can use Get-ServiceFabricApplicationHealth to check an application's health, and you can use Get-ServiceFabricServiceHealth to check a service's health. Il report sullo stato di integrità per la stessa applicazione in PowerShell è visualizzato in questa immagine.The health report for the same application in PowerShell is in this image.

    Applicazione integra in PowerShell

Per aggiungere eventi di integrità personalizzati al codice del servizioTo add custom health events to your service code

I modelli di progetto di Service Fabric in Visual Studio contengono codice di esempio.The Service Fabric project templates in Visual Studio contain sample code. La procedura seguente illustra come segnalare eventi di integrità personalizzati dal codice del servizio.The following steps show how you can report custom health events from your service code. Questi report vengono automaticamente visualizzati negli strumenti standard per il monitoraggio dell'integrità forniti da Service Fabric, come Service Fabric Explorer, la vista del portale di Azure relativa all'integrità e PowerShell.Such reports show up automatically in the standard tools for health monitoring that Service Fabric provides, such as Service Fabric Explorer, Azure portal health view, and PowerShell.

  1. Aprire nuovamente l'applicazione creata in precedenza in Visual Studio o crearne una nuova usando il modello di Visual Studio Servizio con stato .Reopen the application that you created previously in Visual Studio, or create a new application by using the Stateful Service Visual Studio template.
  2. Aprire il file Stateful1.cs e cercare la chiamata myDictionary.TryGetValueAsync nel metodo RunAsync.Open the Stateful1.cs file, and find the myDictionary.TryGetValueAsync call in the RunAsync method. Si noterà che questo metodo restituisce un result contenente il valore corrente del contatore, poiché la logica principale in questa applicazione è quella di mantenere un conteggio in esecuzione.You can see that this method returns a result that holds the current value of the counter because the key logic in this application is to keep a count running. Nel caso di un'applicazione reale con un errore dovuto alla mancanza di risultati, può essere opportuno contrassegnare l'evento.If this were a real application, and if the lack of result represented a failure, you would want to flag that event.
  3. Per segnalare un evento di integrità per un errore dovuto alla mancanza di risultati, aggiungere la procedura seguente.To report a health event when the lack of result represents a failure, add the following steps.

    a.a. Aggiungere lo spazio dei nomi System.Fabric.Health al file Stateful1.cs.Add the System.Fabric.Health namespace to the Stateful1.cs file.

    using System.Fabric.Health;
    

    b.b. Aggiungere il codice seguente dopo la chiamata di myDictionary.TryGetValueAsyncAdd the following code after the myDictionary.TryGetValueAsync call

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

    Viene segnalata l'integrità di una replica, perché la segnalazione viene eseguita da un servizio con stato.We report replica health because it's being reported from a stateful service. Il parametro HealthInformation archivia informazioni relative al problema di integrità segnalato.The HealthInformation parameter stores information about the health issue that's being reported.

    Se è stato creato un servizio senza stato, utilizzare il codice seguente.If you had created a stateless service, use the following code

    if (!result.HasValue)
    {
        HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
        this.Partition.ReportInstanceHealth(healthInformation);
    }
    
  4. Se il servizio è in esecuzione con privilegi di amministratore o se il cluster non è sicuro, è anche possibile usare FabricClient per segnalare lo stato di integrità, come illustrato nella procedura seguente.If your service is running with admin privileges or if the cluster is not secure, you can also use FabricClient to report health as shown in the following steps.

    a.a. Creare l'istanza di FabricClient dopo la dichiarazione var myDictionary.Create the FabricClient instance after the var myDictionary declaration.

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

    b.b. Aggiungere il codice seguente dopo la chiamata di myDictionary.TryGetValueAsync .Add the following code after the myDictionary.TryGetValueAsync call.

    if (!result.HasValue)
    {
       var replicaHealthReport = new StatefulServiceReplicaHealthReport(
            this.Context.PartitionId,
            this.Context.ReplicaId,
            new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error));
        fabricClient.HealthManager.ReportHealth(replicaHealthReport);
    }
    
  5. Simulare l'errore e osservare come venga visualizzato negli strumenti di monitoraggio dello stato.Let's simulate this failure and see it show up in the health monitoring tools. Per simulare l'errore, impostare la prima riga come commento nel codice del report di integrità aggiunto in precedenza.To simulate the failure, comment out the first line in the health reporting code that you added earlier. Al termine di questa operazione, il codice sarà simile all'esempio seguente.After you comment out the first line, the code will look like the following example.

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

    Questo codice genera il report di integrità ogni volta che si esegue RunAsync.This code fires the health report each time RunAsync executes. Dopo aver apportato la modifica, premere F5 per eseguire l'applicazione.After you make the change, press F5 to run the application.

  6. Dopo l'esecuzione dell'applicazione, aprire Service Fabric Explorer per verificare l'integrità dell'applicazione.After the application is running, open Service Fabric Explorer to check the health of the application. In questo caso, Service Fabric Explorer indica un problema di integrità dell'applicazione,This time, Service Fabric Explorer shows that the application is unhealthy. a causa dell'errore segnalato dal codice aggiunto in precedenza.This is because of the error that was reported from the code that we added previously.

    Applicazione non integra in Service Fabric Explorer

  7. Se si seleziona la replica primaria nella visualizzazione ad albero di Service Fabric Explorer, viene visualizzato anche in questo caso un errore dello stato di integrità .If you select the primary replica in the tree view of Service Fabric Explorer, you will see that Health State indicates an error, too. In Service Fabric Explorer vengono visualizzati anche i dettagli del report di integrità aggiunti al parametro HealthInformation nel codice.Service Fabric Explorer also displays the health report details that were added to the HealthInformation parameter in the code. È possibile visualizzare gli stessi report di integrità anche in PowerShell e nel portale di Azure.You can see the same health reports in PowerShell and the Azure portal.

    Integrità della replica in Service Fabric Explorer

Questo report resta in Health Manager finché non viene sostituito da un altro o finché la replica non viene eliminata.This report remains in the health manager until it is replaced by another report or until this replica is deleted. Poiché per questo report di integrità non è stato impostato un valore TimeToLive nell'oggetto HealthInformation, il report non avrà scadenza.Because we did not set TimeToLive for this health report in the HealthInformation object, the report never expires.

È consigliabile creare report sull'integrità al livello più dettagliato possibile, che in questo caso corrisponde alla replica.We recommend that health should be reported on the most granular level, which in this case is the replica. È anche possibile segnalare lo stato di integrità relativo all'oggetto Partition.You can also report health on Partition.

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

Per segnalare lo stato di integrità relativo a Application, DeployedApplication e DeployedServicePackage, usare CodePackageActivationContext.To report health on Application, DeployedApplication, and DeployedServicePackage, use CodePackageActivationContext.

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

Passaggi successiviNext steps