Module: Foam::Ruby::OtelSetup

Defined in:
lib/foam/ruby/otel_setup.rb

Class Method Summary collapse

Class Method Details

.configure!(config) ⇒ Object



14
15
16
17
# File 'lib/foam/ruby/otel_setup.rb', line 14

def configure!(config)
  configure_traces(config)
  configure_logs(config)
end

.configure_logs(config) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/foam/ruby/otel_setup.rb', line 52

def configure_logs(config)
  @foam_log_processor = OpenTelemetry::SDK::Logs::Export::BatchLogRecordProcessor.new(
    OpenTelemetry::Exporter::OTLP::Logs::LogsExporter.new(
      endpoint: config.logs_endpoint,
      headers: config.otel_headers
    )
  )

  existing = OpenTelemetry.logger_provider
  if existing.is_a?(OpenTelemetry::SDK::Logs::LoggerProvider)
    existing.add_log_record_processor(@foam_log_processor)
  else
    resource = OpenTelemetry::SDK::Resources::Resource.create(
      "service.name" => config.service_name,
      "deployment.environment" => ENV["RAILS_ENV"] || ENV["RACK_ENV"] || "production"
    )
    provider = OpenTelemetry::SDK::Logs::LoggerProvider.new(resource: resource)
    provider.add_log_record_processor(@foam_log_processor)
    OpenTelemetry.logger_provider = provider
  end

  @attached_logger_provider = OpenTelemetry.logger_provider
end

.configure_traces(config) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/foam/ruby/otel_setup.rb', line 19

def configure_traces(config)
  @foam_span_processor = OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(
    OpenTelemetry::Exporter::OTLP::Exporter.new(
      endpoint: config.traces_endpoint,
      headers: config.otel_headers
    )
  )

  existing = OpenTelemetry.tracer_provider
  if existing.is_a?(OpenTelemetry::SDK::Trace::TracerProvider)
    existing.add_span_processor(@foam_span_processor)
  else
    OpenTelemetry::SDK.configure do |c|
      c.service_name = config.service_name
      c.add_span_processor(@foam_span_processor)
      c.use_all
    end
  end

  @attached_provider = OpenTelemetry.tracer_provider
end

.ensure_log_processor_attached!Object



76
77
78
79
80
81
82
83
84
85
# File 'lib/foam/ruby/otel_setup.rb', line 76

def ensure_log_processor_attached!
  return unless @foam_log_processor

  current = OpenTelemetry.logger_provider
  return if current.equal?(@attached_logger_provider)
  return unless current.is_a?(OpenTelemetry::SDK::Logs::LoggerProvider)

  current.add_log_record_processor(@foam_log_processor)
  @attached_logger_provider = current
end

.ensure_processor_attached!Object



41
42
43
44
45
46
47
48
49
50
# File 'lib/foam/ruby/otel_setup.rb', line 41

def ensure_processor_attached!
  return unless @foam_span_processor

  current = OpenTelemetry.tracer_provider
  return if current.equal?(@attached_provider)
  return unless current.is_a?(OpenTelemetry::SDK::Trace::TracerProvider)

  current.add_span_processor(@foam_span_processor)
  @attached_provider = current
end