Delen via


Query's uitvoeren op EventStore-API's voor clustergebeurtenissen

In dit artikel wordt beschreven hoe u query's kunt uitvoeren op de EventStore-API's die beschikbaar zijn in Service Fabric versie 6.2 en hoger. Als u meer wilt weten over de EventStore-service, raadpleegt u het overzicht van de EventStore-service. Op dit moment heeft de EventStore-service alleen toegang tot gegevens voor de afgelopen 7 dagen (dit is gebaseerd op het bewaarbeleid voor diagnostische gegevens van uw cluster).

Notitie

De EventStore-API's zijn algemeen beschikbaar vanaf Service Fabric versie 6.4 voor alleen Windows-clusters die worden uitgevoerd in Azure.

De EventStore-API's kunnen rechtstreeks worden geopend via een REST-eindpunt of programmatisch. Afhankelijk van de query zijn er verschillende parameters vereist om de juiste gegevens te verzamelen. Deze parameters omvatten doorgaans:

  • api-version: de versie van de EventStore-API's die u gebruikt
  • StartTimeUtc: definieert het begin van de periode waarin u geïnteresseerd bent in het bekijken van
  • EndTimeUtc: einde van de periode

Naast deze parameters zijn er ook optionele parameters beschikbaar, zoals:

  • timeout: de standaardtime-out van 60 seconden overschrijven voor het uitvoeren van de aanvraagbewerking
  • eventstypesfilter: hiermee kunt u filteren op specifieke gebeurtenistypen
  • ExcludeAnalysisEvents: retourneert geen analyse-gebeurtenissen. EventStore-query's worden standaard geretourneerd met 'analyse'-gebeurtenissen, indien mogelijk. Analyse-gebeurtenissen zijn uitgebreidere operationele kanaal-gebeurtenissen die aanvullende context of informatie bevatten buiten een reguliere Service Fabric-gebeurtenis en meer diepte bieden.
  • SkipCorrelationLookup: zoek niet naar mogelijke gecorreleerde gebeurtenissen in het cluster. De EventStore probeert standaard gebeurtenissen in een cluster te correleren en koppelt uw gebeurtenissen indien mogelijk aan elkaar.

Elke entiteit in een cluster kan query's voor gebeurtenissen zijn. U kunt ook query's uitvoeren op gebeurtenissen voor alle entiteiten van het type. U kunt bijvoorbeeld query's uitvoeren op gebeurtenissen voor een specifiek knooppunt of voor alle knooppunten in uw cluster. De huidige set entiteiten waarvoor u een query kunt uitvoeren op gebeurtenissen is (met de structuur van de query):

  • Cluster: /EventsStore/Cluster/Events
  • Knooppunten: /EventsStore/Nodes/Events
  • Knoop: /EventsStore/Nodes/<NodeName>/$/Events
  • Toepassingen: /EventsStore/Applications/Events
  • Toepassing: /EventsStore/Applications/<AppName>/$/Events
  • Diensten: /EventsStore/Services/Events
  • Dienst: /EventsStore/Services/<ServiceName>/$/Events
  • Partities: /EventsStore/Partitions/Events
  • Verdelen: /EventsStore/Partitions/<PartitionID>/$/Events
  • Replica 's: /EventsStore/Partitions/<PartitionID>/$/Replicas/Events
  • Replica: /EventsStore/Partitions/<PartitionID>/$/Replicas/<ReplicaID>/$/Events

Notitie

Wanneer u naar een toepassing of servicenaam verwijst, hoeft de query het voorvoegsel 'fabric:/' niet op te nemen. Als uw toepassings- of servicenamen een '/' bevatten, schakelt u deze over naar een ~-bestand om de query te laten werken. Als uw toepassing bijvoorbeeld wordt weergegeven als 'fabric:/App1/FrontendApp', zijn uw app-specifieke query's gestructureerd als /EventsStore/Applications/App1~FrontendApp/$/Events. Daarnaast worden statusrapporten voor services weergegeven onder de bijbehorende toepassing, zodat u een query kunt uitvoeren op DeployedServiceHealthReportCreated gebeurtenissen voor de juiste toepassingsentiteit.

Query's uitvoeren op de EventStore via REST API-eindpunten

U kunt de EventStore rechtstreeks opvragen via een REST-eindpunt door aanvragen te verzenden GET naar: <your cluster address>/EventsStore/<entity>/Events/.

