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 a CodePackageActivationContext můžete použít Partition 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říkazu FabricClient 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í FabricClientmůž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:

Příkazy, které ukazují, jak vytvořit zabezpečený vývojový cluster

Nasazení aplikace a kontrola jejího stavu

  1. Otevřete Visual Studio jako správce.

  2. Vytvořte projekt pomocí šablony Stavová služba .

    Vytvoření aplikace Service Fabric se stavovou službou

  3. Stisknutím klávesy F5 spusťte aplikaci v režimu ladění. Aplikace se nasadí do místního clusteru.

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

    Otevření Service Fabric Explorer z oznamovací oblasti

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

    Aplikace v Service Fabric Explorer v pořádku

  6. Stav můžete zkontrolovat také pomocí PowerShellu. Pomocí nástroje Get-ServiceFabricApplicationHealth můžete zkontrolovat stav aplikace a pomocí nástroje Get-ServiceFabricServiceHealth můžete zkontrolovat stav služby. Na tomto obrázku je sestava o stavu stejné aplikace v PowerShellu.

    Aplikace v PowerShellu, která je v pořádku

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.

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

  2. Otevřete soubor Stateful1.cs a vyhledejte myDictionary.TryGetValueAsync volání v RunAsync 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.

  3. 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);
    }
    
  4. 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 po var 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);
    }
    
  5. 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 .

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

    Aplikace, která není v pořádku, ve Service Fabric Explorer

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

    Stav repliky v Service Fabric Explorer

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, DeployedApplicationa DeployedServicePackage, použijte CodePackageActivationContext.

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

Další kroky