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 Egy Service Fabric-fürtöt 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.
Eben 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/teljesítményszá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 monitorozása
- Fürt horizontális fel- és leskálázása
- Fürt futtatókörnyezetének frissítése
- Fürt törlése
Megjegyzés
Javasoljuk, hogy az Azure Az PowerShell-modullal kommunikáljon az Azure-ral. Az első lépésekhez tekintse meg az Azure PowerShell telepítését ismertető szakaszt. 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 Azure PowerShell 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ók és a fürt Log Analytics-ügynökének konfigurálása
Service Fabric-események megtekintése Azure Monitor-naplók használatával
Az Azure Monitor-naplók telemetriát gyűjtenek és elemeznek a felhőben üzemeltetett alkalmazásokból és szolgáltatásokból, é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 megállapításokat nyerjen, és elhárítsa a fürtön zajló eseményeket.
A Service Fabric Analytics-megoldás eléréséhez lépjen a Azure Portal, é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és területen a csempék egy gráf formájában láthatók az egyes engedélyezett megoldásokhoz, köztük a Service Fabrichez. Kattintson a Service Fabric-gráfra a Service Fabric Analytics-megoldáshoz való folytatáshoz.
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ürtön zajló eseményekről.
Ha a fürt létrehozásakor engedélyezte a diagnosztikát, láthatja a következő eseményeit:
- Service Fabric-fürtesemények
- Reliable Actors programozási modell eseményei
- Reliable Services programozási modell eseményei
Megjegyzés
A beépített Service Fabric-események mellett részletesebb rendszereseményeket is gyűjthet 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 oldalon 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 táblájából származnak, és a következő megbízható szolgáltatások és aktoresemények is ezekből a táblákból származnak.
A lekérdezés a Kusto lekérdezési nyelvet használja, amelyet módosíthatja a keresett elem 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ényeinek referenciájá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. Ehhez mentse a lekérdezést függvényként a ServiceFabricEvent aliassal:
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' értékkel:
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ékkel:
ServiceFabricOperationalEvent
| where EventId == 18603
| project EventId, EventName = 'NodeUpOperational', TaskName, Computer, EventMessage, TimeGenerated
| sort by TimeGenerated
Állapotjelentéseket ad vissza a HealthState == 3 (Hiba) értékkel, é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ának visszaadása 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át az EventId /EventName szerint renderelheti egy erőforrásközi lekérdezéssel:
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 reliable actors alkalmazások eseményeit. A Service Fabric Analytics lapon kattintson az Alkalmazásesemények gráfjára.
Futtassa a következő lekérdezést a reliable services-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ényeket láthat, 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" paranccsal is megtalálhatja:
ServiceFabricReliableServiceEvent
| where ServiceName == "fabric:/Watchdog/WatchdogService"
| project TimeGenerated, EventMessage
| order by TimeGenerated desc
A megbízható aktoresemények hasonló módon tekinthetők meg:
ServiceFabricReliableActorEvent
| sort by TimeGenerated desc
A megbízható aktorok részletesebb eseményeinek konfigurálásához módosíthatja a scheduledTransferKeywordFilter
konfigurációt a diagnosztikai bővítményhez a fürtsablonban. Ezeknek az értékeknek a részleteit a reliable actors events reference (Megbízható aktorok eseményeinek referenciája) tartalmazza.
"EtwEventSourceProviderConfiguration": [
{
"provider": "Microsoft-ServiceFabric-Actors",
"scheduledTransferKeywordFilter": "1",
"scheduledTransferPeriod": "PT5M",
"DefaultEvents": {
"eventDestination": "ServiceFabricReliableActorEventTable"
}
},
Teljesítményszámlálók megtekintése az Azure Monitor-naplókkal
A teljesítményszámlálók megtekintéséhez lépjen arra a Azure Portal és erőforráscsoportra, amelyben létrehozta a Service Fabric Analytics-megoldást.
Válassza ki a ServiceFabric(mysfomsworkspace), majd a Log Analytics-munkaterület, majd a Speciális beállítások erőforrást.
Kattintson az Adatok, majd a Windows teljesítményszámlálók elemre. Az alapértelmezett számlálók listáját engedélyezheti, és a gyűjtemény időközét is beállíthatja. További gyűjtendő teljesítményszámlálókat is hozzáadhat. A megfelelő formátumra ebben a cikkben hivatkozunk. Kattintson a Mentés, 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 fejléc alatt. Minden engedélyezett megoldáshoz tartozik egy grafikus csempe, köztük egy a Service Fabrichez. Kattintson a Service Fabric-gráfra a Service Fabric Analytics-megoldáshoz való folytatáshoz.
Vannak grafikus csempék az operatív csatornákhoz és a megbízható szolgáltatások eseményeihez. A kiválasztott számlálókhoz beáramló adatok grafikus ábrázolása a Csomópontmetrikák területen jelenik meg.
Válassza a Tárolómetrika gráfot a további részletek megtekintéséhez. A fürteseményekhez hasonlóan lekérdezheti a teljesítményszámláló adatait is, és a Kusto lekérdezési nyelvvel szűrhet a csomópontokra, a teljesítményszámláló nevére és az értékekre.
Az EventStore szolgáltatás lekérdezése
Az EventStore szolgáltatás lehetővé teszi a fürt vagy 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ürt eseményeit tartja karban. Az események a Service Fabric Explorer, REST és 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 EventStoreban elérhető események teljes listájának megtekintéséhez lásd: Service Fabric-események.
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ának monitorozása
A Service Fabric egy állapotmodellt vezet be, amely állapotentitással rendelkezik, amelyen a rendszerösszetevők és a figyelők jelenthetik a figyelt helyi feltételeket. Az állapottároló összesíti az összes állapotadatot 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 a 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 állapotadatokat adnak vissza az entitásról: az összesített állapotot, az entitásállapot-eseményeket, a gyermekállapot-állapotokat (ha alkalmazható), a nem kifogástalan állapotú értékeléseket (ha az entitás nem kifogástalan), valamint a gyermekek állapotstatisztikáit (ha alkalmazható).
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 gyermekeit). 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ó:/Szavazás a leírtak szerint van konfigurálva.
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 állapotú, de a fürt összesített állapota Hiba, mert a háló:/Szavazó alkalmazás hiba állapotban van. Figyelje meg, hogy a nem megfelelő állapotú értékelések hogyan adnak meg részleteket az összesített állapotot kiváltó feltételekről.
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. Szűri az eredményeket, hogy csak az alkalmazásokat és a csomópontokat kérje le a hibából vagy a figyelmeztetésből. Ebben a példában a rendszer nem ad vissza csomópontokat, mivel mind kifogástalan állapotban vannak. Csak a háló:/Szavazó alkalmazás tartja tiszteletben az alkalmazásszűrőt. Mivel az egyéni szabályzat azt határozza meg, hogy a figyelmeztetéseket hibaként vegye figyelembe a háló:/Szavazó alkalmazás esetében, 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 szerzi be:
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
További 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
A következő oktatóanyagból megtudhatja, hogyan skálázhat egy fürtöt.