Szolgáltatásállapot jelentése és ellenőrzése

Ha a szolgáltatások problémákba ütköznek, az incidensekre és kimaradásokra való reagálás és azok javítása attól függ, hogy képes-e gyorsan észlelni a problémákat. Ha problémákat és hibákat jelent az Azure Service Fabric állapotkezelőjének a szolgáltatáskódból, a Service Fabric által biztosított szabványos állapotfigyelő eszközökkel ellenőrizheti az állapotot.

A szolgáltatás állapotjelentésének három módja van:

  • Partíció - vagy CodePackageActivationContext-objektumokat használjon.
    Az és CodePackageActivationContext objektumokkal Partition az aktuális környezet részét képező elemek állapotát jelentheti. A replika részeként futó kód például csak az adott replikán, a hozzá tartozó partíción és az alkalmazáson jelentheti az állapotot.
  • Használja az FabricClient parancsot.
    Ha a fürt nem biztonságos, vagy ha a szolgáltatás rendszergazdai jogosultságokkal fut, a szolgáltatáskódból jelentést készíthet FabricClient az állapotról. A legtöbb valós forgatókönyv nem használ nem biztonságos fürtöket, és nem biztosít rendszergazdai jogosultságokat. A használatával FabricClienta fürt részét képező entitások állapotáról is jelentést készíthet. Ideális esetben azonban a szolgáltatáskódnak csak a saját állapotával kapcsolatos jelentéseket kell küldenie.
  • Használja a REST API-kat a fürt, az alkalmazás, az üzembe helyezett alkalmazás, a szolgáltatás, a szolgáltatáscsomag, a partíció, a replika vagy a csomópont szintjén. Ez egy tároló állapotának jelentésére használható.

Ez a cikk egy olyan példát mutat be, amely a szolgáltatáskódból jelenti az állapotot. A példa azt is bemutatja, hogy a Service Fabric által biztosított eszközök hogyan használhatók az állapot ellenőrzésére. Ez a cikk a Service Fabric állapotmonitorozási képességeinek gyors bemutatására szolgál. Részletesebb információkért olvassa el a cikk végén található hivatkozással kezdődő, az állapotról szóló részletes cikksorozatot.

Előfeltételek

Telepítve kell lennie a következőnek:

  • Visual Studio 2015 vagy Visual Studio 2019
  • Service Fabric SDK

Helyi biztonságos fejlesztői fürt létrehozása

  • Nyissa meg a PowerShellt rendszergazdai jogosultságokkal, és futtassa a következő parancsokat:

Biztonságos fejlesztői fürt létrehozását bemutató parancsok

Alkalmazás üzembe helyezése és állapotának ellenőrzése

  1. Nyissa meg a Visual Studiót rendszergazdaként.

  2. Hozzon létre egy projektet az Állapotalapú szolgáltatás sablon használatával.

    Service Fabric-alkalmazás létrehozása Állapotalapú szolgáltatással

  3. Nyomja le az F5 billentyűt az alkalmazás hibakeresési módban való futtatásához. Az alkalmazás a helyi fürtön van üzembe helyezve.

  4. Az alkalmazás futtatása után kattintson a jobb gombbal a Helyi fürtkezelő ikonra az értesítési területen, majd a helyi menüben válassza a Helyi fürt kezelése lehetőséget a Service Fabric Explorer megnyitásához.

    Service Fabric Explorer megnyitása az értesítési területről

  5. Az alkalmazás állapotát a képen látható módon kell megjeleníteni. Jelenleg az alkalmazásnak kifogástalan állapotúnak kell lennie hibák nélkül.

    Kifogástalan alkalmazás a Service Fabric Explorer

  6. Az állapotot a PowerShell használatával is ellenőrizheti. Get-ServiceFabricApplicationHealth Az alkalmazás állapotának ellenőrzésére, illetve a szolgáltatás állapotának ellenőrzésére is használhatóGet-ServiceFabricServiceHealth. A PowerShellben ugyanahhoz az alkalmazáshoz tartozó állapotjelentés ezen a képen található.

    Kifogástalan állapotú alkalmazás a PowerShellben

Egyéni állapotesemények hozzáadása a szolgáltatáskódhoz

