Fråga EventStore-API:er för klusterhändelser
Den här artikeln beskriver hur du frågar efter EventStore-API:er som är tillgängliga i Service Fabric version 6.2 och senare – om du vill veta mer om EventStore-tjänsten kan du läsa översikten över EventStore-tjänsten. För närvarande kan EventStore-tjänsten bara komma åt data under de senaste 7 dagarna (detta baseras på klustrets kvarhållningsprincip för diagnostikdata).
Kommentar
EventStore-API:erna är GA från och med Service Fabric version 6.4 för endast Windows-kluster som körs i Azure.
EventStore-API:erna kan nås direkt via en REST-slutpunkt eller programmatiskt. Beroende på frågan finns det flera parametrar som krävs för att samla in rätt data. Dessa parametrar omfattar vanligtvis:
api-version
: den version av EventStore-API:er som du använderStartTimeUtc
: definierar början av perioden som du är intresserad av att titta påEndTimeUtc
: slutet av tidsperioden
Utöver dessa parametrar finns det även valfria parametrar tillgängliga, till exempel:
timeout
: åsidosätt den standardmässiga tidsgränsen på 60 sekunder för att utföra begärandeåtgärdeneventstypesfilter
: Detta ger dig möjlighet att filtrera efter specifika händelsetyperExcludeAnalysisEvents
: returnera inte "Analysis"-händelser. Som standard returneras EventStore-frågor med "analys"-händelser där det är möjligt. Analyshändelser är mer omfattande operativa kanalhändelser som innehåller ytterligare kontext eller information utöver en vanlig Service Fabric-händelse och ger mer djup.SkipCorrelationLookup
: leta inte efter potentiella korrelerade händelser i klustret. Som standard försöker EventStore korrelera händelser i ett kluster och länka samman dina händelser när det är möjligt.
Varje entitet i ett kluster kan vara frågor om händelser. Du kan också fråga efter händelser för alla entiteter av typen. Du kan till exempel fråga efter händelser för en specifik nod eller för alla noder i klustret. Den aktuella uppsättningen entiteter som du kan fråga efter händelser för är (med hur frågan skulle struktureras):
- Kluster:
/EventsStore/Cluster/Events
- Noder:
/EventsStore/Nodes/Events
- Nod:
/EventsStore/Nodes/<NodeName>/$/Events
- Program:
/EventsStore/Applications/Events
- Tillämpning:
/EventsStore/Applications/<AppName>/$/Events
- Tjänster:
/EventsStore/Services/Events
- Tjänst:
/EventsStore/Services/<ServiceName>/$/Events
- Partitioner:
/EventsStore/Partitions/Events
- Skifte:
/EventsStore/Partitions/<PartitionID>/$/Events
- Repliker:
/EventsStore/Partitions/<PartitionID>/$/Replicas/Events
- Replik:
/EventsStore/Partitions/<PartitionID>/$/Replicas/<ReplicaID>/$/Events
Kommentar
När du refererar till ett program- eller tjänstnamn behöver frågan inte innehålla prefixet "fabric:/". Om program- eller tjänstnamnen har "/" i sig växlar du dessutom till "~" för att hålla frågan igång. Om ditt program till exempel visas som "fabric:/App1/FrontendApp" skulle dina appspecifika frågor struktureras som /EventsStore/Applications/App1~FrontendApp/$/Events
.
Dessutom visas hälsorapporter för tjänster i dag under motsvarande program, så du skulle fråga efter händelser för DeployedServiceHealthReportCreated
rätt programentitet.
Fråga EventStore via REST API-slutpunkter
Du kan fråga EventStore direkt via en REST-slutpunkt genom att göra GET
begäranden till: <your cluster address>/EventsStore/<entity>/Events/
.
Om du till exempel vill fråga efter alla klusterhändelser mellan 2018-04-03T18:00:00Z
och 2018-04-04T18:00:00Z
ser din begäran ut så här:
Method: GET
URL: http://mycluster:19080/EventsStore/Cluster/Events?api-version=6.4&StartTimeUtc=2018-04-03T18:00:00Z&EndTimeUtc=2018-04-04T18:00:00Z
Detta kan antingen returnera inga händelser eller listan över händelser som returneras i json:
Response: 200
Body:
[
{
"Kind": "ClusterUpgradeStart",
"CurrentClusterVersion": "0.0.0.0:",
"TargetClusterVersion": "6.2:1.0",
"UpgradeType": "Rolling",
"RollingUpgradeMode": "UnmonitoredAuto",
"FailureAction": "Manual",
"EventInstanceId": "090add3c-8f56-4d35-8d57-a855745b6064",
"TimeStamp": "2018-04-03T20:18:59.4313064Z",
"HasCorrelatedEvents": false
},
{
"Kind": "ClusterUpgradeDomainComplete",
"TargetClusterVersion": "6.2:1.0",
"UpgradeState": "RollingForward",
"UpgradeDomains": "(0 1 2)",
"UpgradeDomainElapsedTimeInMs": "78.5288",
"EventInstanceId": "090add3c-8f56-4d35-8d57-a855745b6064",
"TimeStamp": "2018-04-03T20:19:59.5729953Z",
"HasCorrelatedEvents": false
},
{
"Kind": "ClusterUpgradeDomainComplete",
"TargetClusterVersion": "6.2:1.0",
"UpgradeState": "RollingForward",
"UpgradeDomains": "(3 4)",
"UpgradeDomainElapsedTimeInMs": "0",
"EventInstanceId": "090add3c-8f56-4d35-8d57-a855745b6064",
"TimeStamp": "2018-04-03T20:20:59.6271949Z",
"HasCorrelatedEvents": false
},
{
"Kind": "ClusterUpgradeComplete",
"TargetClusterVersion": "6.2:1.0",
"OverallUpgradeElapsedTimeInMs": "120196.5212",
"EventInstanceId": "090add3c-8f56-4d35-8d57-a855745b6064",
"TimeStamp": "2018-04-03T20:20:59.8134457Z",
"HasCorrelatedEvents": false
}
]
Här kan vi se att mellan 2018-04-03T18:00:00Z
och 2018-04-04T18:00:00Z
, slutförde det här klustret sin första uppgradering när det först stod upp, från "CurrentClusterVersion": "0.0.0.0:"
till "TargetClusterVersion": "6.2:1.0"
, i "OverallUpgradeElapsedTimeInMs": "120196.5212"
.
Fråga EventStore programmatiskt
Du kan också köra frågor mot EventStore programmatiskt via Service Fabric-klientbiblioteket.
När du har konfigurerat Service Fabric-klienten kan du fråga efter händelser genom att komma åt EventStore så här: sfhttpClient.EventStore.<request>
Här är en exempelbegäran för alla klusterhändelser mellan 2018-04-03T18:00:00Z
och 2018-04-04T18:00:00Z
, via GetClusterEventListAsync
funktionen.
var sfhttpClient = ServiceFabricClientFactory.Create(clusterUrl, settings);
var clstrEvents = sfhttpClient.EventsStore.GetClusterEventListAsync(
"2018-04-03T18:00:00Z",
"2018-04-04T18:00:00Z")
.GetAwaiter()
.GetResult()
.ToList();
Här är ett annat exempel som frågar efter klusterhälsan och alla nodhändelser i september 2018 och skriver ut dem.
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);
}
}
Exempelscenarier och frågor
Här följer några exempel på hur du kan anropa REST-API:er för Event Store för att förstå statusen för klustret.
Klusteruppgraderingar:
Om du vill se den senaste gången klustret lyckades eller försökte uppgraderas förra veckan kan du fråga API:erna om nyligen slutförda uppgraderingar till klustret genom att fråga efter händelserna "ClusterUpgradeCompleted" i EventStore: https://mycluster.cloudapp.azure.com:19080/EventsStore/Cluster/Events?api-version=6.4&starttimeutc=2017-04-22T17:01:51Z&endtimeutc=2018-04-29T17:02:51Z&EventsTypesFilter=ClusterUpgradeCompleted
Problem med klusteruppgradering:
På samma sätt kan du fråga efter alla händelser för klusterentiteten om det har uppstått problem med en nyligen genomförd klusteruppgradering. Du ser olika händelser, inklusive initiering av uppgraderingar och varje UD som uppgraderingen har rullat igenom. Du kommer också att se händelser för den punkt där återställningen startade och motsvarande hälsohändelser. Här är den fråga som du skulle använda för detta: https://mycluster.cloudapp.azure.com:19080/EventsStore/Cluster/Events?api-version=6.4&starttimeutc=2017-04-22T17:01:51Z&endtimeutc=2018-04-29T17:02:51Z
Nodstatus ändras:
Om du vill se nodstatusändringar under de senaste dagarna – när noderna har gått upp eller ned, eller har aktiverats eller inaktiverats (antingen av plattformen, kaostjänsten eller från användarindata) – använder du följande fråga: https://mycluster.cloudapp.azure.com:19080/EventsStore/Nodes/Events?api-version=6.4&starttimeutc=2017-04-22T17:01:51Z&endtimeutc=2018-04-29T17:02:51Z
Programhändelser:
Du kan också spåra dina senaste programdistributioner och uppgraderingar. Använd följande fråga för att se alla programhändelser i klustret: https://mycluster.cloudapp.azure.com:19080/EventsStore/Applications/Events?api-version=6.4&starttimeutc=2017-04-22T17:01:51Z&endtimeutc=2018-04-29T17:02:51Z
Historisk hälsa för ett program:
Förutom att bara se programlivscykelhändelser kanske du också vill se historiska data om hälsotillståndet för ett visst program. Du kan göra detta genom att ange det programnamn som du vill samla in data för. Använd den här frågan för att hämta alla programhälsohändelser: https://mycluster.cloudapp.azure.com:19080/EventsStore/Applications/myApp/$/Events?api-version=6.4&starttimeutc=2018-03-24T17:01:51Z&endtimeutc=2018-03-29T17:02:51Z&EventsTypesFilter=ApplicationNewHealthReport
.
Om du vill inkludera hälsohändelser som kan ha upphört att gälla (gått sin tid till live (TTL)) lägger du ,ApplicationHealthReportExpired
till i slutet av frågan för att filtrera på två typer av händelser.
Historisk hälsa för alla tjänster i "myApp":
För närvarande visas hälsorapporthändelser för tjänster som DeployedServicePackageNewHealthReport
händelser under motsvarande programentitet. Om du vill se hur dina tjänster har gått för "App1" använder du följande fråga: https://mycluster.cloudapp.azure.com:19080/EventsStore/Applications/myapp/$/Events?api-version=6.4&starttimeutc=2017-04-22T17:01:51Z&endtimeutc=2018-04-29T17:02:51Z&EventsTypesFilter=DeployedServicePackageNewHealthReport
Omkonfiguration av partition:
Om du vill se alla partitionsförflyttningar som har inträffat i klustret frågar du efter PartitionReconfigured
händelsen. Detta kan hjälpa dig att ta reda på vilka arbetsbelastningar som kördes på vilken nod vid specifika tidpunkter när du diagnostiserar problem i klustret. Här är en exempelfråga som gör det: https://mycluster.cloudapp.azure.com:19080/EventsStore/Partitions/Events?api-version=6.4&starttimeutc=2018-04-22T17:01:51Z&endtimeutc=2018-04-29T17:02:51Z&EventsTypesFilter=PartitionReconfigured
Chaos-tjänsten:
Det finns en händelse för när Chaos-tjänsten startas eller stoppas som exponeras på klusternivå. Om du vill se din senaste användning av Chaos-tjänsten använder du följande fråga: https://mycluster.cloudapp.azure.com:19080/EventsStore/Cluster/Events?api-version=6.4&starttimeutc=2017-04-22T17:01:51Z&endtimeutc=2018-04-29T17:02:51Z&EventsTypesFilter=ChaosStarted,ChaosStopped