From f7cf84624826d8b04c204ef8aed5bbe00ec79774 Mon Sep 17 00:00:00 2001 From: Siva Gollapalli Date: Mon, 7 Jul 2025 16:25:49 +0530 Subject: [PATCH] [#1444] Pass parent trace to sidekiq job --- lib/elastic_apm/spies/sidekiq.rb | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/lib/elastic_apm/spies/sidekiq.rb b/lib/elastic_apm/spies/sidekiq.rb index 0857f36eb..8833bc44e 100644 --- a/lib/elastic_apm/spies/sidekiq.rb +++ b/lib/elastic_apm/spies/sidekiq.rb @@ -30,7 +30,15 @@ class SidekiqSpy class Middleware def call(_worker, job, queue) name = SidekiqSpy.name_for(job) - transaction = ElasticAPM.start_transaction(name, 'Sidekiq') + + transaction = if job['trace_id'] + ElasticAPM.start_transaction(name, 'Sidekiq', trace_context: ElasticAPM::TraceContext.new( + traceparent: ElasticAPM::TraceContext::Traceparent.new(trace_id: job['trace_id']) + )) + else + ElasticAPM.start_transaction(name, 'Sidekiq') + end + ElasticAPM.set_label(:queue, queue) yield @@ -47,6 +55,14 @@ def call(_worker, job, queue) end end + class ParentTraceMiddleware + def call(job_class_or_string, job, queue, redis_pool) + job.merge!( + 'trace_id' => ElasticAPM.current_transaction&.trace_id + ) + end + end + def self.name_for(job) klass = job['class'] @@ -64,6 +80,12 @@ def install_middleware chain.add Middleware end end + + Sidekiq.configure_client do |config| + config.client_middleware do |chain| + chain.add ParentTraceMiddleware + end + end end # @api private