A Visual Studio Service Fabric-projektsablonjai mintakódot tartalmaznak. Az alábbi lépések bemutatják, hogyan jelenthet egyéni állapoteseményeket a szolgáltatáskódból. Az ilyen jelentések automatikusan megjelennek a Service Fabric által biztosított általános állapotmonitorozási eszközökben, például Service Fabric Explorer, Azure Portal állapotnézetben és PowerShellben.

  1. Nyissa meg újra a Korábban a Visual Studióban létrehozott alkalmazást, vagy hozzon létre egy új alkalmazást a Stateful Service Visual Studio sablon használatával.

  2. Nyissa meg a Stateful1.cs fájlt, és keresse meg a myDictionary.TryGetValueAsync hívást a RunAsync metódusban. Láthatja, hogy ez a metódus egy result olyan értéket ad vissza, amely a számláló aktuális értékét tartalmazza, mivel az alkalmazás fő logikája a számláló futásának fenntartása. Ha ez az alkalmazás valódi alkalmazás volt, és ha az eredmény hiánya hibát jelentett, meg szeretné jelölni ezt az eseményt.

  3. Ha olyan állapoteseményt szeretne jelenteni, amikor az eredmény hiánya hibát jelez, adja hozzá az alábbi lépéseket.

    a. Adja hozzá a System.Fabric.Health névteret a Stateful1.cs fájlhoz.

    using System.Fabric.Health;
    

    b. Adja hozzá a következő kódot a myDictionary.TryGetValueAsync hívás után

    if (!result.HasValue)
    {
        HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
        this.Partition.ReportReplicaHealth(healthInformation);
    }
    

    Azért jelentjük a replika állapotát, mert egy állapotalapú szolgáltatásból jelenti. A HealthInformation paraméter a jelentett állapottal kapcsolatos információkat tárolja.

    Ha állapot nélküli szolgáltatást hozott létre, használja az alábbi kódot

    if (!result.HasValue)
    {
        HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
        this.Partition.ReportInstanceHealth(healthInformation);
    }
    
  4. Ha a szolgáltatás rendszergazdai jogosultságokkal fut, vagy ha a fürt nem biztonságos, az állapotjelentéshez is használhatja FabricClient az alábbi lépésekben látható módon.

    a. Hozza létre a példányt FabricClient a var myDictionary deklaráció után.

    var fabricClient = new FabricClient(new FabricClientSettings() { HealthReportSendInterval = TimeSpan.FromSeconds(0) });
    

    b. Adja hozzá a következő kódot a myDictionary.TryGetValueAsync hívás után.

    if (!result.HasValue)
    {
       var replicaHealthReport = new StatefulServiceReplicaHealthReport(
            this.Context.PartitionId,
            this.Context.ReplicaId,
            new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error));
        fabricClient.HealthManager.ReportHealth(replicaHealthReport);
    }
    
  5. Szimuláljuk ezt a hibát, és nézzük meg, hogy megjelenik-e az állapotmonitorozási eszközökben. A hiba szimulálásához megjegyzést fűzhet a korábban hozzáadott állapotjelentési kód első sorához. Miután megjegyzést fűzött az első sorhoz, a kód az alábbi példához hasonlóan fog kinézni.

    //if(!result.HasValue)
    {
        HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
        this.Partition.ReportReplicaHealth(healthInformation);
    }
    

    Ez a kód minden végrehajtáskor RunAsync aktiválja az állapotjelentést. A módosítás után nyomja le az F5 billentyűt az alkalmazás futtatásához.

  6. Az alkalmazás futtatása után nyissa meg a Service Fabric Explorer az alkalmazás állapotának ellenőrzéséhez. Ezúttal Service Fabric Explorer azt mutatja, hogy az alkalmazás nem kifogástalan állapotú. Az alkalmazás nem kifogástalan állapotúként jelenik meg, mert a korábban hozzáadott kódból jelentett hiba.

    Nem kifogástalan állapotú alkalmazás a Service Fabric Explorer

  7. Ha az elsődleges replikát választja ki a Service Fabric Explorer fanézetében, az állapot is hibát jelez. Service Fabric Explorer az állapotjelentés azon adatait is megjeleníti, amelyek a HealthInformation paraméterhez lettek hozzáadva a kódban. Ugyanazokat az állapotjelentéseket láthatja a PowerShellben és a Azure Portal.

    Replika állapota a Service Fabric Explorer

Ez a jelentés addig marad az állapotkezelőben, amíg egy másik jelentés nem cseréli le, vagy amíg a replika nem törlődik. Mivel az objektumban nem állítottuk be TimeToLive ezt az HealthInformation állapotjelentést, a jelentés soha nem jár le.

Javasoljuk, hogy az állapotot a legrészletesebb szinten kell jelenteni, amely ebben az esetben a replika. Az állapotot a webhelyen is jelentheti Partition.

HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
this.Partition.ReportPartitionHealth(healthInformation);

Az állapot jelentéséhez használja CodePackageActivationContexta következőt: Application, DeployedApplicationés DeployedServicePackage.

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

Következő lépések