可觀測性

使用 Micrometer 的可觀測性支援 直接在 Spring for GraphQL 中進行檢測。這為 GraphQL 請求和「非平凡」資料擷取操作啟用指標和追蹤。由於 GraphQL 引擎在傳輸層之上運作,如果 Spring Framework 支援,您也應該預期來自傳輸的可觀察性

只有在應用程式中配置了 ObservationRegistry 時,才會發布觀察。您可以進一步了解在 Spring Boot 中設定可觀測性基礎架構。如果您想自訂 GraphQL 觀察產生的中繼資料,您可以直接在檢測上設定自訂慣例。如果您的應用程式使用 Spring Boot,則將自訂慣例作為 bean 貢獻是較佳方式。

伺服器請求檢測

GraphQL 伺服器請求觀察以名稱 "graphql.request" 建立,適用於傳統和反應式應用程式以及所有支援的傳輸。此檢測假設任何父觀察都必須設定為 GraphQL 環境定義中的目前觀察,並使用眾所周知的 "micrometer.observation" 鍵。對於跨網路邊界的追蹤傳播,必須由傳輸層級的個別檢測負責。在 HTTP 的情況下,Spring Framework 有專門的檢測來處理追蹤傳播

應用程式需要在其應用程式中配置 org.springframework.graphql.observation.GraphQlObservationInstrumentation 檢測。它預設使用 org.springframework.graphql.observation.DefaultExecutionRequestObservationConvention,並由 ExecutionRequestObservationContext 支援。

預設情況下,會建立以下 KeyValue

表 1. 低基數鍵

名稱

描述

graphql.operation (必要)

GraphQL 操作名稱。

graphql.outcome (必要)

GraphQL 請求的結果。

graphql.operation KeyValue 將使用提供的查詢的自訂名稱,或操作的標準名稱(如果沒有)("query""mutation""subscription")。graphql.outcome KeyValue 將為

  • "SUCCESS" 如果已傳送有效的 GraphQL 回應且不包含任何錯誤

  • "REQUEST_ERROR" 如果請求無法解析,或者如果回應包含錯誤(沒有一個錯誤是 org.springframework.graphql.execution.ErrorType.INTERNAL_ERROR 類型)

  • "INTERNAL_ERROR" 如果無法產生有效的 GraphQL 回應,或者如果回應包含至少一個 org.springframework.graphql.execution.ErrorType.INTERNAL_ERROR 類型的錯誤

表 2. 高基數鍵

名稱

描述

graphql.execution.id (必要)

GraphQL 請求的 graphql.execution.ExecutionId

Spring for GraphQL 也為伺服器請求觀察貢獻事件。Micrometer 觀察事件通常作為追蹤中的 span 註解處理。此檢測將 GraphQL 回應中列出的錯誤記錄為事件。

表 3. 觀察事件

名稱

上下文名稱

GraphQL 錯誤類型,例如 InvalidSyntax

完整的 GraphQL 錯誤訊息,例如 "Invalid syntax with offending token 'invalid'…​"

DataFetcher 檢測

GraphQL DataFetcher 觀察以名稱 "graphql.datafetcher" 建立,僅適用於被認為是「非平凡」的資料擷取操作(在 Java 物件上擷取屬性是一種平凡的操作)。應用程式需要在其應用程式中配置 org.springframework.graphql.observation.GraphQlObservationInstrumentation 檢測。它預設使用 org.springframework.graphql.observation.DefaultDataFetcherObservationConvention,並由 DataFetcherObservationContext 支援。

預設情況下,會建立以下 KeyValue

表 4. 低基數鍵

名稱

描述

graphql.error.type (必要)

資料擷取錯誤的類別名稱

graphql.field.name (必要)

正在擷取的欄位名稱。

graphql.outcome (必要)

GraphQL 資料擷取操作的結果,「成功」或「錯誤」。

表 5. 高基數鍵

名稱

描述

graphql.field.path (必要)

正在擷取的欄位的路徑(例如,「/bookById」)。