You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确将Datadog RUM与Traces关联?React对接ROR GraphQL场景

Datadog RUM与ROR GraphQL API追踪关联问题排查

问题背景

React单页应用已接入Datadog RUM,无自有后端,调用部署了Datadog追踪代理的Ruby on Rails单体应用提供的GraphQL API。当前RUM初始化配置如下:

datadogRum.init({
  applicationId: 'xxxxxxxxx',
  clientToken: 'xxxxxxxxxxxxxx',
  site: 'datadoghq.com',
  service: 'order',
  env: 'staging',
  // Specify a version number to identify the deployed version of your application in Datadog
  // version: '1.0.0',
  sampleRate: 100,
  premiumSampleRate: 100,
  trackInteractions: true,
  defaultPrivacyLevel: 'mask-user-input',
  allowedTracingOrigins: [/https:\/\/(?:api|app)\.example\.(?:cc|com)\/graphql/],
})

目前无法在Datadog RUM的Traces标签页看到前端发起的GraphQL请求追踪,且已确认满足官方文档中的关联前提:

  • 已为RUM应用指向的服务配置APM追踪
  • 服务使用HTTP服务器
  • HTTP服务器使用支持分布式追踪的库
  • RUM Explorer中存在指向allowedTracingOrigins的XHR或Fetch资源
  • 针对allowedTracingOrigins的请求有对应的追踪数据

排查与修复步骤

  • 检查请求头自动注入情况
    打开浏览器开发者工具的Network面板,查看前端发起的GraphQL请求,确认是否携带x-datadog-trace-id、x-datadog-parent-id和x-datadog-sampling-priority请求头。若未携带,需验证allowedTracingOrigins的正则表达式是否准确匹配请求URL——比如是否遗漏了端口号、路径是否完全匹配,或正则转义是否有误。
  • 验证ROR后端分布式追踪配置
    确认ROR应用的ddtrace gem已正确开启分布式追踪,且GraphQL instrumentation配置到位。检查config/initializers/datadog.rb:
    Datadog.configure do |c|
      c.tracing.enabled = true
      c.tracing.distributed_tracing.enabled = true
      c.tracing.instrument :rails
      c.tracing.instrument :graphql
    end
    
    确保后端能识别并处理前端传来的x-datadog-*请求头,完成追踪链路的关联。
  • 统一环境与版本标识
    取消初始化配置中version字段的注释,设置当前应用的版本号,确保RUM的env(此处为staging)与后端APM服务的环境标识完全一致。Datadog依赖相同的环境和版本信息关联RUM与Traces数据。
  • 排查采样与数据过滤规则
    尽管已设置sampleRate: 100和premiumSampleRate: 100,仍需在Datadog控制台检查:
    • RUM全局采样规则是否覆盖了局部配置
    • APM的Ingestion Pipeline是否存在过滤相关追踪数据的规则
  • 确认跨域配置兼容性
    若前后端存在跨域,需确保ROR后端的CORS配置允许前端发送x-datadog-*请求头,并允许暴露这些头信息。示例配置:
    Rails.application.config.middleware.insert_before 0, Rack::Cors do
      allow do
        origins 'your-frontend-domain.com'
        resource '*',
          headers: :any,
          expose: ['x-datadog-trace-id', 'x-datadog-parent-id'],
          methods: [:get, :post, :options]
      end
    end
    
  • 手动注入追踪头测试
    若自动注入失效,可手动在请求中添加追踪头验证后端关联能力:
    const traceId = datadogRum.getTraceId();
    fetch('https://api.example.com/graphql', {
      method: 'POST',
      headers: {
        'x-datadog-trace-id': traceId,
        'x-datadog-parent-id': datadogRum.getParentId(),
        'x-datadog-sampling-priority': '1'
      },
      body: JSON.stringify(yourGraphQLQuery)
    });
    
    若手动注入后能在RUM中看到Traces关联,说明自动注入的allowedTracingOrigins匹配逻辑存在问题,需进一步调整正则表达式。

内容的提问来源于stack exchange,提问作者Noriode Raphael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 13:36:29