Skip to content

Instantly share code, notes, and snippets.

@Drowze
Last active June 4, 2025 17:34
Show Gist options
  • Save Drowze/e488a921099e98b6d681e56a469758b1 to your computer and use it in GitHub Desktop.
Save Drowze/e488a921099e98b6d681e56a469758b1 to your computer and use it in GitHub Desktop.
Minimal custom datadog distributed tracing
# Following datadog patterns, see:
# https://github.com/DataDog/dd-trace-rb/blob/master/lib/datadog/tracing/contrib/karafka/distributed/propagation.rb
# https://github.com/DataDog/dd-trace-rb/blob/master/lib/datadog/tracing/contrib/karafka/patcher.rb#L27-L49
class MyCustomPropagation < Datadog::Tracing::Distributed::Propagation
def initialize(
propagation_style_inject:,
propagation_style_extract:,
propagation_extract_first:
)
super(
propagation_styles: {
Datadog::Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_B3_MULTI_HEADER =>
Datadog::Tracing::Distributed::B3Multi.new(fetcher: Datadog::Tracing::Distributed::Fetcher),
Datadog::Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_B3_SINGLE_HEADER =>
Datadog::Tracing::Distributed::B3Single.new(fetcher: Datadog::Tracing::Distributed::Fetcher),
Datadog::Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_DATADOG =>
Datadog::Tracing::Distributed::Datadog.new(fetcher: Datadog::Tracing::Distributed::Fetcher),
Datadog::Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_TRACE_CONTEXT =>
Datadog::Tracing::Distributed::TraceContext.new(fetcher: Datadog::Tracing::Distributed::Fetcher),
Datadog::Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_NONE => Datadog::Tracing::Distributed::None.new
},
propagation_style_inject: propagation_style_inject,
propagation_style_extract: propagation_style_extract,
propagation_extract_first: propagation_extract_first
)
end
end
class MyClass
def initialize(idx, propagation)
@idx = idx
@propagation = propagation
end
def call(data = {})
digest = @propagation.extract(data)
Datadog::Tracing.continue_trace!(digest) if digest
Datadog::Tracing.trace("my_class_trace_#{@idx}") do
puts "active trace/span: #{Datadog::Tracing.active_trace.id} / #{Datadog::Tracing.active_span&.id}".yellow
@propagation.inject!(Datadog::Tracing.active_trace.to_digest, data)
end
data
end
end
propagation = MyCustomPropagation.new(
propagation_style_inject: Datadog.configuration.tracing.propagation_style_inject,
propagation_style_extract: Datadog.configuration.tracing.propagation_style_extract,
propagation_extract_first: Datadog.configuration.tracing.propagation_extract_first
)
data = MyClass.new(1, propagation).call({})
data = MyClass.new(2, propagation).call(data)
data = MyClass.new(3, propagation).call(data)
# output:
# active trace/span: 138574660423656517896910447203791200371 / 2743717933204636498
# active trace/span: 138574660423656517896910447203791200371 / 456627744106024901
# active trace/span: 138574660423656517896910447203791200371 / 4372616340251457109
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment