Observability

Observability support with Micrometer直接用 Spring for GraphQL 中的工具记录。这同时支持度量标准和 GraphQL 请求的跟踪以及“非平凡”数据提取操作。由于 GraphQL 引擎运行在传输层之上,你也应该 预期传输的观察结果(如果在 Spring Framework 中受支持)。 仅在应用程序中配置 `ObservationRegistry`时才会发布观察结果。你可以详细了解 配置 Spring Boot 中的可观察性基础设施。如果你想自定义与 GraphQL 观察结果一起产生的元数据,则可以直接在工具上 配置自定义惯例。如果你的应用程序正在使用 Spring Boot,则首选方式是将自定义惯例作为一个 bean 贡献出来。

Server Requests instrumentation

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

应用程序需要在其应用程序中配置 org.springframework.graphql.observation.GraphQlObservationInstrumentation 检测机制。它默认使用 org.springframework.graphql.observation.DefaultExecutionRequestObservationConvention,由 ExecutionRequestObservationContext 支持。

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

Table 1. Low cardinality Keys

Name

Description

graphql.operation (required)

GraphQL Operation name.

graphql.outcome (required)

GraphQL 请求的结果。

graphql.operation KeyValue 将使用提供的查询的自定义名称,如果没有则使用 the standard name for the operation"query""mutation""subscription")。如果已发送有效的 GraphQL 响应,则 graphql.outcome KeyValue 将为 "SUCCESS";如果无法解析请求,则为 "REQUEST_ERROR";如果无法生成有效的 GraphQL 响应,则为 "INTERNAL_ERROR"

Table 2. High cardinality Keys

Name

Description

graphql.execution.id (required)

GraphQL 请求的 graphql.execution.ExecutionId

Spring for GraphQL 还为服务器请求观察结果提供事件。 Micrometer Observation Events 通常作为跟踪中的跨度注释进行处理。此工具记录在 GraphQL 响应中列出的错误作为事件。

Table 3. Observation Events

Name

Contextual Name

GraphQL 错误类型,例如 InvalidSyntax

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

DataFetcher instrumentation

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

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

Table 4. Low cardinality Keys

Name

Description

graphql.error.type (required)

数据获取错误的类名

graphql.field.name (required)

要获取的字段的名称。

graphql.outcome (required)

GraphQL 数据获取操作(成功或错误)的结果。

Table 5. High cardinality Keys

Name

Description

graphql.field.path (required)

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