Share via


Servicestatus rapporteren en controleren

Wanneer uw services problemen ondervinden, is uw mogelijkheid om te reageren op incidenten en storingen, afhankelijk van uw vermogen om de problemen snel te detecteren. Als u problemen en fouten rapporteert aan de Azure Service Fabric-statusbeheerder vanuit uw servicecode, kunt u standaardhulpprogramma's voor statuscontrole gebruiken die Service Fabric biedt om de status te controleren.

Er zijn drie manieren waarop u de status van de service kunt rapporteren:

  • Gebruik Partition- of CodePackageActivationContext-objecten .
    U kunt de Partition status en CodePackageActivationContext objecten gebruiken om de status van elementen te rapporteren die deel uitmaken van de huidige context. Code die als onderdeel van een replica wordt uitgevoerd, kan bijvoorbeeld alleen de status rapporteren op die replica, de partitie waartoe deze behoort en de toepassing waarvan deze deel uitmaakt.
  • Gebruik FabricClient.
    U kunt de FabricClient status van de servicecode rapporteren als het cluster niet beveiligd is of als de service wordt uitgevoerd met beheerdersbevoegdheden. De meeste praktijkscenario's maken geen gebruik van onbeveiligde clusters of bieden beheerdersbevoegdheden. Met FabricClientkunt u de status rapporteren over elke entiteit die deel uitmaakt van het cluster. In het ideale geval mag servicecode echter alleen rapporten verzenden die zijn gerelateerd aan de eigen status.
  • Gebruik de REST API's op het cluster, de toepassing, de geïmplementeerde toepassing, de service, het servicepakket, de partitie, de replica of het knooppuntniveau. Dit kan worden gebruikt om de status vanuit een container te rapporteren.

In dit artikel wordt een voorbeeld beschreven dat de status van de servicecode rapporteert. In het voorbeeld ziet u ook hoe de hulpprogramma's van Service Fabric kunnen worden gebruikt om de status te controleren. Dit artikel is bedoeld als een korte inleiding tot de mogelijkheden voor statuscontrole van Service Fabric. Voor meer gedetailleerde informatie kunt u de reeks uitgebreide artikelen lezen over de status die beginnen met de koppeling aan het einde van dit artikel.

Vereisten

U moet het volgende hebben geïnstalleerd:

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

Een lokaal beveiligd dev-cluster maken

  • Open PowerShell met beheerdersbevoegdheden en voer de volgende opdrachten uit:

Opdrachten die laten zien hoe u een beveiligd dev-cluster maakt

Een toepassing implementeren en de status ervan controleren

  1. Open Visual Studio als beheerder.

  2. Maak een project met behulp van de Stateful Service-sjabloon .

    Een Service Fabric-toepassing maken met Stateful Service

  3. Druk op F5 om de toepassing uit te voeren in de foutopsporingsmodus. De toepassing wordt geïmplementeerd in het lokale cluster.

  4. Nadat de toepassing is uitgevoerd, klikt u met de rechtermuisknop op het pictogram Lokaal clusterbeheer in het systeemvak en selecteert u Lokaal cluster beheren in het snelmenu om Service Fabric Explorer te openen.

    Service Fabric Explorer openen vanuit het systeemvak

  5. De toepassingsstatus moet worden weergegeven zoals in deze afbeelding. Op dit moment moet de toepassing in orde zijn zonder fouten.

    In orde toepassing in Service Fabric Explorer

  6. U kunt ook de status controleren met behulp van PowerShell. U kunt de Get-ServiceFabricApplicationHealth status van een toepassing controleren en u kunt deze gebruiken Get-ServiceFabricServiceHealth om de status van een service te controleren. Het statusrapport voor dezelfde toepassing in PowerShell bevindt zich in deze afbeelding.

    Toepassing in orde in PowerShell

Aangepaste statusevenementen toevoegen aan uw servicecode

