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 vyřešit je závisí na vaší schopnosti rychle detekovat problémy. 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.
Ze služby můžete hlásit stav třemi způsoby:
- Použijte objekty Partition nebo CodePackageActivationContext .
Pomocí objektů aCodePackageActivationContext
objektů můžetePartition
hlásit stav prvků, které jsou součástí aktuálního kontextu. Například kód, který běží jako součást repliky, může hlásit stav pouze na této replice, oddíl, do kterého patří, a aplikaci, ve které je součástí. - Použijte
FabricClient
.
Pokud cluster není zabezpečený nebo pokud je služba spuštěná s oprávněními správce, můžeteFabricClient
hlásit stav z kódu služby. Většina scénářů z reálného světa nepoužívá nezabezpečené clustery ani neposkytuje oprávnění správce. PomocíFabricClient
funkce 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 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. Dá se 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 lze nástroje poskytované Service Fabric použít ke kontrole stavu. Tento článek je určený jako rychlý úvod do funkcí monitorování stavu 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 nainstalovanou 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 myši na ikonu Správce místního clusteru v oznamovací oblasti a v místní nabídce vyberte Spravovat místní cluster a otevřete 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. Můžete použít
Get-ServiceFabricApplicationHealth
ke kontrole stavu aplikace a můžete ji použítGet-ServiceFabricServiceHealth
ke kontrole stavu služby. Sestava stavu pro stejnou aplikaci v PowerShellu je na tomto obrázku.
Přidání vlastních událostí stavu do kódu služby
Šablony projektů Service Fabric v sadě Visual Studio obsahují vzorový kód. Následující kroky ukazují, jak můžete nahlásit vlastní události stavu z kódu služby. Tyto sestavy se automaticky zobrazují ve standardních nástrojích pro monitorování stavu, které Service Fabric poskytuje, jako je Service Fabric Explorer, zobrazení stavu webu Azure Portal a PowerShell.
Znovu otevřete aplikaci, kterou jste vytvořili dříve v sadě Visual Studio, nebo vytvořte novou aplikaci pomocí šablony Visual Studio Stavová služba .
Otevřete soubor Stateful1.cs a vyhledejte
myDictionary.TryGetValueAsync
volání vRunAsync
metodě. Můžete vidět, že tato metoda vracíresult
hodnotu, která obsahuje aktuální hodnotu čítače, protože logika klíče v této aplikaci spočívá v zachování počtu spuštěných. Pokud byla tato aplikace skutečnou aplikací a pokud nedostatek výsledku představoval selhání, měli byste tuto událost označit příznakem.Pokud chcete nahlásit událost stavu, když nedostatek výsledku představuje selhání, 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); }
Hlásíme stav repliky, 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é použít
FabricClient
k hlášení stavu, 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 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. Service Fabric Explorer tentokrát ukazuje, že aplikace není v pořádku. Aplikace se zobrazuje jako v pořádku, protože chyba hlášená z kódu, který jsme přidali dříve.
Pokud ve stromovém zobrazení Service Fabric Exploreru vyberete primární repliku, uvidíte, že stav také značí chybu. Service Fabric Explorer také zobrazí podrobnosti sestavy stavu, které byly přidány do
HealthInformation
parametru v kódu. Stejné sestavy stavu můžete zobrazit v PowerShellu a na webu Azure Portal.
Tato sestava zůstane ve správci stavu, dokud ji nenahradí jiná sestava nebo dokud se tato replika nesmazat. Protože jsme pro tuto sestavu stavu v objektu HealthInformation
nenastaviliTimeToLive
, sestava nikdy nevyprší.
Doporučujeme, aby se stav hlásil na nejpodrobnější úrovni, což je v tomto případě replika. Můžete také hlásit stav Partition
.
HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
this.Partition.ReportPartitionHealth(healthInformation);
Chcete-li oznamovat stav Application
, DeployedApplication
a DeployedServicePackage
, použít CodePackageActivationContext
.
HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
var activationContext = FabricRuntime.GetActivationContext();
activationContext.ReportApplicationHealth(healthInformation);