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