De Service Fabric-projectsjablonen in Visual Studio bevatten voorbeeldcode. De volgende stappen laten zien hoe u aangepaste statusevenementen vanuit uw servicecode kunt rapporteren. Dergelijke rapporten worden automatisch weergegeven in de standaardhulpprogramma's voor statuscontrole die Service Fabric biedt, zoals Service Fabric Explorer, de statusweergave van Azure Portal en PowerShell.

  1. Open de toepassing die u eerder hebt gemaakt in Visual Studio opnieuw of maak een nieuwe toepassing met behulp van de Stateful Service Visual Studio-sjabloon.

  2. Open het Stateful1.cs-bestand en zoek de myDictionary.TryGetValueAsync aanroep in de RunAsync methode. U kunt zien dat deze methode een result waarde retourneert die de huidige waarde van de teller bevat, omdat de sleutellogica in deze toepassing is om het aantal actief te houden. Als deze toepassing een echte toepassing was en als het gebrek aan resultaat een fout vertegenwoordigde, zou u die gebeurtenis willen markeren.

  3. Als u een status gebeurtenis wilt rapporteren wanneer het gebrek aan resultaat een fout vertegenwoordigt, voegt u de volgende stappen toe.

    a. Voeg de System.Fabric.Health naamruimte toe aan het Stateful1.cs-bestand.

    using System.Fabric.Health;
    

    b. Voeg de volgende code toe na de myDictionary.TryGetValueAsync aanroep

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

    We rapporteren de status van replica's omdat deze wordt gerapporteerd vanuit een stateful service. De HealthInformation parameter slaat informatie op over het statusprobleem dat wordt gerapporteerd.

    Als u een staatloze service hebt gemaakt, gebruikt u de volgende code

    if (!result.HasValue)
    {
        HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
        this.Partition.ReportInstanceHealth(healthInformation);
    }
    
  4. Als uw service wordt uitgevoerd met beheerdersbevoegdheden of als het cluster niet beveiligd is, kunt u ook de FabricClient status rapporteren, zoals wordt weergegeven in de volgende stappen.

    a. Maak het FabricClient exemplaar na de var myDictionary declaratie.

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

    b. Voeg de volgende code toe na de myDictionary.TryGetValueAsync aanroep.

    if (!result.HasValue)
    {
       var replicaHealthReport = new StatefulServiceReplicaHealthReport(
            this.Context.PartitionId,
            this.Context.ReplicaId,
            new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error));
        fabricClient.HealthManager.ReportHealth(replicaHealthReport);
    }
    
  5. Laten we deze fout simuleren en zien dat deze wordt weergegeven in de hulpprogramma's voor statuscontrole. Als u de fout wilt simuleren, markeert u de eerste regel in de statusrapportagecode die u eerder hebt toegevoegd. Nadat u de eerste regel hebt uitgecommentarieert, ziet de code eruit als in het volgende voorbeeld.

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

    Met deze code wordt het statusrapport elke keer geactiveerd wanneer RunAsync deze wordt uitgevoerd. Nadat u de wijziging hebt aangebracht, drukt u op F5 om de toepassing uit te voeren.

  6. Nadat de toepassing is uitgevoerd, opent u Service Fabric Explorer om de status van de toepassing te controleren. Deze keer geeft Service Fabric Explorer aan dat de toepassing niet in orde is. De toepassing wordt als beschadigd weergegeven omdat de fout die is gerapporteerd uit de code die we eerder hebben toegevoegd.

    Beschadigde toepassing in Service Fabric Explorer

  7. Als u de primaire replica selecteert in de structuurweergave van Service Fabric Explorer, ziet u dat status ook een fout aangeeft. Service Fabric Explorer geeft ook de details van het statusrapport weer die zijn toegevoegd aan de HealthInformation parameter in de code. U kunt dezelfde statusrapporten zien in PowerShell en Azure Portal.

    Replicastatus in Service Fabric Explorer

Dit rapport blijft in health manager totdat het wordt vervangen door een ander rapport of totdat deze replica wordt verwijderd. Omdat dit statusrapport niet is ingesteld TimeToLive in het HealthInformation object, verloopt het rapport nooit.

We raden aan dat de status moet worden gerapporteerd op het meest gedetailleerde niveau, wat in dit geval de replica is. U kunt ook de status rapporteren.Partition

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

Als u de status wilt rapporteren over Application, DeployedApplicationen DeployedServicePackage, gebruikt CodePackageActivationContextu .

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

Volgende stappen