Monitoring GraphQL
追蹤 GraphQL 作業
Instana 提供 GraphQL 查詢、突變及訂閱的追蹤。 目前 Go、 Ruby、 Node.js 及 Java 執行時期支援 GraphQL 追蹤。
對於每一個作業,我們會擷取
- 作業類型 (
query、mutation或subscription-update) , - 作業名稱 (如果有提供的話) ,
- 所有涉及的 物件類型,
- 用於每一個物件類型的 引數 ,以及
- 選取的每一個物件類型 欄位 。
請注意,我們只會擷取引數索引鍵,但不會擷取所提供的值。
讓我們以下列查詢作為範例:
query GetUsers {
Users(active: true) {
id
email
address
}
Orders {
items
}
}
對於此查詢,我們將擷取:
| 呼叫標籤 | 值 |
|---|---|
| call.graphql.operationType | query |
| call.graphql.operationName | GetUsers |
| call.graphql.arguments | Users.active |
| call.graphql.fields | Users.id, Users.email, Users.address, Orders.items |
擷取的值會顯示在通話詳細資料中。 這有助於立即查看哪些 GraphQL 解析器涉及處理 GraphQL 作業,讓您易於識別回應緩慢的可能原因。
這些標籤也可以用來在 分析視圖中搜尋呼叫和追蹤資料,方法是透過「其他」按鈕來新增過濾器。 例如,若要搜尋涉及 Orders 物件類型的所有 GraphQL 作業,只需按一下「其他」,即可針對呼叫標籤 call.graphql.fields 包含 Orders的呼叫新增過濾器。 或者,在將標籤設為 call.graphql.fields之後,請檢查「值」下拉清單中的建議選項,以檢查選取的時間範圍中所要求的物件類型及欄位。 另一個使用案例可能是尋找存取特定欄位的所有呼叫,或透過新增 call.graphql.fields 或 call.graphql.arguments 的 "contains" 過濾器,並具有有問題的欄位/引數名稱來使用特定引數。
追蹤 GraphQL 訂閱
GraphQL 用戶端可以透過 GraphQL 訂閱,要求 GraphQL 伺服器通知他們基礎資料模型中的變更。
每當用戶端由於其其中一個作用中 GraphQL 訂閱而收到更新時,我們會以從 GraphQL 伺服器對用戶端的呼叫來追蹤此訂閱更新。 也就是說, Instana 著重於分散式追蹤訂閱,以記錄突變對伺服器和受影響訂閱者所產生的 影響 。

代表訂閱更新項目的呼叫會以 subscription-update 作為 call.graphql.operationType 標籤的值。 為了簡化分析特定訂閱的影響,所有訂閱更新呼叫都會分組在 GraphQL Subscribers 服務中,每一個訂閱類型都以個別端點表示。