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 vanuit uw servicecode problemen en fouten rapporteert aan de Azure Service Fabric Health Manager, kunt u de standaardhulpprogramma's voor statuscontrole van Service Fabric gebruiken 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 objecten en CodePackageActivationContext gebruiken om de status te rapporteren van elementen die deel uitmaken van de huidige context. Code die wordt uitgevoerd als onderdeel van een replica, kan bijvoorbeeld alleen de status rapporteren van die replica, de partitie waartoe deze behoort en de toepassing waarvan deze deel uitmaakt.
  • Gebruik FabricClient.
    U kunt gebruiken FabricClient om de status van de servicecode te 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 en bieden geen beheerdersbevoegdheden. Met FabricClientkunt u de status rapporteren voor elke entiteit die deel uitmaakt van het cluster. In het ideale geval moet de servicecode echter alleen rapporten verzenden die betrekking hebben op de eigen status.
  • Gebruik de REST API's op het niveau van het cluster, de toepassing, de geïmplementeerde toepassing, de service, het servicepakket, de partitie, de replica of het knooppunt. Dit kan worden gebruikt om de status te rapporteren vanuit een container.

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 over status lezen 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 ontwikkelcluster maken

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

Opdrachten die laten zien hoe u een beveiligd ontwikkelcluster maakt

Een toepassing implementeren en de status ervan controleren

  1. Open Visual Studio als beheerder.

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

    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 wordt 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.

    Toepassing in Service Fabric Explorer in orde

  6. U kunt de status ook controleren met behulp van PowerShell. U kunt gebruiken Get-ServiceFabricApplicationHealth om de status van een toepassing te controleren en u kunt 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 statusgebeurtenissen toevoegen aan uw servicecode

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

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

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

  3. Voeg de volgende stappen toe als u een statusgebeurtenis wilt rapporteren wanneer het ontbreken van resultaat een fout aangeeft.

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

    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 de replica 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 gebruiken FabricClient om de status te 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 deze zien verschijnen 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 gemarkeerd, ziet de code eruit zoals 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 telkens geactiveerd wanneer RunAsync het wordt uitgevoerd. Nadat u de wijziging hebt aangebracht, drukt u op F5 om de toepassing uit te voeren.

  6. Nadat de toepassing wordt 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 weergegeven als beschadigd vanwege de fout die is gerapporteerd op basis van 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 de Azure Portal.

    Replicastatus in Service Fabric Explorer

Dit rapport blijft in statusbeheer totdat het wordt vervangen door een ander rapport of totdat deze replica wordt verwijderd. Omdat we dit statusrapport niet hebben ingesteld TimeToLive in het HealthInformation -object, verloopt het rapport nooit.

We raden u aan om de status te rapporteren op het meest gedetailleerde niveau, in dit geval de replica. U kunt ook de status rapporteren op 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