針對叢集事件查詢 EventStore API
本文內容涵蓋如何查詢於 Service Fabric 6.2 版和更新版本中提供的 EventStore API。如果您想要深入了解 EventStore 服務,請參閱 EventStore 服務概觀。 目前,EventStore 服務只能存取過去 7 天 (這是以您叢集的診斷資料保留原則為基礎) 的資料。
注意
EventStore API 從 Service Fabric 6.4 版起正式推出,僅適用於在 Azure 上執行的 Windows 叢集。
EventStore API 可以直接透過 REST 端點存取,或以程式設計方式存取。 視查詢而定,需要有幾個參數才能收集到正確資料。 這些參數通常包括:
api-version
:您使用的 EventStore API 版本StartTimeUtc
:定義想查詢期間的開始時間EndTimeUtc
:查詢期間的結束時間
除了這些參數之外,還有幾個選擇性參數可用,例如:
timeout
:覆寫用於執行要求作業的預設 60 秒逾時eventstypesfilter
:這可以提供篩選特定事件類型的選項ExcludeAnalysisEvents
:不要傳回「分析」事件。 根據預設,EventStore 查詢會在可能的情況下傳回「分析」事件。 分析事件為資訊較豐富的操作通道事件,其中包含比一般 Service Fabric 事件更廣泛的其他內容或資訊,並提供更深入的資訊。SkipCorrelationLookup
:不查詢叢集中可能的相關聯事件。 根據預設,EventStore 將會嘗試在跨叢集事件之間建立關聯,並盡可能將您的事件連結在一起。
您可以對叢集中的每個實體查詢事件。 您也可以針對某一類型的所有實體查詢事件。 例如,您可以查詢特定節點的事件,或叢集中所有節點的事件。 目前您可以查詢事件的實體集合為 (包含查詢的結構方式):
- 叢集:
/EventsStore/Cluster/Events
- 多個節點:
/EventsStore/Nodes/Events
- 單一節點:
/EventsStore/Nodes/<NodeName>/$/Events
- 多個應用程式:
/EventsStore/Applications/Events
- 單一應用程式:
/EventsStore/Applications/<AppName>/$/Events
- 多個服務:
/EventsStore/Services/Events
- 服務:
/EventsStore/Services/<ServiceName>/$/Events
- 多個分割區:
/EventsStore/Partitions/Events
- 單一分割區:
/EventsStore/Partitions/<PartitionID>/$/Events
- 多個複本:
/EventsStore/Partitions/<PartitionID>/$/Replicas/Events
- 單一複本:
/EventsStore/Partitions/<PartitionID>/$/Replicas/<ReplicaID>/$/Events
注意
參考應用程式或服務名稱時,查詢不需要包括 "fabric:/" 前置詞。 此外,如果您的應用程式或服務名稱包含 "/",請將它變更為 "~",查詢才能運作。 例如,如果您的應用程式顯示為 "fabric:/App1/FrontendApp",應用程式特定查詢的結構就會是 /EventsStore/Applications/App1~FrontendApp/$/Events
。
此外,現今的服務健康情況報表會顯示在相對應的應用程式底下,因此您可以查詢正確應用程式實體的 DeployedServiceHealthReportCreated
事件。
透過 REST API 端點查詢 EventStore
您可以將 GET
要求設為 <your cluster address>/EventsStore/<entity>/Events/
,以直接透過 REST 端點查詢 EventStore。
例如,若要查詢 2018-04-03T18:00:00Z
和 2018-04-04T18:00:00Z
之間的所有叢集事件,您的要求看起來會像這樣:
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
這可能不會傳回任何事件,或以 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
}
]
我們可以看到在 2018-04-03T18:00:00Z
和 2018-04-04T18:00:00Z
之間,此叢集在第一次啟動時便順利完成第一次升級:於 "OverallUpgradeElapsedTimeInMs": "120196.5212"
的時間內,從 "CurrentClusterVersion": "0.0.0.0:"
升級為 "TargetClusterVersion": "6.2:1.0"
。
以程式設計方式查詢 EventStore
您也能透過 Service Fabric 用戶端程式庫,以程式設計方式查詢 EventStore。
在您設定好 Service Fabric 用戶端之後,就可以透過以下方式存取 EventStore 以查詢事件:sfhttpClient.EventStore.<request>
以下是一個透過 GetClusterEventListAsync
函式,要求 2018-04-03T18:00:00Z
和 2018-04-04T18:00:00Z
之間所有叢集事件的範例要求。
var sfhttpClient = ServiceFabricClientFactory.Create(clusterUrl, settings);
var clstrEvents = sfhttpClient.EventsStore.GetClusterEventListAsync(
"2018-04-03T18:00:00Z",
"2018-04-04T18:00:00Z")
.GetAwaiter()
.GetResult()
.ToList();
以下是另一個範例,該範例會查詢叢集健康情況以及 2018 年 9 月的所有節點事件,並將其列印出來。
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);
}
}
範例案例和查詢
以下是幾個範例,說明您可以如何呼叫 Event Store REST API 以了解叢集狀態。
叢集升級:
若要查看您的叢集在上一週最後一次成功升級或嘗試升級的時間,您可以透過查詢 EventStore 中的 "ClusterUpgradeCompleted" 事件,來查詢最近完成叢集升級的 API: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
叢集升級問題:
同樣地,如果最近的叢集升級出現問題,您可以查詢叢集實體的所有事件。 您將會看到各種不同事件,包括升級的起始和升級成功完成的每個 UD。 您也將會看到復原開始時間點的事件和相對應的健康情況事件。 以下是用於完成此動作的查詢: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
節點狀態變更:
若要查看您節點狀態於過去幾天的變更,例如節點啟動或停止,或是被啟用或停用 (透過平台、混沌服務或使用者輸入),請使用以下查詢: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
應用程式事件:
您也可以追蹤最近的應用程式部署和升級。 使用以下查詢來查看您叢集中的所有應用程式事件: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
應用程式的健康情況歷程記錄:
除了單純查看應用程式生命週期事件之外,您也可以查看特定應用程式之健康情況的歷程記錄資料。 您可以透過指定要收集其資料的應用程式名稱來達到此目的。 使用此查詢來取得所有應用程式健康情況事件: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
.
如果您想要包括可能已經過期 (超出其存留時間 (TTL)) 的健康狀態事件,請將 ,ApplicationHealthReportExpired
新增至查詢的結尾處,以篩選兩種類型的事件。
"myApp" 中所有服務的健康情況歷程記錄:
目前,服務的健康情況報表事件會在相對應應用程式實體底下顯示為 DeployedServicePackageNewHealthReport
事件。 若要查看您的服務如何為 "App1" 執行作業,請使用以下查詢: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
分割區重新設定:
若要查看您叢集中所發生的所有分割區移動,請查詢 PartitionReconfigured
事件。 這可以協助您在叢集中診斷問題時,找出有哪些工作負載於哪些特定時間在哪一個節點上執行。 以下是能夠達到上述目的的查詢範例: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
混沌服務:
有一個能在混沌服務啟動或停止時,於叢集層級公開的事件。 若要查看近期使用混沌服務的資訊,請使用以下查詢: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