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 ésCodePackageActivationContext
objektumokkalPartition
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íthetFabricClient
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ávalFabricClient
a 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:
Alkalmazás üzembe helyezése és állapotának ellenőrzése
Nyissa meg a Visual Studiót rendszergazdaként.
Hozzon létre egy projektet az Állapotalapú szolgáltatás sablon használatával.
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.
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.
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.
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ó.
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.
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.
Nyissa meg a Stateful1.cs fájlt, és keresse meg a
myDictionary.TryGetValueAsync
hívást aRunAsync
metódusban. Láthatja, hogy ez a metódus egyresult
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.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ánif (!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); }
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
avar 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); }
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.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.
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.
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 CodePackageActivationContext
a következőt: Application
, DeployedApplication
és DeployedServicePackage
.
HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
var activationContext = FabricRuntime.GetActivationContext();
activationContext.ReportApplicationHealth(healthInformation);