Datadog 导出器(通过 OTLP)
配置 Datadog 导出器以进行跟踪
启用并配置Datadog以跟踪GraphOS Router或Apollo Router Core。
有关通用跟踪配置,请参阅路由跟踪配置。
OTLP配置
要将跟踪导出到Datadog,通过OTLP,您必须完成以下操作:
- 配置Datadog代理,以接受OTLP跟踪。
- 配置路由器,将跟踪发送到Datadog代理。
要配置Datadog代理,将OTLP配置添加到您的datadog.yaml
。例如:
otlp_config:receiver:protocols:grpc:endpoint: <dd-agent-ip>:4317
要配置路由器,启用OTLP导出器,并设置endpoint: <datadog-agent-endpoint>
。例如:
telemetry:exporters:tracing:otlp:enabled: true# Optional endpoint, either 'default' or a URL (Defaults to http://127.0.0.1:4317)endpoint: "${env.DATADOG_AGENT_HOST}:4317"
有关Datadog配置的更多详细信息,请参阅Datadog代理配置。
启用日志关联
要启用Datadog日志关联,您必须将<code class="css-1lvdtfu">dd.trace_id</code>配置在span中显示:
telemetry:instrumentation:spans:mode: spec_compliantrouter:attributes:dd.trace_id: true
您的JSON格式的日志消息将自动在每条日志消息中输出 dd.trace_id
,前提是在 router
段中检测到了 dd.trace_id
。
ATDatadog原生配置
⚠️ 注意
ATDatadog跟踪不是OpenTelemetry规范的一部分,鉴于Datadog支持OTLP,我们将在未来弃用原生的Datadog跟踪。请使用 OTLP配置。
配置 router 可以连接到原生、默认的Datadog代理地址或URL:
telemetry:exporters:tracing:datadog:enabled: true# Optional endpoint, either 'default' or a URL (Defaults to http://127.0.0.1:8126)endpoint: "http://${env.DATADOG_AGENT_HOST}:8126"# Enable graphql.operation.name attribute on supergraph spans.instrumentation:spans:mode: spec_compliantsupergraph:attributes:graphql.operation.name: true
启用
设置为true以启用Datadog导出器。默认为false。
enable_span_mapping
(默认:true
)
存在一些不兼容性 存在于Datadog和OpenTelemetry之间,Datadog导出器可能无法提供有意义的上下文信息。要修复此问题,您可以将 router 配置为执行跨度名称和资源名称的映射。
telemetry:exporters:tracing:datadog:enabled: trueenable_span_mapping: true
当 enable_span_mapping: true
时, router 执行以下映射:
- 使用OpenTelemetry跨度名称设置Datadog跨度 操作名称。
- 使用OpenTelemetry跨度属性设置Datadog跨度资源名称。
示例跟踪
例如,假设一个客户端向 router 发送一个 查询 MyQuery
。 router 的 查询规划器 向 my-subgraph-name
发送一个子图查询并创建以下跟踪:
| apollo_router request || apollo_router router || apollo_router supergraph || apollo_router query_planning | apollo_router execution || apollo_router fetch || apollo_router subgraph || apollo_router subgraph_request |
如你所见,没有关于 查询、子图名称以及发送到子图的查询的名称的明确信息。
相反,enable_span_mapping
设置为 true
时将创建以下跟踪:
| request /graphql || router /graphql || supergraph MyQuery || query_planning MyQuery | execution || fetch fetch || subgraph my-subgraph-name || subgraph_request MyQuery__my-subgraph-name__0 |
fixed_span_names
(默认:true
)
当 fixed_span_names: true
时,Apollo router 使用原始跨度名称而不是由OTel语义约定描述的动态名称。
telemetry:exporters:tracing:datadog:enabled: truefixed_span_names: true
这将在Datadog的APM视图中为你提供一个有限的操作名称列表。
资源映射
当设置时,resource_mapping
允许您指定要在Datadog APM和跟踪视图中使用的属性。默认的资源映射如下:
OpenTelemetry 标签名称 | Datadog 标签操作名称 |
---|---|
请求 | http路由 |
路由器 | http路由 |
supergraph | graphql.operation.name |
查询规划 | graphql.operation.name |
子图 | 子图名称 |
子图请求 | graphql.operation.name |
http请求 | http路由 |
您可以通过指定 resource_mapping
配置来覆盖这些映射:
telemetry:exporters:tracing:datadog:enabled: trueresource_mapping:# Use `my.span.attribute` as the resource name for the `router` spanrouter: "my.span.attribute"instrumentation:spans:router:attributes:# Add a custom attribute to the `router` spanmy.span.attribute:request_header: x-custom-header
如果您在自定义构建的路由器中引入了新的标签,您可以通过将其添加到 resource_mapping
配置中来为其启用资源映射。
标签度量
当设置时, span_metrics
允许您指定哪些标签将在Datadog APM和追踪视图中显示标签度量。默认情况下,标签度量对以下内容启用:
请求
路由器
supergraph
子图
子图请求
http请求
查询规划
执行
查询解析
您可以通过指定 span_metrics
配置来覆盖这些默认值:
下面的示例将禁用supergraph标签的标签度量。
telemetry:exporters:tracing:datadog:enabled: truespan_metrics:# Disable span metrics for supergraphsupergraph: false# Enable span metrics for my_custom_spanmy_custom_span: true
如果您在自定义构建的路由器中引入了新的标签,您可以通过将其添加到 span_metrics
配置中来为其启用标签度量。
批量处理器
所有导出器都支持使用 batch_processor
配置批量标签处理器。
如果您看到以下任何消息在您的日志中,您必须调整 batch_processor
配置:
OpenTelemetry 跟踪错误发生:由于通道已满,无法将标签发送到批量标签处理器
OpenTelemetry 度量错误发生:由于通道已满,无法将标签发送到批量标签处理器
精确设置取决于您发送数据到应用程序性能监控器(APM)的可用带宽以及您的APM的带宽配置。随着时间的推移,随着应用程序的变化,预计将调整这些设置。
telemetry:exporters:tracing:datadog:batch_processor:max_export_batch_size: 512max_concurrent_exports: 1max_export_timeout: 30smax_queue_size: 2048scheduled_delay: 5s
batch_processor
配置参考
属性 | 默认值 | 描述 |
---|---|---|
scheduled_delay | 5s | 从收到第一个标签到发送批次的秒数延迟。 |
max_concurrent_exports | 1 | 重叠导出请求的最大数量。 |
max_export_batch_size | 512 | 包含在批次中的标签数量。可能受到最大消息大小限制的限制。 |
max_export_timeout | 30s | 在丢弃数据之前发送标签的超时时间(秒)。 |
max_queue_size | 2048 | 在丢弃标签数据之前缓冲的标签的最大数量。 |