Rapportera och kontrollera hälsan hos tjänster
När dina tjänster stöter på problem beror din förmåga att svara på och åtgärda incidenter och avbrott på grund av din förmåga att snabbt identifiera problemen. Om du rapporterar problem och fel till Azure Service Fabric Health Manager från din tjänstkod kan du använda standardverktyg för hälsoövervakning som Service Fabric tillhandahåller för att kontrollera hälsostatusen.
Det finns tre sätt att rapportera hälsotillstånd från tjänsten:
- Använd Partition- eller CodePackageActivationContext-objekt .
Du kan använda objektenPartition
ochCodePackageActivationContext
för att rapportera hälsotillståndet för element som ingår i den aktuella kontexten. Kod som körs som en del av en replik kan till exempel endast rapportera hälsa på repliken, partitionen som den tillhör och det program som den är en del av. - Använd
FabricClient
.
Du kan användaFabricClient
för att rapportera hälsotillstånd från tjänstkoden om klustret inte är säkert eller om tjänsten körs med administratörsbehörighet. De flesta verkliga scenarier använder inte oskyddade kluster eller ger administratörsprivilegier. MedFabricClient
kan du rapportera hälsotillstånd för alla entiteter som ingår i klustret. Helst bör dock tjänstkoden bara skicka rapporter som är relaterade till sin egen hälsa. - Använd REST-API:erna i kluster-, program-, distribuerade program-, tjänst-, tjänstpaket-, partitions-, replik- eller nodnivåer. Detta kan användas för att rapportera hälsotillstånd inifrån en container.
Den här artikeln beskriver ett exempel som rapporterar hälsotillstånd från tjänstkoden. Exemplet visar också hur de verktyg som tillhandahålls av Service Fabric kan användas för att kontrollera hälsostatusen. Den här artikeln är avsedd att vara en snabb introduktion till funktionerna för hälsoövervakning i Service Fabric. Mer detaljerad information finns i serien med djupgående artiklar om hälsotillstånd som börjar med länken i slutet av den här artikeln.
Förutsättningar
Du måste ha följande installerat:
- Visual Studio 2015 eller Visual Studio 2019
- Service Fabric SDK
Så här skapar du ett lokalt säkert dev-kluster
- Öppna PowerShell med administratörsbehörighet och kör följande kommandon:
Så här distribuerar du ett program och kontrollerar dess hälsotillstånd
Öppna Visual Studio som administratör.
Skapa ett projekt med hjälp av mallen Tillståndskänslig tjänst .
Tryck på F5 för att köra programmet i felsökningsläge. Programmet distribueras till det lokala klustret.
När programmet har körts högerklickar du på ikonen Lokal klusterhanterare i meddelandefältet och väljer Hantera lokalt kluster på snabbmenyn för att öppna Service Fabric Explorer.
Programmets hälsotillstånd ska visas som i den här bilden. För närvarande bör programmet vara felfritt utan fel.
Du kan också kontrollera hälsotillståndet med hjälp av PowerShell. Du kan använda
Get-ServiceFabricApplicationHealth
för att kontrollera ett programs hälsa och du kan användaGet-ServiceFabricServiceHealth
för att kontrollera en tjänsts hälsa. Hälsorapporten för samma program i PowerShell finns i den här avbildningen.
Så här lägger du till anpassade hälsohändelser i tjänstkoden
Service Fabric-projektmallarna i Visual Studio innehåller exempelkod. Följande steg visar hur du kan rapportera anpassade hälsohändelser från din tjänstkod. Sådana rapporter visas automatiskt i standardverktygen för hälsoövervakning som Service Fabric tillhandahåller, till exempel Service Fabric Explorer, Azure-portalens hälsovy och PowerShell.
Öppna programmet som du skapade tidigare i Visual Studio eller skapa ett nytt program med hjälp av Visual Studio-mallen Stateful Service .
Öppna filen Stateful1.cs och leta reda på anropet
myDictionary.TryGetValueAsync
RunAsync
i -metoden. Du kan se att den här metoden returnerar enresult
som innehåller räknarens aktuella värde eftersom nyckellogik i det här programmet är att hålla ett antal igång. Om det här programmet var ett verkligt program, och om bristen på resultat utgjorde ett fel, skulle du vilja flagga händelsen.Om du vill rapportera en hälsohändelse när bristen på resultat representerar ett fel lägger du till följande steg.
a.
System.Fabric.Health
Lägg till namnområdet i filen Stateful1.cs.using System.Fabric.Health;
b. Lägg till följande kod efter anropet
myDictionary.TryGetValueAsync
if (!result.HasValue) { HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error); this.Partition.ReportReplicaHealth(healthInformation); }
Vi rapporterar replikhälsa eftersom den rapporteras från en tillståndskänslig tjänst. Parametern
HealthInformation
lagrar information om det hälsoproblem som rapporteras.Om du har skapat en tillståndslös tjänst använder du följande kod
if (!result.HasValue) { HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error); this.Partition.ReportInstanceHealth(healthInformation); }
Om din tjänst körs med administratörsbehörighet eller om klustret inte är säkert kan du även använda
FabricClient
för att rapportera hälsotillstånd som visas i följande steg.a. Skapa instansen
FabricClient
efter deklarationenvar myDictionary
.var fabricClient = new FabricClient(new FabricClientSettings() { HealthReportSendInterval = TimeSpan.FromSeconds(0) });
b. Lägg till följande kod efter anropet
myDictionary.TryGetValueAsync
.if (!result.HasValue) { var replicaHealthReport = new StatefulServiceReplicaHealthReport( this.Context.PartitionId, this.Context.ReplicaId, new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error)); fabricClient.HealthManager.ReportHealth(replicaHealthReport); }
Nu ska vi simulera det här felet och se det visas i verktygen för hälsoövervakning. Om du vill simulera felet kommenterar du ut den första raden i hälsorapporteringskoden som du lade till tidigare. När du har kommenterat ut den första raden ser koden ut som i följande exempel.
//if(!result.HasValue) { HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error); this.Partition.ReportReplicaHealth(healthInformation); }
Den här koden utlöser hälsorapporten varje gång
RunAsync
den körs. När du har slutfört ändringen trycker du på F5 för att köra programmet.När programmet har körts öppnar du Service Fabric Explorer för att kontrollera programmets hälsotillstånd. Den här gången visar Service Fabric Explorer att programmet är felfritt. Programmet visas som felaktigt eftersom felet som rapporterades från koden som vi lade till tidigare.
Om du väljer den primära repliken i trädvyn i Service Fabric Explorer ser du också att hälsotillståndet indikerar ett fel. Service Fabric Explorer visar även hälsorapportinformationen som lades till i parametern
HealthInformation
i koden. Du kan se samma hälsorapporter i PowerShell och Azure-portalen.
Den här rapporten finns kvar i hälsohanteraren tills den ersätts av en annan rapport eller tills den här repliken tas bort. Eftersom vi inte har angett TimeToLive
för den här hälsorapporten i HealthInformation
objektet upphör rapporten aldrig att gälla.
Vi rekommenderar att hälsotillståndet rapporteras på den mest detaljerade nivån, vilket i det här fallet är repliken. Du kan också rapportera hälsa på Partition
.
HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
this.Partition.ReportPartitionHealth(healthInformation);
Om du vill rapportera hälsotillståndet för Application
, DeployedApplication
och DeployedServicePackage
, använder du CodePackageActivationContext
.
HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
var activationContext = FabricRuntime.GetActivationContext();
activationContext.ReportApplicationHealth(healthInformation);