Dotazování rozhraní API EventStore pro události clusteru

Tento článek popisuje, jak dotazovat rozhraní EVENTStore API, která jsou k dispozici ve službě Service Fabric verze 6.2 a novější – pokud chcete získat další informace o službě EventStore, podívejte se na přehled služby EventStore. V současné době může služba EventStore přistupovat k datům pouze za posledních 7 dnů (to je založeno na zásadách uchovávání diagnostických dat vašeho clusteru).

Poznámka:

Rozhraní API EventStore jsou obecně dostupná pro Service Fabric verze 6.4 pouze pro clustery s Windows spuštěné v Azure.

K rozhraním API EventStore je možné přistupovat přímo prostřednictvím koncového bodu REST nebo prostřednictvím kódu programu. V závislosti na dotazu existuje několik parametrů, které jsou potřeba ke shromáždění správných dat. Mezi tyto parametry obvykle patří:

  • api-version: Verze rozhraní API EventStore, která používáte
  • StartTimeUtc: definuje začátek období, které vás zajímá.
  • EndTimeUtc: konec časového období

Kromě těchtoparametrůch

  • timeout: Přepsat výchozí časový limit 60 sekund pro provedení operace požadavku
  • eventstypesfilter: Díky tomu můžete filtrovat konkrétní typy událostí.
  • ExcludeAnalysisEvents: Nevrací události Analýzy. Ve výchozím nastavení se dotazy EventStore vrátí s událostmi analýzy, pokud je to možné. Události analýzy jsou bohatší události operačního kanálu, které obsahují další kontext nebo informace nad rámec běžné události Service Fabric a poskytují větší hloubku.
  • SkipCorrelationLookup: Nevyhledávejte potenciální korelované události v clusteru. Ve výchozím nastavení se EventStore pokusí korelovat události napříč clusterem a pokud je to možné, propojí události dohromady.

Každá entita v clusteru může být dotazem na události. Můžete také zadat dotaz na události pro všechny entity typu. Můžete se například dotazovat na události pro konkrétní uzel nebo pro všechny uzly v clusteru. Aktuální sada entit, pro které se můžete dotazovat na události, je (s tím, jak by byl dotaz strukturovaný):

  • Shluk: /EventsStore/Cluster/Events
  • Uzly: /EventsStore/Nodes/Events
  • Uzel: /EventsStore/Nodes/<NodeName>/$/Events
  • Aplikace: /EventsStore/Applications/Events
  • Aplikace: /EventsStore/Applications/<AppName>/$/Events
  • Služby: /EventsStore/Services/Events
  • Služba: /EventsStore/Services/<ServiceName>/$/Events
  • Oddíly: /EventsStore/Partitions/Events
  • Oddíl: /EventsStore/Partitions/<PartitionID>/$/Events
  • Repliky: /EventsStore/Partitions/<PartitionID>/$/Replicas/Events
  • Replika: /EventsStore/Partitions/<PartitionID>/$/Replicas/<ReplicaID>/$/Events

Poznámka:

Při odkazování na název aplikace nebo služby nemusí dotaz obsahovat předponu fabric:/. Pokud v nich názvy aplikací nebo služeb mají navíc "/", přepněte ho na "~", aby dotaz fungoval. Pokud se například vaše aplikace zobrazí jako prostředky infrastruktury:/App1/FrontendApp, budou konkrétní dotazy vaší aplikace strukturované jako /EventsStore/Applications/App1~FrontendApp/$/Events. Kromě toho se sestavy stavu pro služby dnes zobrazují v odpovídající aplikaci, takže byste se mohli dotazovat na DeployedServiceHealthReportCreated události pro správnou entitu aplikace.

Dotazování eventStore prostřednictvím koncových bodů rozhraní REST API

EventStore můžete dotazovat přímo prostřednictvím koncového bodu REST, a to provedením GET požadavků na: <your cluster address>/EventsStore/<entity>/Events/.

