Kurz: Monitorování clusteru Service Fabric v Azure
Monitorování a diagnostika jsou důležité pro vývoj, testování a nasazení úloh v jakémkoli cloudovém prostředí. Tento kurz je druhou částí série a ukazuje, jak monitorovat a diagnostikovat cluster Service Fabric pomocí událostí, čítačů výkonu a sestav stavu. Další informace najdete v přehledu monitorování clusteru a infrastruktury.
V tomto kurzu se naučíte:
- Zobrazení událostí Service Fabric
- Dotazování rozhraní EVENTStore API pro události clusteru
- Monitorování infrastruktury / shromažďování čítačů výkonu
- Zobrazení sestav stavu clusteru
V této sérii kurzů se naučíte:
- Vytvoření zabezpečeného clusteru s Windows v Azure pomocí šablony
- Monitorování clusteru
- Horizontální snížení nebo navýšení kapacity clusteru
- Upgrade modulu runtime clusteru
- Odstranění clusteru
Poznámka
K interakci s Azure doporučujeme použít modul Azure Az PowerShell. Začněte tím, že si projdete téma Instalace Azure PowerShellu. Informace o tom, jak migrovat na modul Az PowerShell, najdete v tématu Migrace Azure PowerShellu z AzureRM na Az.
Požadavky
Než začnete s tímto kurzem:
- Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet.
- Nainstalujte Azure PowerShell nebo Azure CLI.
- Vytvoření zabezpečeného clusteru s Windows
- Nastavení shromažďování diagnostiky pro cluster
- Povolení služby EventStore v clusteru
- Konfigurace protokolů Azure Monitoru a agenta Log Analytics pro cluster
Zobrazení událostí Service Fabric pomocí protokolů služby Azure Monitor
Protokoly Azure Monitoru shromažďují a analyzují telemetrii z aplikací a služeb hostovaných v cloudu a poskytují analytické nástroje, které vám pomůžou maximalizovat jejich dostupnost a výkon. Spouštěním dotazů v protokolech služby Azure Monitor můžete získat přehledy a řešit potíže s tím, co se děje v clusteru.
Pokud chcete získat přístup k řešení Service Fabric Analytics, přejděte na Azure Portal a vyberte skupinu prostředků, ve které jste vytvořili řešení Service Fabric Analytics.
Vyberte prostředek ServiceFabric(mysfomsworkspace).
V části Přehled vidíte dlaždice ve formě grafu pro každé z povolených řešení, včetně jednoho pro Service Fabric. Klikněte na graf Service Fabric a pokračujte řešením Service Fabric Analytics.
Následující obrázek ukazuje domovskou stránku řešení Service Fabric Analytics. Tato domovská stránka poskytuje snímek obrazovky s tím, co se děje ve vašem clusteru.
Pokud jste povolili diagnostiku při vytváření clusteru, můžete zobrazit události pro
- Události clusteru Service Fabric
- Události programovacího modelu Reliable Actors
- Události programovacího modelu Reliable Services
Poznámka
Kromě předem vytvořených událostí Service Fabric je možné shromažďovat podrobnější systémové události aktualizací konfigurace vašeho diagnostického rozšíření.
Zobrazení událostí Service Fabric, včetně akcí na uzlech
Na stránce Service Fabric Analytics klikněte na graf Pro události clusteru. Zobrazí se protokoly pro všechny shromážděné systémové události. Pro referenci jsou z tabulky WADServiceFabricSystemEventsTable v účtu azure Storage a podobně jsou zobrazené události spolehlivých služeb a objektů actor z těchto tabulek.
Dotaz používá dotazovací jazyk Kusto, který můžete upravit a upřesnit, co hledáte. Pokud například chcete vyhledat všechny akce prováděné na uzlech v clusteru, můžete použít následující dotaz. ID událostí použitá níže najdete v referenčních informacích k událostem operačního kanálu.
ServiceFabricOperationalEvent
| where EventId < 25627 and EventId > 25619
Dotazovací jazyk Kusto je výkonný. Tady jsou některé další užitečné dotazy.
Vytvořte vyhledávací tabulku ServiceFabricEvent jako uživatelem definovanou funkci uložením dotazu jako funkce s aliasem ServiceFabricEvent:
let ServiceFabricEvent = datatable(EventId: int, EventName: string)
[
...
18603, 'NodeUpOperational',
18604, 'NodeDownOperational',
...
];
ServiceFabricEvent
Vrácení provozních událostí zaznamenaných za poslední hodinu:
ServiceFabricOperationalEvent
| where TimeGenerated > ago(1h)
| join kind=leftouter ServiceFabricEvent on EventId
| project EventId, EventName, TaskName, Computer, ApplicationName, EventMessage, TimeGenerated
| sort by TimeGenerated
Vrácení provozních událostí s ID události == 18604 a eventName == 'NodeDownOperational':
ServiceFabricOperationalEvent
| where EventId == 18604
| project EventId, EventName = 'NodeDownOperational', TaskName, Computer, EventMessage, TimeGenerated
| sort by TimeGenerated
Vrátit provozní události s ID události == 18604 a eventName == 'NodeUpOperational':
ServiceFabricOperationalEvent
| where EventId == 18603
| project EventId, EventName = 'NodeUpOperational', TaskName, Computer, EventMessage, TimeGenerated
| sort by TimeGenerated
Vrátí zprávy o stavu s hodnotou HealthState == 3 (Error) a extrahuje další vlastnosti z pole EventMessage:
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))
Vrátí časový graf událostí s ID události != 17523:
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
Získání agregovaných provozních událostí Service Fabric s konkrétní službou a uzlem:
ServiceFabricOperationalEvent
| where ApplicationName != "" and ServiceName != ""
| summarize AggregatedValue = count() by ApplicationName, ServiceName, Computer
Vykreslujte počet událostí Service Fabric podle id události / názvu události pomocí dotazu mezi prostředky:
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
Zobrazení událostí aplikace Service Fabric
Můžete zobrazit události aplikací reliable services a reliable actors nasazených v clusteru. Na stránce Analýzy Service Fabric klikněte na graf Události aplikace.
Spuštěním následujícího dotazu zobrazte události z aplikací spolehlivých služeb:
ServiceFabricReliableServiceEvent
| sort by TimeGenerated desc
Můžete zobrazit různé události, kdy je služba runasync
spuštěna a dokončena, což obvykle probíhá u nasazení a upgradů.
Události pro spolehlivou službu můžete najít také pomocí serviceName == "fabric:/Watchdog/WatchdogService":
ServiceFabricReliableServiceEvent
| where ServiceName == "fabric:/Watchdog/WatchdogService"
| project TimeGenerated, EventMessage
| order by TimeGenerated desc
Události spolehlivého objektu actor lze zobrazit podobným způsobem:
ServiceFabricReliableActorEvent
| sort by TimeGenerated desc
Pokud chcete nakonfigurovat podrobnější události pro reliable actors, můžete změnit scheduledTransferKeywordFilter
v konfiguraci diagnostického rozšíření v šabloně clusteru. Podrobnosti o těchto hodnotách najdete v referenčních informacích k událostem reliable actors.
"EtwEventSourceProviderConfiguration": [
{
"provider": "Microsoft-ServiceFabric-Actors",
"scheduledTransferKeywordFilter": "1",
"scheduledTransferPeriod": "PT5M",
"DefaultEvents": {
"eventDestination": "ServiceFabricReliableActorEventTable"
}
},
Zobrazení čítačů výkonu pomocí protokolů služby Azure Monitor
Pokud chcete zobrazit čítače výkonu, přejděte do Azure Portal a skupiny prostředků, ve které jste vytvořili řešení Service Fabric Analytics.
Vyberte prostředek ServiceFabric(mysfomsworkspace), pak Pracovní prostor služby Log Analytics a pak Upřesnit nastavení.
Klikněte na Data a pak na Čítače výkonu Windows. K dispozici je seznam výchozích čítačů, které můžete povolit, a můžete také nastavit interval pro shromažďování. Můžete také přidat další čítače výkonu, které chcete shromažďovat. V tomto článku se odkazuje na správný formát. Klikněte na Uložit a pak klikněte na OK.
Zavřete okno Upřesnit nastavení a pod nadpisem Obecné vyberte Souhrn pracovního prostoru. Pro každé z povolených řešení je k dispozici grafická dlaždice, včetně jedné pro Service Fabric. Klikněte na graf Service Fabric a pokračujte řešením Service Fabric Analytics.
K dispozici jsou grafické dlaždice pro události provozních kanálů a spolehlivých služeb. Grafické znázornění toku dat pro čítače, které jste vybrali, se zobrazí v části Node Metrics (Metriky uzlů).
Výběrem grafu Metrika kontejneru zobrazíte další podrobnosti. Můžete také dotazovat data čítače výkonu podobně jako události clusteru a filtrovat uzly, název čítače výkonu a hodnoty pomocí dotazovacího jazyka Kusto.
Dotaz na službu EventStore
Služba EventStore poskytuje způsob, jak porozumět stavu clusteru nebo úloh v daném okamžiku. EventStore je stavová služba Service Fabric, která udržuje události z clusteru. Události se zveřejňují prostřednictvím Service Fabric Explorer, REST a rozhraní API. EventStore se dotazuje přímo na cluster, aby získal diagnostická data pro libovolnou entitu v clusteru. Pokud chcete zobrazit úplný seznam událostí dostupných v úložišti událostí, přečtěte si téma Události Service Fabric.
Rozhraní API eventstoru je možné dotazovat programově pomocí klientské knihovny Service Fabric.
Tady je příklad požadavku na všechny události clusteru mezi 2018-04-03T18:00:00Z a 2018-04-04T18:00:00Z prostřednictvím funkce GetClusterEventListAsync.
var sfhttpClient = ServiceFabricClientFactory.Create(clusterUrl, settings);
var clstrEvents = sfhttpClient.EventsStore.GetClusterEventListAsync(
"2018-04-03T18:00:00Z",
"2018-04-04T18:00:00Z")
.GetAwaiter()
.GetResult()
.ToList();
Tady je další příklad, který se dotazuje na stav clusteru a všechny události uzlů v září 2018 a vytiskne je.
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);
}
}
Monitorování stavu clusteru
Service Fabric zavádí model stavu s entitami stavu, na kterých můžou systémové komponenty a sledovací zařízení hlásit místní podmínky, které monitorují. Úložiště stavů agreguje všechna data o stavu a určuje, jestli jsou entity v pořádku.
Cluster se automaticky naplní zprávami o stavu odesílanými součástmi systému. Další informace najdete v tématu Řešení potíží pomocí sestav stavu systému.
Service Fabric zveřejňuje dotazy na stav pro každý z podporovaných typů entit. Dají se k nim přistupovat prostřednictvím rozhraní API pomocí metod na FabricClient.HealthManager, rutinách PowerShellu a REST. Tyto dotazy vrátí úplné informace o stavu entity: agregovaný stav, události stavu entity, podřízené stavové stavy (pokud jsou k dispozici), vyhodnocení špatného stavu (když entita není v pořádku) a statistiky stavu dětí (pokud je to možné).
Získání stavu clusteru
Rutina Get-ServiceFabricClusterHealth vrátí stav entity clusteru a obsahuje stav aplikací a uzlů (podřízené položky clusteru). Nejprve se připojte ke clusteru pomocí rutiny Connect-ServiceFabricCluster.
Stav clusteru je 11 uzlů, systémová aplikace a prostředky infrastruktury:/Voting nakonfigurované podle popisu.
Následující příklad získá stav clusteru pomocí výchozích zásad stavu. 11 uzlů je v pořádku, ale agregovaný stav clusteru je Chyba, protože aplikace fabric:/Voting je v chybě. Všimněte si, že hodnocení, které není v pořádku, poskytují podrobnosti o podmínkách, které aktivovaly agregovaný stav.
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
Následující příklad získá stav clusteru pomocí vlastních zásad aplikace. Filtruje výsledky tak, aby zobrazovaly chybu nebo upozornění pouze u aplikací a uzlů. V tomto příkladu se nevrací žádné uzly, protože jsou všechny v pořádku. Filtr aplikací respektuje pouze aplikace fabric:/Voting. Vzhledem k tomu, že vlastní zásada určuje, že se upozornění mají považovat za chyby pro aplikaci fabric:/Voting, vyhodnotí se aplikace jako chybná a stejně tak i cluster.
$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
Získání stavu uzlu
Rutina Get-ServiceFabricNodeHealth vrátí stav entity uzlu a obsahuje události stavu hlášené na uzlu. Nejprve se připojte ke clusteru pomocí rutiny Connect-ServiceFabricCluster. Následující příklad získá stav konkrétního uzlu pomocí výchozích zásad stavu:
Get-ServiceFabricNodeHealth _nt1vm_3
Následující příklad získá stav všech uzlů v clusteru:
Get-ServiceFabricNode | Get-ServiceFabricNodeHealth | select NodeName, AggregatedHealthState | ft -AutoSize
Získání stavu systémové služby
Získejte agregovaný stav systémových služeb:
Get-ServiceFabricService -ApplicationName fabric:/System | Get-ServiceFabricServiceHealth | select ServiceName, AggregatedHealthState | ft -AutoSize
Další kroky
V tomto kurzu jste se naučili:
- Zobrazení událostí Service Fabric
- Dotazování rozhraní EVENTStore API pro události clusteru
- Monitorování infrastruktury / shromažďování čítačů výkonu
- Zobrazení sestav stavu clusteru
V dalším kroku přejděte k následujícímu kurzu, kde se dozvíte, jak škálovat cluster.