0

I am trying to figure out how to properly setup a local dev environment to test my tracing. However, I am running into this error: OpenTelemetry error: unexpected configuration error due to uninitialized constant Trace - OpenTelemetry::SDK::ConfigurationError

Here is my initializer:

require 'opentelemetry-api'
require 'opentelemetry-exporter-otlp'
require 'opentelemetry-sdk'
require 'opentelemetry-propagator-xray'

OpenTelemetry::SDK.configure do |c|
    c.service_name = 'test-app'
    
    c.span_processors = [
      Trace::Export::BatchSpanProcessor.new(
          OpenTelemetry::Exporter::OTLP::Exporter.new(
            endpoint="localhost:2000"
          )
      )
    ]


    c.id_generator = OpenTelemetry::Propagator::XRay::IDGenerator
    c.propagators = [OpenTelemetry::Propagator::XRay::TextMapPropagator.new]
  
    c.use 'OpenTelemetry::Instrumentation::AwsSdk', {
      suppress_internal_instrumentation: true
    }
  
    c.use 'OpenTelemetry::Instrumentation::Rails'
    c.use 'OpenTelemetry::Instrumentation::Rack'
    c.use 'OpenTelemetry::Instrumentation::ActionPack'
    c.use 'OpenTelemetry::Instrumentation::ActiveSupport'
    c.use 'OpenTelemetry::Instrumentation::ActionView'
    c.use 'OpenTelemetry::Instrumentation::ActiveRecord'
  
    c.use 'OpenTelemetry::Instrumentation::Faraday'
  end

And Gemfile:

# Use aws x-ray otel exporter
gem 'opentelemetry-exporter-otlp'
gem 'opentelemetry-sdk'

gem 'opentelemetry-propagator-xray'

gem 'opentelemetry-instrumentation-aws_sdk', '~> 0.2.1'
gem 'opentelemetry-instrumentation-faraday', '~> 0.19'
gem 'opentelemetry-instrumentation-rails', '~> 0.20'

I am using a local Docker setup and can confirm that everything is working correctly. I think I am missing something in this configuration altogether

Keimille
  • 345
  • 2
  • 11

1 Answers1

0

Is because the documentation is not up-to-date with the gem versions. Encountered a few issues myself (3):

  • c.add_span_processor() instead of c.span_processors = []
  • Missing namespace: OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new
  • Not specifying path of endoint: /v1/traces

Try:


  # The X-Ray ID Generator generates spans with X-Ray backend compliant IDs
  c.id_generator = OpenTelemetry::Propagator::XRay::IDGenerator

  # The X-Ray Propagator injects the X-Ray Tracing Header into downstream calls
  c.propagators = [OpenTelemetry::Propagator::XRay::TextMapPropagator.new]

  # Set collector
  c.add_span_processor(
    # Use the BatchSpanProcessor to send traces in groups instead of one at a time
    OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(
      # Use the default OLTP Exporter to send traces to the ADOT Collector
      OpenTelemetry::Exporter::OTLP::Exporter.new(
        # The ADOT Collector is running as a sidecar and listening on port 4317
        endpoint: "http://aws-ot-collector:4317/v1/traces"
      )
    )
  )

ScoutApm has a very good article on OpenTelemetry configuration for Rails.

franee
  • 31
  • 3