Sdílet prostřednictvím


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ů a CodePackageActivationContext objektů můžete Partition 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ůžete FabricClient 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í FabricClientfunkce 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:

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

    Otevření Service Fabric Exploreru 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 pořádku v Service Fabric Exploreru

  6. Stav můžete zkontrolovat také pomocí PowerShellu. Můžete použít Get-ServiceFabricApplicationHealth ke kontrole stavu aplikace a můžete ji použít Get-ServiceFabricServiceHealth ke kontrole stavu služby. Sestava stavu pro stejnou aplikaci v PowerShellu je na tomto obrázku.

    Aplikace v pořádku v PowerShellu

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.

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

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

  3. 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);
    }
    
  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é použít FabricClient k hlášení stavu, 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 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. 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.

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

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

    Stav repliky v Service Fabric Exploreru

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

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

Další kroky