Als u bijvoorbeeld query's wilt uitvoeren op alle clusterevenementen tussen 2018-04-03T18:00:00Z en 2018-04-04T18:00:00Z, ziet uw aanvraag er als volgt uit:

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

Dit kan geen gebeurtenissen of de lijst met gebeurtenissen retourneren die worden geretourneerd in 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
  }
]

Hier kunnen we zien dat tussen 2018-04-03T18:00:00Z en 2018-04-04T18:00:00Z, dit cluster de eerste upgrade heeft voltooid toen het voor het eerst opstond, van "CurrentClusterVersion": "0.0.0.0:" tot "TargetClusterVersion": "6.2:1.0", in "OverallUpgradeElapsedTimeInMs": "120196.5212".

Query's uitvoeren op de EventStore via een programma

U kunt ook programmatisch een query uitvoeren op de EventStore via de Service Fabric-clientbibliotheek.

Zodra uw Service Fabric-client is ingesteld, kunt u query's uitvoeren op gebeurtenissen door de EventStore als volgt te openen: sfhttpClient.EventStore.<request>

Hier volgt een voorbeeld van een aanvraag voor alle cluster gebeurtenissen tussen 2018-04-03T18:00:00Z en 2018-04-04T18:00:00Z, via de GetClusterEventListAsync functie.

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);
      }
  }

Voorbeeldscenario's en query's

Hier volgen enkele voorbeelden van hoe u de REST API's van Event Store kunt aanroepen om inzicht te krijgen in de status van uw cluster.

Clusterupgrades:

Als u wilt zien wanneer het cluster de laatste keer is bijgewerkt of dat het cluster vorige week is bijgewerkt, kunt u een query uitvoeren op de API's voor onlangs voltooide upgrades naar uw cluster door een query uit te voeren op de gebeurtenissen 'ClusterUpgradeCompleted' in de 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

Problemen met clusterupgrades:

Als er problemen zijn met een recente clusterupgrade, kunt u ook een query uitvoeren op alle gebeurtenissen voor de clusterentiteit. U ziet verschillende gebeurtenissen, waaronder de start van upgrades en elke UD waarvoor de upgrade is geïmplementeerd. U ziet ook gebeurtenissen voor het punt waarop het terugdraaien is gestart en de bijbehorende statusgebeurtenissen. Dit is de query die u hiervoor zou gebruiken: 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

Wijzigingen in de knooppuntstatus:

Gebruik de volgende query om de status van uw knooppunt in de afgelopen dagen te zien: wanneer knooppunten omhoog of omlaag zijn gegaan, of zijn geactiveerd of gedeactiveerd (door het platform, de chaosservice of vanuit gebruikersinvoer): 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

Toepassingsgebeurtenissen:

U kunt ook uw recente toepassingsimplementaties en upgrades bijhouden. Gebruik de volgende query om alle toepassingsevenementen in uw cluster te bekijken: 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

Historische status voor een toepassing:

Naast het zien van gebeurtenissen in de levenscyclus van toepassingen, wilt u mogelijk ook historische gegevens over de status van een specifieke toepassing bekijken. U kunt dit doen door de naam van de toepassing op te geven waarvoor u de gegevens wilt verzamelen. Gebruik deze query om alle toepassingsstatus gebeurtenissen op te halen: 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. Als u statusgebeurtenissen wilt opnemen die mogelijk zijn verlopen (hun time to live (TTL) zijn verstreken), voegt u deze toe ,ApplicationHealthReportExpired aan het einde van de query om te filteren op twee typen gebeurtenissen.

Historische status voor alle services in 'myApp':

Op dit moment worden statusrapport-gebeurtenissen voor services weergegeven als DeployedServicePackageNewHealthReport gebeurtenissen onder de bijbehorende toepassingsentiteit. Gebruik de volgende query om te zien hoe uw services voor 'App1' zijn uitgevoerd: 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

Herconfiguratie van partitie:

Als u alle partitieverplaatsingen wilt zien die in uw cluster zijn opgetreden, voert u een query uit voor de PartitionReconfigured gebeurtenis. Dit kan u helpen bepalen welke workloads op welk knooppunt op specifieke momenten zijn uitgevoerd, wanneer u problemen in uw cluster diagnosticeert. Hier volgt een voorbeeldquery die dat doet: 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-service:

Er is een gebeurtenis voor wanneer de Chaos-service wordt gestart of gestopt die op clusterniveau wordt weergegeven. Als u het recente gebruik van de Chaos-service wilt zien, gebruikt u de volgende query: 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