Skip to content

Commit d6ca70f

Browse files
feat: allow selecting multiple exporter (#868)
* feat: allow selecting multiple exporter Co-authored-by: Francis Bogsanyi <[email protected]>
1 parent 82fabd0 commit d6ca70f

File tree

2 files changed

+52
-12
lines changed

2 files changed

+52
-12
lines changed

sdk/lib/opentelemetry/sdk/configurator.rb

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -165,21 +165,23 @@ def install_instrumentation
165165
end
166166

167167
def configure_span_processors
168-
processors = @span_processors.empty? ? [wrapped_exporter_from_env].compact : @span_processors
168+
processors = @span_processors.empty? ? wrapped_exporters_from_env.compact : @span_processors
169169
processors.each { |p| tracer_provider.add_span_processor(p) }
170170
end
171171

172-
def wrapped_exporter_from_env
173-
exporter = ENV.fetch('OTEL_TRACES_EXPORTER', 'otlp')
174-
case exporter
175-
when 'none' then nil
176-
when 'otlp' then fetch_exporter(exporter, 'OpenTelemetry::Exporter::OTLP::Exporter')
177-
when 'jaeger' then fetch_exporter(exporter, 'OpenTelemetry::Exporter::Jaeger::CollectorExporter')
178-
when 'zipkin' then fetch_exporter(exporter, 'OpenTelemetry::Exporter::Zipkin::Exporter')
179-
when 'console' then Trace::Export::SimpleSpanProcessor.new(Trace::Export::ConsoleSpanExporter.new)
180-
else
181-
OpenTelemetry.logger.warn "The #{exporter} exporter is unknown and cannot be configured, spans will not be exported"
182-
nil
172+
def wrapped_exporters_from_env
173+
exporters = ENV.fetch('OTEL_TRACES_EXPORTER', 'otlp')
174+
exporters.split(',').map do |exporter|
175+
case exporter.strip
176+
when 'none' then nil
177+
when 'otlp' then fetch_exporter(exporter, 'OpenTelemetry::Exporter::OTLP::Exporter')
178+
when 'jaeger' then fetch_exporter(exporter, 'OpenTelemetry::Exporter::Jaeger::CollectorExporter')
179+
when 'zipkin' then fetch_exporter(exporter, 'OpenTelemetry::Exporter::Zipkin::Exporter')
180+
when 'console' then Trace::Export::SimpleSpanProcessor.new(Trace::Export::ConsoleSpanExporter.new)
181+
else
182+
OpenTelemetry.logger.warn "The #{exporter} exporter is unknown and cannot be configured, spans will not be exported"
183+
nil
184+
end
183185
end
184186
end
185187

sdk/test/opentelemetry/sdk/configurator_test.rb

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,44 @@
232232
_(OpenTelemetry.tracer_provider.instance_variable_get(:@span_processors)).must_be_empty
233233
end
234234

235+
it 'accepts comma separated list as an environment variable' do
236+
with_env('OTEL_TRACES_EXPORTER' => 'zipkin,console') do
237+
configurator.configure
238+
end
239+
240+
_(OpenTelemetry.tracer_provider.instance_variable_get(:@span_processors)[0]).must_be_instance_of(
241+
OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor
242+
)
243+
_(OpenTelemetry.tracer_provider.instance_variable_get(:@span_processors)[0].instance_variable_get(:@exporter)).must_be_instance_of(
244+
OpenTelemetry::Exporter::Zipkin::Exporter
245+
)
246+
_(OpenTelemetry.tracer_provider.instance_variable_get(:@span_processors)[1]).must_be_instance_of(
247+
OpenTelemetry::SDK::Trace::Export::SimpleSpanProcessor
248+
)
249+
_(OpenTelemetry.tracer_provider.instance_variable_get(:@span_processors)[1].instance_variable_get(:@span_exporter)).must_be_instance_of(
250+
OpenTelemetry::SDK::Trace::Export::ConsoleSpanExporter
251+
)
252+
end
253+
254+
it 'accepts comma separated list with preceeding or trailing spaces as an environment variable' do
255+
with_env('OTEL_TRACES_EXPORTER' => 'zipkin , console') do
256+
configurator.configure
257+
end
258+
259+
_(OpenTelemetry.tracer_provider.instance_variable_get(:@span_processors)[0]).must_be_instance_of(
260+
OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor
261+
)
262+
_(OpenTelemetry.tracer_provider.instance_variable_get(:@span_processors)[0].instance_variable_get(:@exporter)).must_be_instance_of(
263+
OpenTelemetry::Exporter::Zipkin::Exporter
264+
)
265+
_(OpenTelemetry.tracer_provider.instance_variable_get(:@span_processors)[1]).must_be_instance_of(
266+
OpenTelemetry::SDK::Trace::Export::SimpleSpanProcessor
267+
)
268+
_(OpenTelemetry.tracer_provider.instance_variable_get(:@span_processors)[1].instance_variable_get(:@span_exporter)).must_be_instance_of(
269+
OpenTelemetry::SDK::Trace::Export::ConsoleSpanExporter
270+
)
271+
end
272+
235273
it 'accepts "console" as an environment variable value' do
236274
with_env('OTEL_TRACES_EXPORTER' => 'console') do
237275
configurator.configure

0 commit comments

Comments
 (0)