Například pro dotazování na všechny události clusteru mezi 2018-04-03T18:00:00Z a 2018-04-04T18:00:00Z, váš požadavek by vypadal takto:

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

To může vrátit žádné události nebo seznam událostí vrácených ve formátu 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
  }
]

Zde vidíme, že mezi 2018-04-03T18:00:00Z a 2018-04-04T18:00:00Z, tento cluster úspěšně dokončil svůj první upgrade, když byl poprvé vystál, od "CurrentClusterVersion": "0.0.0.0:" do "TargetClusterVersion": "6.2:1.0", v "OverallUpgradeElapsedTimeInMs": "120196.5212".

Dotazování EventStore prostřednictvím kódu programu

EventStore můžete také dotazovat prostřednictvím kódu programu prostřednictvím klientské knihovny Service Fabric.

Jakmile nastavíte klienta Service Fabric, můžete se na události dotazovat tak, že se dostanete k úložišti událostí takto: sfhttpClient.EventStore.<request>

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 GetClusterEventListAsync funkce.

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

Ukázkové scénáře a dotazy

Tady je několik příkladů, jak můžete volat rozhraní REST API služby Event Store, abyste porozuměli stavu clusteru.

Upgrady clusteru:

Pokud chcete zjistit, kdy se váš cluster naposledy úspěšně nebo pokusil o upgrade minulý týden, můžete dotazovat rozhraní API na nedávno dokončené upgrady clusteru dotazováním na události ClusterUpgradeCompleted v 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

Problémy s upgradem clusteru:

Podobně pokud došlo k problémům s nedávným upgradem clusteru, můžete se dotazovat na všechny události entity clusteru. Uvidíte různé události, včetně inicializace upgradů a jednotlivých UD, pro které se upgrade úspěšně prošel. Zobrazí se také události pro bod, kdy se spustilo vrácení zpět a odpovídající události stavu. Tady je dotaz, který byste použili k tomuto: 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

Změny stavu uzlu:

Pokud chcete zobrazit změny stavu uzlu za posledních několik dní – když se uzly zhroumaly nebo se aktivovaly nebo deaktivovaly (platforma, služba chaosu nebo vstup uživatele) – použijte následující dotaz: 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

Události aplikací:

Můžete také sledovat nedávná nasazení a upgrady aplikací. Pomocí následujícího dotazu zobrazíte všechny události aplikace v clusteru: 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

Historický stav aplikace:

Kromě pouhého zobrazení událostí životního cyklu aplikace můžete chtít také zobrazit historická data o stavu konkrétní aplikace. Můžete to provést zadáním názvu aplikace, pro kterou chcete shromažďovat data. Tento dotaz použijte k získání všech událostí stavu aplikace: 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. Pokud chcete zahrnout události stavu, jejichž platnost vypršela (vypršela doba jejich živého provozu), přidejte ,ApplicationHealthReportExpired na konec dotazu a vyfiltrujte dva typy událostí.

Historický stav všech služeb v myAppu:

V současné době se události sestavy stavu pro služby zobrazují jako DeployedServicePackageNewHealthReport události v rámci odpovídající entity aplikace. Pokud chcete zjistit, jak vaše služby pro "App1" dělaly, použijte následující dotaz: 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

Rekonfigurace oddílů:

Pokud chcete zobrazit všechny pohyby oddílů, ke kterým došlo v clusteru, zadejte dotaz na PartitionReconfigured událost. To vám může pomoct zjistit, jaké úlohy běžely v konkrétních časech na kterém uzlu při diagnostice problémů ve vašem clusteru. Tady je ukázkový dotaz, který to dělá: 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

Služba Chaos:

Existuje událost, kdy je služba Chaos spuštěna nebo zastavena, která je vystavena na úrovni clusteru. Pokud chcete zobrazit nedávné použití služby Chaos, použijte následující dotaz: 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