加入我们,从10月8日至10日在纽约市,学习关于 GraphQL 联邦和 API 平台工程的最新技巧、趋势和新闻。参加2024年纽约市的 GraphQL 峰会
文档
免费开始

跨度

将路由生命周期上下文添加到跟踪中


一个 跨度 会捕获处理请求和响应时所涉及的前置和后置信息,作为其通过 路由的请求生命周期(管道). 您可以在应用程序性能监控器(APM)中显示追踪信息时使用来自范围的信息。

范围配置

路由请求生命周期服务

A's请求生命周期包括三个主要服务:

  • 路由服务 - 在请求被解析之前处理传入的请求。在透明字节的上下文中工作。
  • Supergraph服务 - 在请求被解析并且发送到之前处理请求。在上下文中工作。
  • 子图服务 - 在请求被发送到子图之后处理请求。在GraphQL上下文中工作。

路由supergraphsubgraph部分用于定义每个服务的自定义范围配置:

router.yaml
telemetry:
instrumentation:
spans:
router:
attributes: {}
# ...
supergraph:
attributes: {}
# ...
subgraph:
attributes: {}
# ...

属性

范围可能从管道中附加属性。这些属性用于在您的APM中过滤和分组范围。

属性可以来自标准属性选择器

要自定义范围上的属性,需要 专属或企业计划

可用的属性取决于管道的服务。

desc.router.yaml
telemetry:
instrumentation:
spans:
router:
attributes:
# Standard attributes
http.response.status_code: true
# Custom attributes
"my_attribute":
response_header: "x-my-header"

您还可以使用 条件,在自定义属性上使用 选择器。您只能在选择器的同一执行级别上设置条件。例如,如果您想从 request_header 设置属性,则不能在 response_header 上设置条件。

desc.router.yaml
telemetry:
instrumentation:
spans:
router:
attributes:
on_error:
response_status: reason
condition:
not:
eq:
- response_status: code
- 200

default_attribute_requirement_level

default_attribute_requirement_level 选项设为要附加到跨度上的默认属性,属性定义参照 OpenTelemetry语义约定

有效值

  • required(默认值)
  • recommended
router.yaml
telemetry:
instrumentation:
spans:
# Set the default requirement level
default_attribute_requirement_level: required

属性可以单独配置,以便可以覆盖或禁用 required 属性。例如,可以单独设置 http.response.status_code 以覆盖标准值:

desc.router.yaml
telemetry:
instrumentation:
spans:
# Set the default requirement level
default_attribute_requirement_level: required
router:
attributes:
# Disable standard attribute
http.response.status_code: false

注意

OpenTelemetry规范定义的 opt-in 属性必须单独配置。

mode

mode 选项设为启用,则路由跨度会选择在路由中使用的旧属性,或OpenTelemetry规范中定义的属性。

有效值

  • spec_compliant
  • deprecated(默认值)

spec_compliant

此模式遵循OpenTelemetry规范。以前添加到未遵循约定的跨度的属性现在已删除。

使用此模式可能会提高性能,因为它减少了添加到跨度的属性数量。

router.yaml
telemetry:
instrumentation:
spans:
mode: spec_compliant

目前这不是默认设置,但将在未来版本中实现。

deprecated

此模式是默认设置,如果未配置 mode 选项为 spec_compliant,则遵循先前行为。

router.yaml
telemetry:
instrumentation:
spans:
mode: deprecated

属性添加到未遵循OpenTelemetry约定的跨度中。

注意

预计在未来的版本中,mode 选项将默认为 spec_compliant 并最终被移除。

跨度状态

默认情况下,只有当HTTP状态码不同于200时,跨度才会标记为错误。如果您想要将跨度的原因标记为错误,可以覆盖负责标记跨度是否错误的 otel.status_code 属性。如果出错,则 otel.status_code = error,否则为 ok

命名

默认情况下,我们将使用与当前 OpenTelemetry 中 GraphQL 服务器语义约定兼容的 span 命名约定,这意味着根 span 名称必须采用以下格式 <graphql.operation.type> <graphql.operation.name>,前提是 graphql.operation.typegraphql.operation.name 都是可用的。

如果您想更改为每个服务创建的 span 的名称,可以通过使用任何您想要的选取器来覆盖此值,设置 otel.name 属性。

以下是一个示例,如果您想在 payload 中有一个 GraphQL 错误并且您希望将 routersupergraph span 标记为错误,同时希望将 router span 名称强制为 graphql_router

router.yaml
telemetry:
instrumentation:
spans:
router:
attributes:
otel.name:
static: graphql_router # Override the span name to graphql_router
otel.status_code:
static: error
condition:
eq:
- true
- on_graphql_error: true
supergraph:
attributes:
otel.status_code:
static: error
condition:
exists:
response_errors: $[0].extensions.code # Here is an example to get the first error code, `on_graphql_error` is also available for supergraph

Span配置示例

以下是一个在 router.yaml 中设置 telemetry.spans 的示例,它为 router 服务的标准属性和自定义属性进行配置:

router.yaml
telemetry:
instrumentation:
spans:
default_attribute_requirement_level: required
mode: spec_compliant
router:
attributes:
# Standard attributes (http)
dd.trace_id: false
http.request.body.size: false
http.response.body.size: false
http.request.method: false
# ...
# Conditional custom attribute
otel.status_description: # You can conditionally put a status description attribute on your span if it respect the condition
static: "there was an error"
condition: # http response status code != 200 or it contains a graphql error in the payload
any:
- not:
eq:
- response_status: code
- 200
- eq:
- on_graphql_error
- true
# Custom attributes
"acme.custom_1":
trace_id: datadog
"acme.custom_2":
response_header: "X-CUSTOM2"
default: "unknown"
"acme.custom_3":
env: "ENV_VAR"
"static_attribute":
static: "my_static_value"
# ...
supergraph:
attributes: {}
# ...
subgraph:
attributes: {}
# ...

Spans配置引用

选项默认描述
<attribute-name>自定义属性名称。
属性标准属性|选取器span 的属性。
条件条件添加自定义属性的条件。
default_attribute_requirement_levelrequired|recommendedrequired默认属性要求级别。
modespec_compliant | deprecateddeprecatedspan 的属性。
上一个
条件
下一个
选取器
评价文章评价在GitHub上编辑编辑论坛Discord

©2024实罗西普尔图形公司,以下简称Apollo GraphQL。

隐私政策

公司