Dotazování rozhraní EVENTStore API 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, přečtěte si přehled služby EventStore. V současné době má služba EventStore přístup k datům pouze za posledních 7 dnů (je to založeno na zásadách uchovávání diagnostických dat vašeho clusteru).

Poznámka

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

K rozhraním API eventstoru je možné přistupovat přímo prostřednictvím koncového bodu REST nebo programově. V závislosti na dotazu existuje několik parametrů, které se vyžadují ke shromáždění správných dat. Mezi tyto parametry obvykle patří:

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

Kromě těchto parametrů jsou k dispozici také volitelné parametry, například:

  • timeout: Přepište výchozí časový limit 60 sekund pro provedení operace požadavku.
  • eventstypesfilter: Získáte tak možnost 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 provozních kanálů, které obsahují další kontext nebo informace nad rámec běžné události Service Fabric a poskytují větší hloubku.
  • SkipCorrelationLookup: Nevyhledáte potenciální korelované události v clusteru. Ve výchozím nastavení se EventStore pokusí korelovat události v clusteru a propojit události dohromady, pokud je to možné.

Každá entita v clusteru může být dotazem na události. Můžete se také dotazovat na události pro všechny entity tohoto 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, u kterých se můžete dotazovat na události, je (s tím, jak by byl dotaz strukturovaný):

  • Clusteru: /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žby: /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 prostředek infrastruktury:/. Předponu. Pokud navíc názvy vaší aplikace nebo služby obsahují "/", přepněte ho na "~", aby dotaz fungoval. Pokud se například vaše aplikace zobrazí jako "fabric:/App1/FrontendApp", dotazy specifické pro vaši aplikaci by byly strukturované jako /EventsStore/Applications/App1~FrontendApp/$/Events. Kromě toho se sestavy stavu služeb dnes zobrazují v odpovídající aplikaci, takže byste se dotazovali na DeployedServiceHealthReportCreated události pro správnou entitu aplikace.

Dotazování úložiště událostí prostřednictvím koncových bodů rozhraní REST API

Do úložiště událostí se můžete dotazovat přímo prostřednictvím koncového bodu REST tak, že odešlete GET požadavky na: <your cluster address>/EventsStore/<entity>/Events/.

Například pokud chcete dotazovat 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

Tato možnost může vrátit buď žádné události, nebo seznam událostí vrácený v kódu 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
  }
]

Tady vidíme, že mezi 2018-04-03T18:00:00Z a 2018-04-04T18:00:00Ztento cluster úspěšně dokončil svůj první upgrade, když se poprvé postavil z "CurrentClusterVersion": "0.0.0.0:" na "TargetClusterVersion": "6.2:1.0", v "OverallUpgradeElapsedTimeInMs": "120196.5212".

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

EventStore můžete dotazovat také programově prostřednictvím klientské knihovny Service Fabric.

Jakmile budete mít klienta Service Fabric nastaveného, můžete se na události dotazovat pomocí přístupu k úložišti událostí následujícím způsobem: 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:00Zprostř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 úložiště událostí, abyste porozuměli stavu clusteru.

Upgrady clusteru:

Pokud chcete zjistit čas posledního úspěšného nebo pokusu o upgrade clusteru minulý týden, můžete se dotazem na události ClusterUpgradeCompleted v úložišti událostí dotazem na události ClusterUpgradeCompleted dotázat rozhraní API na nedávno dokončené upgrady clusteru: 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. Zobrazí se různé události, včetně inicializace upgradů a jednotlivých UD, pro které se upgrade úspěšně provedl. Zobrazí se také události pro bod, ve kterém bylo zahájeno vrácení zpět, a odpovídající události stavu. Tady je dotaz, který byste k tomu použili: 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 uzlů v posledních několika dnech – kdy se uzly aktivovaly nebo deaktivovaly (platformou, službou chaosu nebo uživatelským vstupem) – 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 aplikace:

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 také chtít 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. Pomocí tohoto dotazu získejte všechny události 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 možná vypršela (zmizela hodnota TTL (Time to Live), přidejte na konec dotazu a vyfiltrujte ,ApplicationHealthReportExpired dva typy událostí.

Historický stav všech služeb v aplikaci myApp:

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 si vaše služby v app1 vede, 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ílu:

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

Při spuštění nebo zastavení služby Chaos existuje událost, která je zpřístupněna 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