Skip to content

Feature: configurable exporter #15

@wohlgejm

Description

@wohlgejm

It would be nice to allow for a custom exporter, or a span processors to be passed in during initialization. Some integrations will require different auth headers or other configuration.

Something like:

module Traceloop
  module SDK
    class Traceloop
      def initialize(exporter = default_exporter)
        OpenTelemetry::SDK.configure do |c|
          c.add_span_processor(
            OpenTelemetry::SDK::Trace::Export::SimpleSpanProcessor.new(exporter)
          )
          puts "Traceloop exporting traces to #{exporter.instance_variable_get("@uri")}"
        end

        @tracer = OpenTelemetry.tracer_provider.tracer("Traceloop")
      end

      private
  
      def default_exporter
          OpenTelemetry::Exporter::OTLP::Exporter.new(
            endpoint: "#{ENV.fetch("TRACELOOP_BASE_URL", "https://api.traceloop.com")}/v1/traces",
            headers: { "Authorization" => "Bearer #{ENV.fetch("TRACELOOP_API_KEY")}" }
          )
        end
      end
    end
end

traceloop = Traceloop::SDK::Traceloop.new(
  OpenTelemetry::Exporter::OTLP::Exporter.new(
    endpoint: "https://custom.com/otel",
    headers: { "x-api-key": "someapikey" }
)

Happy to take a stab at this if you'd like.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions