Oktatóanyag: Service Fabric-fürt monitorozása az Azure-ban
A monitorozás és a diagnosztika kritikus fontosságú a számítási feladatok fejlesztéséhez, teszteléséhez és üzembe helyezéséhez bármely felhőkörnyezetben. Ez az oktatóanyag egy sorozat második része, amely bemutatja, hogyan monitorozhat és diagnosztizálhat Service Fabric-fürtöket események, teljesítményszámlálók és állapotjelentések használatával. További információkért olvassa el a fürtfigyelés és az infrastruktúra monitorozásának áttekintését.
Ebben az oktatóanyagban az alábbiakkal fog megismerkedni:
- Service Fabric-események megtekintése
- EventStore API-k lekérdezése fürteseményekhez
- Infrastruktúra monitorozása/perf számlálók gyűjtése
- Fürtállapot-jelentések megtekintése
Ebben az oktatóanyag-sorozatban az alábbiakkal ismerkedhet meg:
- Biztonságos Windows-fürt létrehozása az Azure-ban sablon használatával
- Fürt figyelése
- Fürt horizontális fel- és leskálázása
- Fürt futtatókörnyezetének frissítése
- Fürt törlése
Feljegyzés
Javasoljuk, hogy az Azure Az PowerShell modult használja az Azure-ral való interakcióhoz. Első lépésként tekintse meg az Azure PowerShell telepítését ismertető témakört. Az Az PowerShell-modulra történő migrálás részleteiről lásd: Az Azure PowerShell migrálása az AzureRM modulból az Az modulba.
Előfeltételek
Az oktatóanyag elkezdése előtt:
- Ha nem rendelkezik Azure-előfizetéssel, hozzon létre egy ingyenes fiókot
- Telepítse az Azure PowerShellt vagy az Azure CLI-t.
- Biztonságos Windows-fürt létrehozása
- Diagnosztikai gyűjtemény beállítása a fürthöz
- Az EventStore szolgáltatás engedélyezése a fürtben
- Az Azure Monitor naplóinak és a fürt Log Analytics-ügynökének konfigurálása
Service Fabric-események megtekintése Azure Monitor-naplókkal
Az Azure Monitor naplói a felhőben üzemeltetett alkalmazásokból és szolgáltatásokból származó telemetriát gyűjtik és elemzik, és elemzési eszközöket biztosítanak a rendelkezésre állásuk és teljesítményük maximalizálásához. Lekérdezéseket futtathat az Azure Monitor-naplókban, hogy elemzéseket nyerjen, és elhárítsa a fürtben zajló eseményeket.
A Service Fabric Analytics-megoldás eléréséhez nyissa meg az Azure Portalt , és válassza ki azt az erőforráscsoportot, amelyben létrehozta a Service Fabric Analytics-megoldást.
Válassza ki a ServiceFabric(mysfomsworkspace) erőforrást.
Az Áttekintésben gráf formájában láthatók a csempék az egyes engedélyezett megoldásokhoz, köztük a Service Fabrichez. Válassza ki a Service Fabric-gráfot a Service Fabric Analytics-megoldás folytatásához.
Az alábbi képen a Service Fabric Analytics-megoldás kezdőlapja látható. Ez a kezdőlap pillanatkép-nézetet biztosít a fürtben zajló eseményekről.
Ha a fürt létrehozásakor engedélyezte a diagnosztikát, láthatja a következő eseményeket:
- Service Fabric-fürtesemények
- Reliable Actors programozási modell eseményei
- Reliable Services programozási modell eseményei
Feljegyzés
A Service Fabric-események mellett részletesebb rendszeresemények is gyűjthetők a diagnosztikai bővítmény konfigurációjának frissítésével.
Service Fabric-események megtekintése, beleértve a csomópontokon végzett műveleteket
A Service Fabric Analytics lapon kattintson a fürtesemények gráfjára. Megjelennek az összes összegyűjtött rendszeresemény naplói. Referenciaként ezek az Azure Storage-fiók WADServiceFabricSystemEventsTable-jából származnak, és a következő megbízható szolgáltatások és szereplők eseményei is ezekből a táblákból származnak.
A lekérdezés a Kusto lekérdezési nyelvét használja, amelyet módosíthatja a keresett szöveg pontosításához. Ha például a fürt csomópontjain végrehajtott összes műveletet meg szeretné keresni, használja az alábbi lekérdezést. Az alább használt eseményazonosítók az operatív csatorna eseményhivatkozásában találhatók.
ServiceFabricOperationalEvent
| where EventId < 25627 and EventId > 25619
A Kusto lekérdezési nyelve hatékony. Íme néhány további hasznos lekérdezés.
Hozzon létre egy ServiceFabricEvent keresési táblát felhasználó által definiált függvényként, ha a lekérdezést serviceFabricEvent aliassal menti függvényként:
let ServiceFabricEvent = datatable(EventId: int, EventName: string)
[
...
18603, 'NodeUpOperational',
18604, 'NodeDownOperational',
...
];
ServiceFabricEvent
Az elmúlt órában rögzített működési események visszaadása:
ServiceFabricOperationalEvent
| where TimeGenerated > ago(1h)
| join kind=leftouter ServiceFabricEvent on EventId
| project EventId, EventName, TaskName, Computer, ApplicationName, EventMessage, TimeGenerated
| sort by TimeGenerated
Működési események visszaadása eventId == 18604 és EventName == 'NodeDownOperational':
ServiceFabricOperationalEvent
| where EventId == 18604
| project EventId, EventName = 'NodeDownOperational', TaskName, Computer, EventMessage, TimeGenerated
| sort by TimeGenerated
Működési események visszaadása EventId == 18604 és EventName == 'NodeUpOperational' értékekkel:
ServiceFabricOperationalEvent
| where EventId == 18603
| project EventId, EventName = 'NodeUpOperational', TaskName, Computer, EventMessage, TimeGenerated
| sort by TimeGenerated
Állapotjelentéseket ad vissza a HealthState == 3 (Hiba) értékével, és további tulajdonságokat nyer ki az EventMessage mezőből:
ServiceFabricOperationalEvent
| join kind=leftouter ServiceFabricEvent on EventId
| extend HealthStateId = extract(@"HealthState=(\S+) ", 1, EventMessage, typeof(int))
| where TaskName == 'HM' and HealthStateId == 3
| extend SourceId = extract(@"SourceId=(\S+) ", 1, EventMessage, typeof(string)),
Property = extract(@"Property=(\S+) ", 1, EventMessage, typeof(string)),
HealthState = case(HealthStateId == 0, 'Invalid', HealthStateId == 1, 'Ok', HealthStateId == 2, 'Warning', HealthStateId == 3, 'Error', 'Unknown'),
TTL = extract(@"TTL=(\S+) ", 1, EventMessage, typeof(string)),
SequenceNumber = extract(@"SequenceNumber=(\S+) ", 1, EventMessage, typeof(string)),
Description = extract(@"Description='([\S\s, ^']+)' ", 1, EventMessage, typeof(string)),
RemoveWhenExpired = extract(@"RemoveWhenExpired=(\S+) ", 1, EventMessage, typeof(bool)),
SourceUTCTimestamp = extract(@"SourceUTCTimestamp=(\S+)", 1, EventMessage, typeof(datetime)),
ApplicationName = extract(@"ApplicationName=(\S+) ", 1, EventMessage, typeof(string)),
ServiceManifest = extract(@"ServiceManifest=(\S+) ", 1, EventMessage, typeof(string)),
InstanceId = extract(@"InstanceId=(\S+) ", 1, EventMessage, typeof(string)),
ServicePackageActivationId = extract(@"ServicePackageActivationId=(\S+) ", 1, EventMessage, typeof(string)),
NodeName = extract(@"NodeName=(\S+) ", 1, EventMessage, typeof(string)),
Partition = extract(@"Partition=(\S+) ", 1, EventMessage, typeof(string)),
StatelessInstance = extract(@"StatelessInstance=(\S+) ", 1, EventMessage, typeof(string)),
StatefulReplica = extract(@"StatefulReplica=(\S+) ", 1, EventMessage, typeof(string))
Események idődiagramját adja vissza az EventId != 17523 azonosítóval:
ServiceFabricOperationalEvent
| join kind=leftouter ServiceFabricEvent on EventId
| where EventId != 17523
| summarize Count = count() by Timestamp = bin(TimeGenerated, 1h), strcat(tostring(EventId), " - ", case(EventName != "", EventName, "Unknown"))
| render timechart
A Service Fabric működési eseményeinek összesítése az adott szolgáltatással és csomóponttal:
ServiceFabricOperationalEvent
| where ApplicationName != "" and ServiceName != ""
| summarize AggregatedValue = count() by ApplicationName, ServiceName, Computer
A Service Fabric-események számának megjelenítése EventId/ EventName szerint egy erőforrás-alapú lekérdezés használatával:
app('PlunkoServiceFabricCluster').traces
| where customDimensions.ProviderName == 'Microsoft-ServiceFabric'
| extend EventId = toint(customDimensions.EventId), TaskName = tostring(customDimensions.TaskName)
| where EventId != 17523
| join kind=leftouter ServiceFabricEvent on EventId
| extend EventName = case(EventName != '', EventName, 'Undocumented')
| summarize ["Event Count"]= count() by bin(timestamp, 30m), EventName = strcat(tostring(EventId), " - ", EventName)
| render timechart
Service Fabric-alkalmazásesemények megtekintése
Megtekintheti a fürtön üzembe helyezett megbízható szolgáltatások és megbízható szereplők alkalmazásainak eseményeit. A Service Fabric Analytics lapon válassza ki az Alkalmazásesemények gráfot.
Futtassa a következő lekérdezést a megbízható szolgáltatási alkalmazások eseményeinek megtekintéséhez:
ServiceFabricReliableServiceEvent
| sort by TimeGenerated desc
A szolgáltatás runasync
indításakor és befejezésekor különböző események láthatók, amelyek általában az üzemelő példányokon és frissítéseken történnek.
A megbízható szolgáltatás eseményeit a ServiceName == "fabric:/Watchdog/WatchdogService" kifejezéssel is megtalálhatja:
ServiceFabricReliableServiceEvent
| where ServiceName == "fabric:/Watchdog/WatchdogService"
| project TimeGenerated, EventMessage
| order by TimeGenerated desc
A megbízható színészesemények hasonló módon tekinthetők meg:
ServiceFabricReliableActorEvent
| sort by TimeGenerated desc
Ha részletesebb eseményeket szeretne konfigurálni a megbízható szereplők számára, módosíthatja a scheduledTransferKeywordFilter
fürtsablon diagnosztikai bővítményének konfigurációjában. Ezeknek az értékeknek a részletei a megbízható aktoresemények referenciájában találhatók.
"EtwEventSourceProviderConfiguration": [
{
"provider": "Microsoft-ServiceFabric-Actors",
"scheduledTransferKeywordFilter": "1",
"scheduledTransferPeriod": "PT5M",
"DefaultEvents": {
"eventDestination": "ServiceFabricReliableActorEventTable"
}
},
Teljesítményszámlálók megtekintése Azure Monitor-naplókkal
A teljesítményszámlálók megtekintéséhez nyissa meg az Azure Portalt és azt az erőforráscsoportot, amelyben létrehozta a Service Fabric Analytics-megoldást.
Válassza ki a ServiceFabric(mysfomsworkspace) erőforrást, majd a Log Analytics-munkaterületet, majd a Speciális beállításokat.
Válassza az Adatok lehetőséget, majd válassza a Windows Teljesítményszámlálók lehetőséget. Az alapértelmezett számlálók listáját engedélyezheti, és beállíthatja a gyűjtemény időközét is. További teljesítményszámlálókat is hozzáadhat a gyűjtendő adatokhoz. A megfelelő formátumra ebben a cikkben hivatkozunk. Kattintson a Mentés gombra, majd az OK gombra.
Zárja be a Speciális beállítások panelt, és válassza a Munkaterület összegzése lehetőséget az Általános címsor alatt. Minden engedélyezett megoldáshoz tartozik egy grafikus csempe, köztük egy a Service Fabrichez. Válassza ki a Service Fabric-gráfot a Service Fabric Analytics-megoldás folytatásához.
Az operatív csatorna és a megbízható szolgáltatások eseményeihez grafikus csempék tartoznak. A kiválasztott számlálókhoz beáramló adatok grafikus ábrázolása a Csomópontmetrikák területen jelenik meg.
A további részletek megtekintéséhez válassza a Tárolómetrika gráfot. A teljesítményszámláló adatait a fürteseményekhez hasonlóan is lekérdezheti, és a Kusto lekérdezési nyelv használatával szűrheti a csomópontokat, a perf számláló nevét és az értékeket.
Az EventStore szolgáltatás lekérdezése
Az EventStore szolgáltatás lehetővé teszi a fürt vagy a számítási feladatok adott időpontban történő állapotának megértését. Az EventStore egy állapotalapú Service Fabric szolgáltatás, amely a fürtből származó eseményeket tartja karban. Az események a Service Fabric Explorer, a REST és az API-k segítségével érhetők el. Az EventStore közvetlenül lekérdezi a fürtöt, hogy diagnosztikai adatokat kapjon a fürt bármely entitásáról Az EventStore-ban elérhető események teljes listájának megtekintéséhez tekintse meg a Service Fabric-eseményeket.
Az EventStore API-k programozott módon kérdezhetők le a Service Fabric ügyfélkódtárával.
Íme egy példakérés a 2018-04-03T18:00:00Z és 2018-04-04T18:00:00Z közötti összes fürteseményre a GetClusterEventListAsync függvényen keresztül.
var sfhttpClient = ServiceFabricClientFactory.Create(clusterUrl, settings);
var clstrEvents = sfhttpClient.EventsStore.GetClusterEventListAsync(
"2018-04-03T18:00:00Z",
"2018-04-04T18:00:00Z")
.GetAwaiter()
.GetResult()
.ToList();
Íme egy másik példa, amely lekérdezi a fürt állapotát és az összes csomóponteseményt 2018 szeptemberében, és kinyomtatja őket.
const int timeoutSecs = 60;
var clusterUrl = new Uri(@"http://localhost:19080"); // This example is for a Local cluster
var sfhttpClient = ServiceFabricClientFactory.Create(clusterUrl);
var clusterHealth = sfhttpClient.Cluster.GetClusterHealthAsync().GetAwaiter().GetResult();
Console.WriteLine("Cluster Health: {0}", clusterHealth.AggregatedHealthState.Value.ToString());
Console.WriteLine("Querying for node events...");
var nodesEvents = sfhttpClient.EventsStore.GetNodesEventListAsync(
"2018-09-01T00:00:00Z",
"2018-09-30T23:59:59Z",
timeoutSecs,
"NodeDown,NodeUp")
.GetAwaiter()
.GetResult()
.ToList();
Console.WriteLine("Result Count: {0}", nodesEvents.Count());
foreach (var nodeEvent in nodesEvents)
{
Console.Write("Node event happened at {0}, Node name: {1} ", nodeEvent.TimeStamp, nodeEvent.NodeName);
if (nodeEvent is NodeDownEvent)
{
var nodeDownEvent = nodeEvent as NodeDownEvent;
Console.WriteLine("(Node is down, and it was last up at {0})", nodeDownEvent.LastNodeUpAt);
}
else if (nodeEvent is NodeUpEvent)
{
var nodeUpEvent = nodeEvent as NodeUpEvent;
Console.WriteLine("(Node is up, and it was last down at {0})", nodeUpEvent.LastNodeDownAt);
}
}
Fürtállapot monitorozása
A Service Fabric egy állapotmodellt vezet be állapotentitással, amelyen a rendszerösszetevők és a watchdogok jelentést tehetnek a figyelt helyi feltételekről. Az állapottároló összesíti az összes állapotadatokat annak megállapításához, hogy az entitások kifogástalan állapotban vannak-e.
A fürt automatikusan feltöltődik a rendszerösszetevők által küldött állapotjelentésekkel. További információ: Rendszerállapot-jelentések használata hibaelhárításhoz.
A Service Fabric az egyes támogatott entitástípusok állapot-lekérdezéseit teszi elérhetővé. Ezek az API-n keresztül érhetők el a FabricClient.HealthManager, a PowerShell-parancsmagok és a REST metódusaival. Ezek a lekérdezések teljes állapotinformációkat adnak vissza az entitásról: az összesített állapotot, az entitásállapot-eseményeket, a gyermekállapotokat (ha vannak), a nem megfelelő állapotú értékeléseket (ha az entitás nem kifogástalan), valamint a gyermekállapot-statisztikákat (ha vannak).
Fürt állapotának lekérése
A Get-ServiceFabricClusterHealth parancsmag visszaadja a fürt entitásának állapotát, és tartalmazza az alkalmazások és csomópontok állapotát (a fürt gyermekei). Először csatlakozzon a fürthöz a Connect-ServiceFabricCluster parancsmaggal.
A fürt állapota 11 csomópont, a rendszeralkalmazás és a háló:/A leírt módon konfigurált szavazás.
Az alábbi példa a fürt állapotát az alapértelmezett állapotszabályzatok használatával kapja meg. A 11 csomópont kifogástalan állapotban van, de a fürt összesített állapota hiba, mert a háló:/A szavazóalkalmazás hibás. Figyelje meg, hogy a nem megfelelő állapotú értékelések hogyan adják meg az összesített állapotot kiváltó feltételek részleteit.
Get-ServiceFabricClusterHealth
AggregatedHealthState : Error
UnhealthyEvaluations :
100% (1/1) applications are unhealthy. The evaluation tolerates 0% unhealthy applications.
Application 'fabric:/Voting' is in Error.
33% (1/3) deployed applications are unhealthy. The evaluation tolerates 0% unhealthy deployed applications.
Deployed application on node '_nt2vm_3' is in Error.
50% (1/2) deployed service packages are unhealthy.
Service package for manifest 'VotingWebPkg' and service package activation ID '8723eb73-9b83-406b-9de3-172142ba15f3' is in Error.
'System.Hosting' reported Error for property 'CodePackageActivation:Code:SetupEntryPoint:131959376195593305'.
There was an error during CodePackage activation.The service host terminated with exit code:1
NodeHealthStates :
NodeName : _nt2vm_3
AggregatedHealthState : Ok
NodeName : _nt1vm_4
AggregatedHealthState : Ok
NodeName : _nt2vm_2
AggregatedHealthState : Ok
NodeName : _nt1vm_3
AggregatedHealthState : Ok
NodeName : _nt2vm_1
AggregatedHealthState : Ok
NodeName : _nt1vm_2
AggregatedHealthState : Ok
NodeName : _nt2vm_0
AggregatedHealthState : Ok
NodeName : _nt1vm_1
AggregatedHealthState : Ok
NodeName : _nt1vm_0
AggregatedHealthState : Ok
NodeName : _nt3vm_0
AggregatedHealthState : Ok
NodeName : _nt2vm_4
AggregatedHealthState : Ok
ApplicationHealthStates :
ApplicationName : fabric:/System
AggregatedHealthState : Ok
ApplicationName : fabric:/Voting
AggregatedHealthState : Error
HealthEvents : None
HealthStatistics :
Node : 11 Ok, 0 Warning, 0 Error
Replica : 4 Ok, 0 Warning, 0 Error
Partition : 2 Ok, 0 Warning, 0 Error
Service : 2 Ok, 0 Warning, 0 Error
DeployedServicePackage : 3 Ok, 1 Warning, 1 Error
DeployedApplication : 1 Ok, 1 Warning, 1 Error
Application : 0 Ok, 0 Warning, 1 Error
Az alábbi példa egy egyéni alkalmazásszabályzat használatával lekéri a fürt állapotát. Az eredményeket úgy szűri, hogy csak az alkalmazásokat és csomópontokat kapja meg hiba vagy figyelmeztetés esetén. Ebben a példában a rendszer nem ad vissza csomópontokat, mivel mind kifogástalan állapotban vannak. Csak a háló:/A szavazóalkalmazás tiszteletben tartja az alkalmazásszűrőt. Mivel az egyéni szabályzat azt határozza meg, hogy a háló:/Szavazó alkalmazás hibáinak tekintse a figyelmeztetéseket, a rendszer hibaként értékeli ki az alkalmazást, és a fürt is.
$appHealthPolicy = New-Object -TypeName System.Fabric.Health.ApplicationHealthPolicy
$appHealthPolicy.ConsiderWarningAsError = $true
$appHealthPolicyMap = New-Object -TypeName System.Fabric.Health.ApplicationHealthPolicyMap
$appUri1 = New-Object -TypeName System.Uri -ArgumentList "fabric:/Voting"
$appHealthPolicyMap.Add($appUri1, $appHealthPolicy)
Get-ServiceFabricClusterHealth -ApplicationHealthPolicyMap $appHealthPolicyMap -ApplicationsFilter "Warning,Error" -NodesFilter "Warning,Error" -ExcludeHealthStatistics
AggregatedHealthState : Error
UnhealthyEvaluations :
100% (1/1) applications are unhealthy. The evaluation tolerates 0% unhealthy applications.
Application 'fabric:/Voting' is in Error.
100% (5/5) deployed applications are unhealthy. The evaluation tolerates 0% unhealthy deployed applications.
Deployed application on node '_nt2vm_3' is in Error.
50% (1/2) deployed service packages are unhealthy.
Service package for manifest 'VotingWebPkg' and service package activation ID '8723eb73-9b83-406b-9de3-172142ba15f3' is in Error.
'System.Hosting' reported Error for property 'CodePackageActivation:Code:SetupEntryPoint:131959376195593305'.
There was an error during CodePackage activation.The service host terminated with exit code:1
Deployed application on node '_nt2vm_2' is in Error.
50% (1/2) deployed service packages are unhealthy.
Service package for manifest 'VotingWebPkg' and service package activation ID '2466f2f9-d5fd-410c-a6a4-5b1e00630cca' is in Error.
'System.Hosting' reported Error for property 'CodePackageActivation:Code:SetupEntryPoint:131959376486201388'.
There was an error during CodePackage activation.The service host terminated with exit code:1
Deployed application on node '_nt2vm_4' is in Error.
100% (1/1) deployed service packages are unhealthy.
Service package for manifest 'VotingWebPkg' and service package activation ID '5faa5201-eede-400a-865f-07f7f886aa32' is in Error.
'System.Hosting' reported Warning for property 'CodePackageActivation:Code:SetupEntryPoint:131959376207396204'. The evaluation treats
Warning as Error.
There was an error during CodePackage activation.The service host terminated with exit code:1
Deployed application on node '_nt2vm_0' is in Error.
100% (1/1) deployed service packages are unhealthy.
Service package for manifest 'VotingWebPkg' and service package activation ID '204f1783-f774-4f3a-b371-d9983afaf059' is in Error.
'System.Hosting' reported Error for property 'CodePackageActivation:Code:SetupEntryPoint:131959375885791093'.
There was an error during CodePackage activation.The service host terminated with exit code:1
Deployed application on node '_nt3vm_0' is in Error.
50% (1/2) deployed service packages are unhealthy.
Service package for manifest 'VotingWebPkg' and service package activation ID '2533ae95-2d2a-4f8b-beef-41e13e4c0081' is in Error.
'System.Hosting' reported Error for property 'CodePackageActivation:Code:SetupEntryPoint:131959376108346272'.
There was an error during CodePackage activation.The service host terminated with exit code:1
NodeHealthStates : None
ApplicationHealthStates :
ApplicationName : fabric:/Voting
AggregatedHealthState : Error
HealthEvents : None
Csomópont állapotának lekérése
A Get-ServiceFabricNodeHealth parancsmag egy csomópont-entitás állapotát adja vissza, és tartalmazza a csomóponton jelentett állapoteseményeket. Először csatlakozzon a fürthöz a Connect-ServiceFabricCluster parancsmaggal. Az alábbi példa egy adott csomópont állapotát az alapértelmezett állapotszabályzatok használatával kapja meg:
Get-ServiceFabricNodeHealth _nt1vm_3
Az alábbi példa lekéri a fürt összes csomópontjának állapotát:
Get-ServiceFabricNode | Get-ServiceFabricNodeHealth | select NodeName, AggregatedHealthState | ft -AutoSize
Rendszerszolgáltatás állapotának lekérése
A rendszerszolgáltatások összesített állapotának lekérése:
Get-ServiceFabricService -ApplicationName fabric:/System | Get-ServiceFabricServiceHealth | select ServiceName, AggregatedHealthState | ft -AutoSize
Következő lépések
Ez az oktatóanyag bemutatta, hogyan végezheti el az alábbi műveleteket:
- Service Fabric-események megtekintése
- EventStore API-k lekérdezése fürteseményekhez
- Infrastruktúra monitorozása/perf számlálók gyűjtése
- Fürtállapot-jelentések megtekintése
Ezután lépjen tovább a következő oktatóanyagra, amelyből megtudhatja, hogyan méretezhet egy fürtöt.