Zelfstudie: Een Service Fabric-cluster bewaken in Azure
Bewaking en diagnose zijn essentieel voor het ontwikkelen, testen en implementeren van workloads in elke cloudomgeving. Deze zelfstudie is deel twee van een reeks en laat zien hoe u een Service Fabric-cluster kunt bewaken en diagnosticeren met gebeurtenissen, prestatiemeteritems en statusrapporten. Lees voor meer informatie het overzicht over clusterbewaking en infrastructuurbewaking.
In deze zelfstudie leert u het volgende:
- Service Fabric-gebeurtenissen bekijken
- Query's uitvoeren op EventStore-API's voor clustergebeurtenissen
- Infrastructuur controleren/prestatiemeteritems verzamelen
- Statusrapporten van het cluster bekijken
In deze zelfstudiereeks leert u het volgende:
- Een beveiligd Windows-cluster maken in Azure met behulp van een sjabloon
- Een cluster bewaken
- Een cluster in- of uitschalen
- De runtime van een cluster upgraden
- Een cluster verwijderen
Notitie
Het wordt aanbevolen de Azure Az PowerShell-module te gebruiken om te communiceren met Azure. Zie Azure PowerShell installeren om aan de slag te gaan. Raadpleeg Azure PowerShell migreren van AzureRM naar Az om te leren hoe u naar de Azure PowerShell-module migreert.
Vereisten
Voor u met deze zelfstudie begint:
- Als u nog geen Azure-abonnement hebt, maakt u een gratis account
- Installeer Azure PowerShell of Azure CLI.
- Een beveiligd Windows-cluster maken
- Diagnostische verzameling instellen voor het cluster
- De EventStore-service in het cluster inschakelen
- Azure Monitor-logboeken en de Log Analytics-agent voor het cluster configureren
Service Fabric-gebeurtenissen bekijken met behulp van Azure Monitor-logboeken
Met Azure Monitor-logboeken wordt telemetrie vastgelegd, verzameld en geanalyseerd op basis van toepassingen en services die worden gehost in de cloud en worden er analysehulpprogramma's geboden waarmee u de beschikbaarheid en prestaties hiervan kunt maximaliseren. U kunt query's uitvoeren in Azure Monitor-logboeken om meer inzicht te krijgen in wat er in het cluster plaatsvindt en problemen in uw cluster op te lossen.
Als u toegang wilt krijgen tot de Service Fabric Analytics-oplossing, gaat u naar de Azure-portal en selecteert u de resourcegroep waarin u de oplossing Service Fabric-analyse hebt gemaakt.
Selecteer de resource ServiceFabric(mysfomsworkspace).
In Overzicht worden de tegels weergegeven in de vorm van een grafiek voor elk van de ingeschakelde oplossingen, inclusief een voor Service Fabric. Selecteer de Service Fabric-grafiek om door te gaan naar de Service Fabric Analytics-oplossing.
De volgende afbeelding toont de startpagina van de oplossing Service Fabric-analyse. Deze startpagina bevat een momentopname van wat er in uw cluster gebeurt.
Als u diagnostische gegevens hebt ingeschakeld bij het maken van het cluster, kunt u de volgende gebeurtenissen weergeven:
- Service Fabric-clustergebeurtenissen
- Reliable Actors-programmeermodelgebeurtenissen
- Reliable Services-programmeermodelgebeurtenissen
Notitie
Naast de kant-en-klare Service Fabric-gebeurtenissen, kunnen ook meer gedetailleerde systeemgebeurtenissen worden verzameld door de configuratie van de extensie voor diagnostische gegevens bij te werken.
Service Fabric-gebeurtenissen weergeven, met inbegrip van acties op knooppunten
Klik op de pagina Service Fabric-analyse op de grafiek voor Clustergebeurtenissen. De logboeken voor alle verzamelde systeemgebeurtenissen worden weergegeven. Ter referentie: deze komen van de WADServiceFabricSystemEventsTable in het Azure Storage-account. De Reliable Services- en Actors-gebeurtenissen die u hierna ziet, komen ook uit de bijbehorende tabellen.
De query gebruikt de Kusto-querytaal, die u kunt aanpassen om beter af te stemmen op wat u zoekt. Als u bijvoorbeeld alle acties wilt vinden die worden uitgevoerd op knooppunten in het cluster, kunt u de volgende query gebruiken. De onderstaande gebeurtenis-id's vindt u in de verwijzing voor gebeurtenissen op operationele kanalen.
ServiceFabricOperationalEvent
| where EventId < 25627 and EventId > 25619
Kusto is een krachtige querytaal. Hier volgen enkele andere nuttige query's.
Maak een ServiceFabricEvent-opzoektabel als een door de gebruiker gedefinieerde functie door de query op te slaan als een functie met de alias ServiceFabricEvent:
let ServiceFabricEvent = datatable(EventId: int, EventName: string)
[
...
18603, 'NodeUpOperational',
18604, 'NodeDownOperational',
...
];
ServiceFabricEvent
Operationele gebeurtenissen retourneren die zijn vastgelegd in het afgelopen uur:
ServiceFabricOperationalEvent
| where TimeGenerated > ago(1h)
| join kind=leftouter ServiceFabricEvent on EventId
| project EventId, EventName, TaskName, Computer, ApplicationName, EventMessage, TimeGenerated
| sort by TimeGenerated
Operationele gebeurtenissen retourneren met EventId == 18604 en EventName == NodeDownOperational:
ServiceFabricOperationalEvent
| where EventId == 18604
| project EventId, EventName = 'NodeDownOperational', TaskName, Computer, EventMessage, TimeGenerated
| sort by TimeGenerated
Operationele gebeurtenissen retourneren met EventId == 18604 en EventName == NodeUpOperational:
ServiceFabricOperationalEvent
| where EventId == 18603
| project EventId, EventName = 'NodeUpOperational', TaskName, Computer, EventMessage, TimeGenerated
| sort by TimeGenerated
Retourneert statusrapporten met HealthState == 3 (Fout) en extraheer meer eigenschappen uit het veld 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))
Een tijdgrafiek met gebeurtenissen retourneren met de EventId ! = 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
Operationele Service Fabric-gebeurtenissen ophalen die zijn geaggregeerd met de specifieke service en het specifieke knooppunt:
ServiceFabricOperationalEvent
| where ApplicationName != "" and ServiceName != ""
| summarize AggregatedValue = count() by ApplicationName, ServiceName, Computer
Het aantal Service Fabric-gebeurtenissen op EventId / EventName weergeven met behulp van een query voor verschillende resources:
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-toepassingsgebeurtenissen weergeven
U kunt gebeurtenissen weergeven voor de toepassingen Reliable Services en Reliable Actors die op het cluster zijn geïmplementeerd. Selecteer op de pagina Service Fabric Analytics de grafiek voor toepassingsevenementen.
Voer de volgende query uit om gebeurtenissen van uw Reliable Services-toepassingen weer te geven:
ServiceFabricReliableServiceEvent
| sort by TimeGenerated desc
U kunt verschillende gebeurtenissen zien wanneer de service runasync
wordt gestart en voltooid, wat doorgaans gebeurt bij implementaties en upgrades.
U kunt ook gebeurtenissen vinden voor Reliable Service met ServiceName == "fabric:/Watchdog/WatchdogService":
ServiceFabricReliableServiceEvent
| where ServiceName == "fabric:/Watchdog/WatchdogService"
| project TimeGenerated, EventMessage
| order by TimeGenerated desc
Reliable Actor-gebeurtenissen kunnen op een vergelijkbare manier worden weergegeven:
ServiceFabricReliableActorEvent
| sort by TimeGenerated desc
Als u gedetailleerdere gebeurtenissen voor Reliable Actors wilt configureren, kunt u de scheduledTransferKeywordFilter
in de configuratie voor de diagnostische extensie in de clustersjabloon wijzigen. Meer informatie over de waarden hiervoor vindt u in de referentie voor Reliable Actors-gebeurtenissen.
"EtwEventSourceProviderConfiguration": [
{
"provider": "Microsoft-ServiceFabric-Actors",
"scheduledTransferKeywordFilter": "1",
"scheduledTransferPeriod": "PT5M",
"DefaultEvents": {
"eventDestination": "ServiceFabricReliableActorEventTable"
}
},
Prestatiemeteritems weergeven met Azure Monitor-logboeken
Als u prestatiemeteritems wilt weergeven, gaat u naar de Azure-portal en de resourcegroep waarin u de oplossing Service Fabric-analyse hebt gemaakt.
Selecteer de resource ServiceFabric(mysfomsworkspace) en selecteer vervolgens Log Analytics-werkruimte en Geavanceerde instellingen.
Selecteer Gegevens en kies vervolgens Windows-prestatiemeteritems. Er is een lijst met standaardtellers die u kunt inschakelen en u kunt ook het interval voor verzameling instellen. U kunt ook aanvullende prestatiemeteritems toevoegen om te verzamelen. In dit artikel wordt verwezen naar de juiste indeling. Klik op Opslaan en selecteer VERVOLGENS OK.
Sluit de blade Geavanceerde instellingen en selecteer Samenvatting van werkruimten onder de kop Algemeen. Voor elk van de oplossingen die zijn ingeschakeld, is er een grafische tegel, waaronder een voor Service Fabric. Selecteer de Service Fabric-grafiek om door te gaan naar de Service Fabric Analytics-oplossing.
Er zijn grafische tegels voor operationeel-kanaalgebeurtenissen en Reliable Services-gebeurtenissen. De grafische weergave van de gegevens die binnenkomen voor de tellers die u hebt geselecteerd, worden weergegeven onder Metrische knooppuntgegevens.
Selecteer de grafiek met metrische containergegevens om meer details weer te geven. U kunt ook query's uitvoeren op gegevens van prestatiemeteritems, net als bij clustergebeurtenissen, en filteren op de knooppunten, de naam van het prestatiemeteritem en waarden met behulp van de Kusto-querytaal.
Query's uitvoeren op de EventStore-service
De EventStore-service biedt een manier om op elk moment meer inzicht te krijgen in de status van uw cluster of workloads. EventStore is een stateful Service Fabric-service die gebeurtenissen van het cluster bijhoudt. De gebeurtenissen worden weergegeven via Service Fabric Explorer, REST en API's. EventStore voert rechtstreeks query's op het cluster uit om diagnostische gegevens op te halen voor elke entiteit in uw cluster. Als u een volledige lijst van gebeurtenissen die beschikbaar zijn in EventStore wilt weergeven, raadpleegt u Service Fabric-gebeurtenissen.
Op de EventStore-API's kunnen programmatisch query's worden uitgevoerd met behulp van de Service Fabric-clientbibliotheek.
Hier volgt een voorbeeldaanvraag voor alle clustergebeurtenissen tussen 2018-04-03T18:00:00Z en 2018-04-04T18:00:00Z via de functie 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();
Hier volgt nog een voorbeeld waarin een query wordt uitgevoerd voor de clusterstatus en alle knooppuntgebeurtenissen in september 2018 en deze worden afgedrukt.
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);
}
}
Clusterstatus bewaken
Service Fabric introduceert een statusmodel met statusentiteiten waarop systeemonderdelen en bewaking lokale voorwaarden kunnen rapporteren die ze controleren. De Health Store aggregeert alle statusgegevens om te bepalen of de entiteiten in orde zijn.
Het cluster wordt automatisch ingevuld met statusrapporten die worden verzonden door de systeemonderdelen. Lees Systeemstatusrapporten gebruiken om fouten op te lossen voor meer informatie.
Service Fabric geeft statusquery's weer voor alle ondersteunde entiteitstypes. Ze kunnen worden geopend via de API met behulp van methoden op FabricClient.HealthManager, PowerShell-cmdlets en REST. Deze query's retourneren gegevens over de status van de entiteit: de geaggregeerde status, de statusgebeurtenissen van de entiteit, de status van onderliggende items (indien van toepassing), de beschadigde evaluaties (wanneer de entiteit niet in orde is) en de statusstatistieken van onderliggende items (indien van toepassing).
Clusterstatus ophalen
De cmdlet Get-ServiceFabricClusterHealth retourneert de status van de clusterentiteit en bevat de statussen van toepassingen en knooppunten (onderliggende items van het cluster). Maak eerst verbinding met het cluster met behulp van de cmdlet Connect-ServiceFabricCluster.
De status van het cluster is 11 knooppunten, de systeemtoepassing en fabric:/Voting geconfigureerd zoals beschreven.
In het volgende voorbeeld wordt de status van het cluster opgehaald met een standaard statusbeleid. De 11 knooppunten zijn in orde, maar de samengevoegde status van het cluster is fout, omdat de toepassing fabric:/Voting een fout bevat. U ziet hoe de beschadigingsevaluaties details bevatten over de omstandigheden die de geaggregeerde status hebben geactiveerd.
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
In het volgende voorbeeld wordt de status van het cluster met behulp van een aangepast toepassingsbeleid opgehaald. De resultaten worden gefilterd om alleen toepassingen en knooppunten met een fout of waarschuwing op te halen. In dit voorbeeld worden er geen knooppunten geretourneerd, omdat ze allemaal in orde zijn. Alleen de toepassing fabric:/Voting respecteert het toepassingenfilter. Omdat het aangepaste beleid specificeert om waarschuwingen te beschouwen als fouten voor de toepassing fabric:/Voting, wordt de toepassing geëvalueerd als fout en het cluster ook.
$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
Status van knooppunten ophalen
De cmdlet Get-ServiceFabricNodeHealth retourneert de status van een knooppuntentiteit en bevat de statusgebeurtenissen die op het knooppunt zijn gerapporteerd. Gebruik eerst de cmdlet Connect-ServiceFabricCluster om verbinding te maken met het cluster. In het volgende voorbeeld wordt de status van een specifiek knooppunt opgehaald met behulp van standaard statusbeleid:
Get-ServiceFabricNodeHealth _nt1vm_3
In het volgende voorbeeld wordt de status van alle knooppunten in het cluster opgehaald:
Get-ServiceFabricNode | Get-ServiceFabricNodeHealth | select NodeName, AggregatedHealthState | ft -AutoSize
Status van systeemservice ophalen
De geaggregeerde status van de systeemservices ophalen:
Get-ServiceFabricService -ApplicationName fabric:/System | Get-ServiceFabricServiceHealth | select ServiceName, AggregatedHealthState | ft -AutoSize
Volgende stappen
In deze zelfstudie heeft u het volgende geleerd:
- Service Fabric-gebeurtenissen bekijken
- Query's uitvoeren op EventStore-API's voor clustergebeurtenissen
- Infrastructuur controleren/prestatiemeteritems verzamelen
- Statusrapporten van het cluster bekijken
Ga nu verder met de volgende zelfstudie om te leren hoe u een cluster kunt schalen.