Hlášení a kontrola stavu služeb
Když vaše služby narazí na problémy, vaše schopnost reagovat na incidenty a výpadky a opravit je závisí na vaší schopnosti problémy rychle detekovat. Pokud nahlásíte problémy a selhání správce stavu Azure Service Fabric z kódu služby, můžete ke kontrole stavu použít standardní nástroje pro monitorování stavu, které Service Fabric poskytuje.
Existují tři způsoby, jak můžete hlásit stav ze služby:
- Použijte objekty Partition nebo CodePackageActivationContext .
Objekty aCodePackageActivationContext
můžete použítPartition
k hlášení stavu prvků, které jsou součástí aktuálního kontextu. Například kód, který se spouští jako součást repliky, může hlásit stav pouze této repliky, oddílu, do kterého patří, a aplikaci, do které je součástí. - Použijte
FabricClient
.
Pomocí příkazuFabricClient
můžete hlásit stav z kódu služby, pokud cluster není zabezpečený nebo pokud je služba spuštěná s oprávněními správce. Většina reálných scénářů nepoužívá nezabezpečené clustery ani neposkytuje oprávnění správce. PomocíFabricClient
můžete hlásit stav libovolné entity, která je součástí clusteru. V ideálním případě by ale kód služby měl odesílat pouze sestavy, které souvisejí s jeho vlastním stavem. - Rozhraní REST API použijte na úrovni clusteru, aplikace, nasazené aplikace, služby, balíčku služby, oddílu, repliky nebo uzlu. To se dá použít k hlášení stavu z kontejneru.
Tento článek vás provede příkladem, který hlásí stav z kódu služby. Příklad také ukazuje, jak se dají ke kontrole stavu použít nástroje poskytované Service Fabric. Tento článek má sloužit jako rychlý úvod do funkcí monitorování stavu služby Service Fabric. Podrobnější informace najdete v sérii podrobných článků o stavu, které začínají odkazem na konci tohoto článku.
Požadavky
Musíte mít nainstalované následující:
- Visual Studio 2015 nebo Visual Studio 2019
- Service Fabric SDK
Vytvoření místního zabezpečeného vývojového clusteru
- Otevřete PowerShell s oprávněními správce a spusťte následující příkazy:
Nasazení aplikace a kontrola jejího stavu
Otevřete Visual Studio jako správce.
Vytvořte projekt pomocí šablony Stavová služba .
Stisknutím klávesy F5 spusťte aplikaci v režimu ladění. Aplikace se nasadí do místního clusteru.
Po spuštění aplikace klikněte pravým tlačítkem na ikonu Správce místních clusterů v oznamovací oblasti a v místní nabídce vyberte Spravovat místní cluster. Otevře se Service Fabric Explorer.
Stav aplikace by se měl zobrazit jako na tomto obrázku. V tuto chvíli by aplikace měla být v pořádku bez chyb.
Stav můžete zkontrolovat také pomocí PowerShellu. Pomocí nástroje
Get-ServiceFabricApplicationHealth
můžete zkontrolovat stav aplikace a pomocí nástrojeGet-ServiceFabricServiceHealth
můžete zkontrolovat stav služby. Na tomto obrázku je sestava o stavu stejné aplikace v PowerShellu.
Přidání vlastních událostí stavu do kódu služby
Šablony projektů Service Fabric v sadě Visual Studio obsahují ukázkový kód. Následující kroky ukazují, jak můžete hlásit vlastní události stavu z kódu služby. Takové sestavy se automaticky zobrazí ve standardních nástrojích pro monitorování stavu, které service Fabric poskytuje, jako jsou Service Fabric Explorer, Azure Portal zobrazení stavu a PowerShell.
Znovu otevřete aplikaci, kterou jste vytvořili dříve v sadě Visual Studio, nebo vytvořte novou aplikaci pomocí šablony Sady Visual Studio Stavová služba .
Otevřete soubor Stateful1.cs a vyhledejte
myDictionary.TryGetValueAsync
volání vRunAsync
metodě . Vidíte, že tato metoda vracíresult
hodnotu , která obsahuje aktuální hodnotu čítače, protože logikou klíče v této aplikaci je udržovat počet spuštěných. Pokud by tato aplikace byla skutečnou aplikací a nedostatek výsledku představoval chybu, měli byste tuto událost označit příznakem.Pokud chcete nahlásit událost stavu, když chybějící výsledek představuje chybu, přidejte následující kroky.
a.
System.Fabric.Health
Přidejte obor názvů do souboru Stateful1.cs.using System.Fabric.Health;
b. Za volání přidejte následující kód.
myDictionary.TryGetValueAsync
if (!result.HasValue) { HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error); this.Partition.ReportReplicaHealth(healthInformation); }
Stav repliky hlásíme, protože se hlásí ze stavové služby. Parametr
HealthInformation
ukládá informace o hlášených potížích se stavem.Pokud jste vytvořili bezstavovou službu, použijte následující kód.
if (!result.HasValue) { HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error); this.Partition.ReportInstanceHealth(healthInformation); }
Pokud je vaše služba spuštěná s oprávněními správce nebo pokud cluster není zabezpečený, můžete také pomocí příkazu
FabricClient
nahlásit stav, jak je znázorněno v následujících krocích.a.
FabricClient
Vytvořte instanci povar myDictionary
deklaraci.var fabricClient = new FabricClient(new FabricClientSettings() { HealthReportSendInterval = TimeSpan.FromSeconds(0) });
b. Za volání přidejte následující kód
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); }
Pojďme si toto selhání simulovat a podívat se, jak se zobrazuje v nástrojích pro monitorování stavu. Pokud chcete simulovat selhání, zakomentujte první řádek v kódu pro generování sestav stavu, který jste přidali dříve. Po zakomentování prvního řádku bude kód vypadat jako v následujícím příkladu.
//if(!result.HasValue) { HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error); this.Partition.ReportReplicaHealth(healthInformation); }
Tento kód aktivuje sestavu stavu při
RunAsync
každém spuštění. Po provedení změny spusťte aplikaci stisknutím klávesy F5 .Po spuštění aplikace otevřete Service Fabric Explorer a zkontrolujte stav aplikace. Tentokrát Service Fabric Explorer ukazuje, že aplikace není v pořádku. Aplikace se zobrazuje jako v pořádku, protože došlo k chybě nahlášené z kódu, který jsme přidali dříve.
Pokud vyberete primární repliku ve stromovém zobrazení Service Fabric Explorer, uvidíte, že stav označuje také chybu. Service Fabric Explorer také zobrazí podrobnosti sestavy stavu, které byly přidány do parametru
HealthInformation
v kódu. Stejné sestavy stavu můžete zobrazit v PowerShellu a v Azure Portal.
Tato sestava zůstane ve správci stavů, dokud ji nenahradí jiná sestava nebo dokud se tato replika nesmaže. Vzhledem k tomu, že jsme pro tuto sestavu stavu v objektu HealthInformation
nenastaviliTimeToLive
, platnost sestavy nikdy nevyprší.
Doporučujeme hlásit stav na nejpodrobnější úrovni, což je v tomto případě replika. Můžete také nahlásit stav na Partition
.
HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
this.Partition.ReportPartitionHealth(healthInformation);
Pokud chcete nahlásit stav Application
, DeployedApplication
a DeployedServicePackage
, použijte CodePackageActivationContext
.
HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
var activationContext = FabricRuntime.GetActivationContext();
activationContext.ReportApplicationHealth(healthInformation);