Bagikan melalui


Mengajukan kueri EventStore API for peristiwa kluster

Artikel ini membahas cara mengajukan kueri EventStore API yang tersedia dalam Service Fabric versi 6.2 dan yang lebih baru - jika Anda ingin mempelajari layanan EventStore lebih lanjut, lihat ringkasan layanan EventStore. Saat ini, layanan EventStore hanya dapat mengakses data selama 7 hari terakhir (hal ini didasarkan pada kebijakan retensi data diagnostik kluster Anda).

Catatan

EventStore APIs adalah GA dengan Service Fabric versi 6.4 hanya untuk kluster Windows yang berjalan di Azure.

EventStore API dapat diakses secara langsung melalui titik akhir REST atau secara terprogram. Bergantung pada kueri, ada beberapa parameter yang diperlukan untuk mengumpulkan data yang tepat. Parameter ini biasanya mencakup:

  • api-version: versi EventStore API yang Anda gunakan
  • StartTimeUtc: menentukan awal periode yang ingin Anda lihat
  • EndTimeUtc: akhir periode waktu

Selain parameter ini, ada parameter opsional yang juga tersedia, seperti:

  • timeout: mengganti batas waktu default 60 detik untuk melakukan operasi permintaan
  • eventstypesfilter: hal ini memberi Anda opsi untuk memfilter jenis peristiwa tertentu
  • ExcludeAnalysisEvents: tidak menampilkan peristiwa 'Analisis'. Secara default, kueri EventStore akan ditampilkan dengan peristiwa "analisis" jika dimungkinkan. Peristiwa analisis adalah peristiwa saluran operasional multimedia yang berisi konteks atau informasi tambahan selain peristiwa Service Fabric reguler dan menyediakan pemahaman yang lebih mendalam.
  • SkipCorrelationLookup: tidak mencari potensi peristiwa yang berkorelasi dalam kluster. Secara default, EventStore akan mencoba untuk menghubungkan peristiwa dalam seluruh kluster, dan menautkan peristiwa Anda bersama-sama jika memungkinkan.

Setiap entitas dalam kluster dapat menjadi kueri untuk peristiwa. Anda juga dapat mengajukan kueri peristiwa untuk semua entitas jenis. Misalnya, Anda dapat mengajukan kueri peristiwa untuk simpul tertentu, atau untuk semua simpul dalam kluster Anda. Kumpulan entitas saat ini tempat Anda dapat mengajukan kueri peristiwa (tentang cara kueri akan disusun):

  • Kluster: /EventsStore/Cluster/Events
  • Simpul: /EventsStore/Nodes/Events
  • Simpul: /EventsStore/Nodes/<NodeName>/$/Events
  • Aplikasi: /EventsStore/Applications/Events
  • Aplikasi: /EventsStore/Applications/<AppName>/$/Events
  • Layanan: /EventsStore/Services/Events
  • Layanan: /EventsStore/Services/<ServiceName>/$/Events
  • Partisi: /EventsStore/Partitions/Events
  • Partisi: /EventsStore/Partitions/<PartitionID>/$/Events
  • Replika: /EventsStore/Partitions/<PartitionID>/$/Replicas/Events
  • Replika: /EventsStore/Partitions/<PartitionID>/$/Replicas/<ReplicaID>/$/Events

Catatan

Saat merujuk nama aplikasi atau layanan, kueri tidak perlu menyertakan awalan "fabric:/". Selain itu, jika nama aplikasi atau layanan Anda memiliki "/" di dalamnya, alihkan ke "~" agar kueri tetap berfungsi. Misalnya, jika aplikasi Anda muncul sebagai "fabric:/App1/FrontendApp", kueri khusus aplikasi Anda akan disusun sebagai /EventsStore/Applications/App1~FrontendApp/$/Events. Selain itu, laporan kesehatan untuk layanan hari ini muncul di bagian aplikasi yang sesuai, sehingga Anda akan mengajukan kueri untuk peristiwa DeployedServiceHealthReportCreated untuk entitas aplikasi yang tepat.

Mengajukan kueri EventStore melalui titik akhir REST API

Anda dapat mengajukan kueri EventStore secara langsung melalui titik akhir REST, dengan membuat permintaan GET ke: <your cluster address>/EventsStore/<entity>/Events/.

Misalnya, untuk mengajukan kueri semua peristiwa Kluster antara 2018-04-03T18:00:00Z dan 2018-04-04T18:00:00Z, permintaan Anda akan terlihat seperti:

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

