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

GraphOS 报告

将路由操作指标发送到 GraphOS


可以将 使用指标报告给GraphOS,您可以在 中可视化的。这些指标还启用了 GraphOS 强大的功能,如 模式检查

启用使用情况报告

您可以通过设置以下环境变量来在 中启用使用情况报告:

export APOLLO_KEY=<YOUR_GRAPH_API_KEY>
export APOLLO_GRAPH_REF=<YOUR_GRAPH_ID>@<VARIANT_NAME>

更多信息,请参阅 向 GraphOS 发送操作指标

上报字段级跟踪

在向您的 router 的响应中,您的 可以包括 字段级跟踪以指示子图解决 所需的时间。通过在 GraphOS Studio 中分析此数据,您可以识别和优化较慢的字段:

Viewing a trace in GraphOS Studio

您的 子图 库必须支持联邦跟踪(也称为FTV1跟踪)以提供这些数据。

  • 要确认支持,请检查FEDERATED TRACING您库条目的该页面此页面
  • 查阅您库的文档了解如何启用联邦跟踪。
    • 如果您使用 @apollo/subgraph,联邦跟踪支持将自动启用。

子图跟踪采样

默认情况下,路由器请求子图跟踪数据,每个操作1%的采样概率。在大多数情况下,这提供了足够的样本量,同时最大限度地减少操作(跟踪可以影响延迟因为它们增加了子图响应的有效载荷大小)的延迟。

您可以通过在您的 YAML 配置文件中设置以下选项来自定义您的路由器的跟踪采样概率:

router.yaml
telemetry:
apollo:
# In this example, the trace sampler is configured
# with a 50% probability of sampling a request.
# This value can't exceed the value of tracing.common.sampler.
field_level_instrumentation_sampler: 0.5
exporters:
tracing:
common:
# FTV1 uses the same trace sampling as other tracing options,
# so this value is also required.
sampler: 0.5

注意

因为字段级仪表化取决于通用的OpenTelemetry 跟踪telemetry.apollo.field_level_instrumentation_sampler的值不能超过telemetry.exporters.tracing.common.sampler的值。

禁用字段级跟踪

要完全禁用请求和报告子图跟踪数据,请将field_level_instrumentation_sampler设置为always_off

router.yaml
telemetry:
apollo:
field_level_instrumentation_sampler: always_off

实验性的本地字段度量

Apollo 可以发送字段级度量到GraphOS,而无需使用FTV1跟踪。这个特性是实验性的,目前在GraphOS Studio中不可见。要启用此功能,请在您的路由器配置中将experimental_local_field_metrics选项设置为true

router.yaml
telemetry:
apollo:
experimental_local_field_metrics: true

高级配置

send_headers

提供此字段以配置包含在发送到GraphOS的跟踪数据中的请求数 headers名称和值。默认情况下,出于安全考虑,不向GraphOS发送任何headers信息。

router.yaml
telemetry:
apollo:
field_level_instrumentation_sampler: 0.01 # (default)
send_headers:
only: # Include only headers with these names
- referer

支持值

值 / 类型描述
none

字符串

send_headers设置为字符串值none以在报告的跟踪信息中包含没有任何headers信息。

send_headers: none

这是默认行为。

all

字符串

send_headers 设置为字符串值 all 以包含 所有 的头信息在报告的跟踪信息中。

send_headers: all

⚠️ 小心使用! 头信息可能包含敏感数据(如访问令牌),这些数据不应 报告 给 GraphOS。

数组

一个数组,包含路由器将报告给 GraphOS 的头名称。所有其他头信息 不被报告。 请参考上面的示例。

除...

数组

一个数组,包含路由器不会报告给 GraphOS 的头名称。所有其他头 被报告。 请参考上面的 only 示例。

send_variable_values

提供此 字段 来配置哪些 的值包含在发送到 GraphOS 的跟踪数据中。默认情况下, 为了安全起见,不会将变量信息发送到 GraphOS。

router.yaml
telemetry:
apollo:
field_level_instrumentation_sampler: 0.01 # (default)
send_variable_values:
except: # Send all variables EXCEPT ones with these names
- first

支持值

值 / 类型描述
none

字符串

send_variable_values 设置为字符串值 none 以包含 的变量信息在报告的跟踪信息中。

send_variable_values: none

这是默认行为。

all

字符串

send_variable_values 设置为字符串值 all 以包含 所有 的变量信息在报告的跟踪信息中。

send_variable_values: all

⚠️ 小心使用! GraphQL 可能包含敏感数据,不应 报告 给 GraphOS。

数组

一个数组,包含路由器将报告给 GraphOS 的变量名称。所有其他变量不被报告。 请参考上面的 except 示例。

除...

数组

一个数组,包含路由器不会报告给 GraphOS 的变量名称。所有其他变量 被报告。

router.yaml
telemetry:
apollo:
# The percentage of requests will include HTTP request and response headers in traces sent to GraphOS Studio.
# This is expensive and should be left at a low value.
# This cannot be higher than tracing->common->sampler
field_level_instrumentation_sampler: 0.01 # (default)
# Include HTTP request and response headers in traces sent to GraphOS Studio
send_headers: # other possible values are all, only (with an array), except (with an array), none (by default)
except: # Send all headers except referer
- referer
# Include variable values in Apollo in traces sent to GraphOS Studio
send_variable_values: # other possible values are all, only (with an array), except (with an array), none (by default)
except: # Send all variable values except for variable named first
- first
exporters:
tracing:
common:
sampler: 0.5 # The percentage of requests that will generate traces (a rate or `always_on` or `always_off`)

errors

您可以为是否将 GraphQL 错误信息报告给 GraphOS 以及是否对错误详情进行编辑进行配置。

默认情况下,您的路由器 报告错误信息,并且还会编辑那些错误的详情。

  • 要防止您的路由器报告错误信息,可以将 send 选项设置为 false
  • 要包括所有错误详情在路由器发送到 GraphOS 的报告中,可以将 redact 选项设置为 false

您的子图库必须支持联邦追踪(又名FTV1追踪),以便向GraphOS提供错误信息。如果您使用Apollo Server@apollo/subgraph,联邦追踪支持将自动启用。

确认支持

  • 检查FEDERATED TRACING条目,这位于支持的子图页面上
  • 如果您的库没有自动启用联邦追踪,请参考其文档以了解如何启用它。
  • 请注意,联邦追踪也可以被采样(见上文),因此如果采样的级别较低,您可能无法获取所有操作的错误信息。

以下为示例

router.yaml
telemetry:
apollo:
errors:
subgraph:
all:
# By default, subgraphs should report errors to GraphOS
send: true # (default: true)
redact: false # (default: true)
subgraphs:
account: # Override the default behavior for the "account" subgraph
send: false

注意

如果您正在编写插件,您可以通过读取上下文中的apollo_operation_id的值来获取Studio追踪ID。

上一页
概览
下一页
客户端感知
评价本文评价在GitHub上编辑编辑论坛Discord

©2024Apollo Graph Inc.,属于Apollo GraphQL。

隐私政策

公司