可观察性

使用 Micrometer 的可观察性支持 在 Spring for GraphQL 中直接进行仪器化。这为 GraphQL 请求和“非平凡”数据获取操作提供了指标和跟踪。由于 GraphQL 引擎在传输层之上运行,因此您还应该期望来自传输的观察(如果 Spring Framework 支持)。

只有在应用程序中配置了 ObservationRegistry 时才会发布观察结果。您可以了解有关在 Spring Boot 中配置可观察性基础设施的更多信息。如果您想自定义使用 GraphQL 观察结果生成的元数据,您可以直接在仪器化上配置自定义约定。如果您的应用程序使用的是 Spring Boot,则以 bean 的形式贡献自定义约定是首选方法。

服务器请求仪器化

GraphQL 服务器请求观察结果使用名称 "graphql.request" 为传统和 Reactive 应用程序以及所有支持的传输创建。此仪器化假设任何父观察结果必须作为当前观察结果使用众所周知的 "micrometer.observation" 键设置在 GraphQL 上下文中。对于跨网络边界的跟踪传播,传输级别的单独仪器化必须负责。在 HTTP 的情况下,Spring Framework 具有专门的仪器化来处理跟踪传播

应用程序需要在应用程序中配置 org.springframework.graphql.observation.GraphQlObservationInstrumentation 仪器化。默认情况下,它使用 org.springframework.graphql.observation.DefaultExecutionRequestObservationConvention,由 ExecutionRequestObservationContext 支持。

默认情况下,将创建以下 KeyValues

表 1. 低基数键

名称

描述

graphql.operation (必需)

GraphQL 操作名称。

graphql.outcome (必需)

GraphQL 请求的结果。

graphql.operation KeyValue 将使用提供的查询的自定义名称,或者操作的标准名称(如果不存在)("query""mutation""subscription")。graphql.outcome KeyValue 将在发送有效 GraphQL 响应时为 "SUCCESS",在无法解析请求时为 "REQUEST_ERROR",或者在无法生成有效 GraphQL 响应时为 "INTERNAL_ERROR"

表 2. 高基数键

名称

描述

graphql.execution.id (必填)

GraphQL 请求的 graphql.execution.ExecutionId

Spring for GraphQL 还为服务器请求观察贡献事件。 Micrometer 观察事件 通常在跟踪中作为跨度注释处理。 此检测将记录在 GraphQL 响应中列出的错误作为事件。

表 3. 观察事件

名称

上下文名称

GraphQL 错误类型,例如 InvalidSyntax

完整的 GraphQL 错误消息,例如 "Invalid syntax with offending token 'invalid'…​"

数据获取器检测

GraphQL 数据获取器观察使用名称 "graphql.datafetcher" 创建,仅针对被视为“非平凡”的数据获取操作(Java 对象上的属性获取是平凡操作)。 应用程序需要在其应用程序中配置 org.springframework.graphql.observation.GraphQlObservationInstrumentation 检测。 它默认使用 org.springframework.graphql.observation.DefaultDataFetcherObservationConvention,由 DataFetcherObservationContext 支持。

默认情况下,将创建以下 KeyValues

表 4. 低基数键

名称

描述

graphql.error.type (必填)

数据获取错误的类名

graphql.field.name (必填)

正在获取的字段的名称。

graphql.outcome (必需)

GraphQL 数据获取操作的结果,“SUCCESS” 或 “ERROR”。

表 5. 高基数键

名称

描述

graphql.field.path (必填)

正在获取的字段的路径(例如,“/bookById”)。