Ini tidak menampilkan peristiwa atau daftar peristiwa yang ditampilkan dalam 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
  }
]

Di sini kita dapat melihat bahwa antara 2018-04-03T18:00:00Z dan 2018-04-04T18:00:00Z, kluster ini berhasil menyelesaikan peningkatan pertamanya saat pertama kali berdiri, dari "CurrentClusterVersion": "0.0.0.0:" ke "TargetClusterVersion": "6.2:1.0", dalam "OverallUpgradeElapsedTimeInMs": "120196.5212".

Mengajukan kueri EventStore secara terprogram

Anda juga dapat meminta kueri EventStore secara terprogram, melalui pustaka klien Service Fabric.

Setelah menyiapkan Klien Service Fabric, Anda dapat meminta kueri peristiwa dengan mengakses EventStore seperti ini: sfhttpClient.EventStore.<request>

Berikut adalah contoh permintaan untuk semua peristiwa kluster antara 2018-04-03T18:00:00Z dan 2018-04-04T18:00:00Z, melalui fungsi 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();

Berikut adalah contoh lain yang meminta kueri untuk kesehatan kluster dan semua peristiwa simpul pada bulan September 2018 dan mencetaknya.

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

Contoh skenario dan kueri

Berikut beberapa contoh tentang cara memanggil Event Store REST API untuk memahami status kluster Anda.

Peningkatan kluster:

Untuk melihat kapan terakhir kali kluster Anda berhasil atau mencoba untuk ditingkatkan minggu lalu, Anda dapat mengajukan kueri API untuk peningkatan yang baru-baru ini diselesaikan ke kluster Anda, dengan mengajukan kueri peristiwa "ClusterUpgradeCompleted" di 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

Masalah peningkatan kluster:

Demikian pula, jika ada masalah dengan peningkatan kluster baru-baru ini, Anda dapat mengajukan kueri semua peristiwa untuk entitas kluster. Anda akan melihat berbagai peristiwa, termasuk inisiasi peningkatan dan setiap UD yang peningkatannya berhasil diluncurkan. Anda juga akan melihat peristiwa untuk titik saat pemutaran kembali dimulai dan peristiwa kesehatan yang sesuai. Berikut adalah kueri yang akan Anda gunakan untuk ini: 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

Perubahan status simpul:

Untuk melihat perubahan status simpul Anda selama beberapa hari terakhir - saat simpul naik atau turun, atau diaktifkan atau dinonaktifkan (baik oleh platform, layanan kekacauan, atau dari input pengguna) - gunakan kueri berikut: 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

Peristiwa aplikasi:

Anda juga dapat melacak penyebaran dan peningkatan aplikasi terbaru. Gunakan kueri berikut untuk melihat semua peristiwa aplikasi dalam kluster Anda: 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

Kesehatan historis untuk aplikasi:

Selain hanya melihat peristiwa siklus hidup aplikasi, sebaiknya Anda juga melihat data historis tentang kesehatan aplikasi tertentu. Anda dapat melakukan ini dengan menentukan nama aplikasi yang ingin Anda kumpulkan datanya. Gunakan kueri ini untuk mendapatkan semua peristiwa kesehatan aplikasi: 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. Jika Anda ingin menyertakan peristiwa kesehatan yang mungkin telah kedaluwarsa (melewati waktu untuk online (TTL)), tambahkan ,ApplicationHealthReportExpired ke akhir kueri untuk memfilter dua jenis peristiwa.

Kesehatan historis untuk semua layanan dalam "myApp":

Saat ini, peristiwa laporan kesehatan untuk layanan muncul sebagai peristiwa DeployedServicePackageNewHealthReport di bagian entitas aplikasi yang sesuai. Untuk melihat performa layanan Anda untuk "App1", gunakan kueri berikut: 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

Konfigurasi ulang partisi:

Untuk melihat semua gerakan partisi yang terjadi dalam kluster Anda, ajukan kueri untuk peristiwa PartitionReconfigured. Tindakan dapat membantu Anda mencari tahu beban kerja yang berjalan pada simpul mana pada waktu tertentu, saat mendiagnosis masalah dalam kluster Anda. Berikut adalah contoh kueri yang melakukannya: 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

Layanan kekacauan:

Ada peristiwa ketika layanan Kekacauan dimulai atau dihentikan yang terekspos di tingkat kluster. Untuk melihat penggunaan layanan Kekacauan baru-baru ini, gunakan kueri berikut: 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