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

Datadog APM:如何从失败请求Span关联获取Sidekiq父Span标签

解决Datadog中提取父Sidekiq Span标签到失败Faraday请求的方法

方法1:利用trace_id关联父子Span,通过API批量获取父标签

  1. 用现有查询语句导出失败Faraday请求的trace_id列表:
    service:my_service resource_name:POST @peer.hostname=my.other.service.host @http.path_group:/route status:error
    
    在Datadog APM界面导出包含trace_id的CSV或JSON数据。
  2. 调用Datadog Trace API,传入trace_id获取完整追踪链路:
    curl -X GET "https://api.datadoghq.com/api/v1/trace/<TRACE_ID>" \
    -H "Accept: application/json" \
    -H "DD-API-KEY: <YOUR_API_KEY>" \
    -H "DD-APPLICATION-KEY: <YOUR_APP_KEY>"
    
  3. 解析返回的JSON数据,定位每个追踪里的Sidekiq父Span,提取所需标签(如sidekiq.job_id、sidekiq.queue),再与对应的Faraday Span数据关联。

方法2:通过Datadog Pipeline将父Span标签注入子Span

  1. 进入Datadog的APM > Pipelines页面,创建新Pipeline。
  2. 添加处理器,选择Span Attribute Remapper或自定义Grok Parser,配置规则:
    • 当Span类型为http(对应Faraday请求)且满足失败条件时,提取其父Span的指定标签。
    • 将父Span标签复制为Faraday Span的自定义属性,比如parent_sidekiq_job_id。
  3. 保存Pipeline后,新生成的Span会自动携带父Sidekiq标签,后续查询可直接将该属性设为facet或列。

方法3:修改Rails代码,主动传递Sidekiq标签到Faraday Span

在缓存未命中触发Faraday请求的逻辑中,从Sidekiq上下文获取标签,添加到Faraday请求的Span中:

# 缓存未命中时的代码逻辑
sidekiq_job = Sidekiq::CurrentJob.get
if sidekiq_job
  Datadog.tracer.active_span.set_tag('sidekiq.job_id', sidekiq_job.jid)
  Datadog.tracer.active_span.set_tag('sidekiq.queue', sidekiq_job.queue)
end

这样Faraday Span会直接包含Sidekiq标签,无需后续关联,查询时可直接使用这些标签作为facet或列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 16:05:01