配置Ruby on Rails本地环境对接AWS X-Ray OTel SDK遇初始化错误
解决OpenTelemetry初始化报错:uninitialized constant Trace
错误原因
代码中使用的Trace::Export::BatchSpanProcessor不属于全局命名空间,该常量是OpenTelemetry SDK内部组件,必须使用完整限定命名空间才能访问,因此触发OpenTelemetry::SDK::ConfigurationError。
修正步骤
修正BatchSpanProcessor的命名空间
将Trace::Export::BatchSpanProcessor替换为OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor。(可选)完善OTLP Exporter端点配置
OTLP Exporter要求端点为完整URL(包含协议和路径),建议将endpoint="localhost:2000"修改为endpoint="http://localhost:2000/v1/traces",避免后续连接失败。
修正后的完整初始化代码
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 = [ OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new( OpenTelemetry::Exporter::OTLP::Exporter.new( endpoint: "http://localhost:2000/v1/traces" ) ) ] 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
额外检查
- 确保已执行
bundle install安装所有Gem依赖 - 确认本地Docker中的OTLP接收服务(如Jaeger、OpenTelemetry Collector)确实监听了
2000端口的HTTP端点
内容的提问来源于stack exchange,提问作者Keimille
相关产品推荐
相关产品推荐

