Class: LaunchDarklyObservability::OpenTelemetryConfig

Inherits:
Object
  • Object
show all
Defined in:
lib/launchdarkly_observability/opentelemetry_config.rb

Overview

Configures OpenTelemetry SDK with appropriate providers and exporters for traces, logs, and metrics.

This class handles the setup of:

  • Tracer provider with OTLP exporter and batch processing

  • Logger provider with OTLP log exporter (included by default)

  • Meter provider with OTLP metrics exporter (if available)

  • Auto-instrumentation for Rails, ActiveRecord, Net::HTTP, etc.

Constant Summary collapse

BATCH_SCHEDULE_DELAY_MS =

Default batch processor configuration

1000
BATCH_MAX_EXPORT_SIZE =
128
BATCH_MAX_QUEUE_SIZE =
1024
METRICS_EXPORT_INTERVAL_MS =

Metrics export interval

60_000

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(project_id:, otlp_endpoint:, environment: nil, sdk_metadata: nil, **options) ⇒ OpenTelemetryConfig

Initialize OpenTelemetry configuration

Parameters:

  • project_id (String)

    LaunchDarkly project ID

  • otlp_endpoint (String)

    OTLP collector endpoint

  • environment (String, nil) (defaults to: nil)

    Deployment environment name (optional - inferred from SDK key if not provided)

  • sdk_metadata (LaunchDarkly::Interfaces::Plugins::SdkMetadata, nil) (defaults to: nil)
  • options (Hash)

    Additional options



46
47
48
49
50
51
52
53
54
55
# File 'lib/launchdarkly_observability/opentelemetry_config.rb', line 46

def initialize(project_id:, otlp_endpoint:, environment: nil, sdk_metadata: nil, **options)
  @project_id = project_id
  @otlp_endpoint = otlp_endpoint
  @environment = environment
  @sdk_metadata = 
  @options = options
  @configured = false
  @logger_provider = nil
  @meter_provider = nil
end

Instance Attribute Details

#environmentString (readonly)

Returns The deployment environment.

Returns:

  • (String)

    The deployment environment



34
35
36
# File 'lib/launchdarkly_observability/opentelemetry_config.rb', line 34

def environment
  @environment
end

#logger_providerOpenTelemetry::SDK::Logs::LoggerProvider? (readonly)

Returns The logger provider (nil if logs disabled or setup failed).

Returns:

  • (OpenTelemetry::SDK::Logs::LoggerProvider, nil)

    The logger provider (nil if logs disabled or setup failed)



37
38
39
# File 'lib/launchdarkly_observability/opentelemetry_config.rb', line 37

def logger_provider
  @logger_provider
end

#otlp_endpointString (readonly)

Returns The OTLP endpoint.

Returns:

  • (String)

    The OTLP endpoint



31
32
33
# File 'lib/launchdarkly_observability/opentelemetry_config.rb', line 31

def otlp_endpoint
  @otlp_endpoint
end

#project_idString (readonly)

Returns The LaunchDarkly project ID.

Returns:

  • (String)

    The LaunchDarkly project ID



28
29
30
# File 'lib/launchdarkly_observability/opentelemetry_config.rb', line 28

def project_id
  @project_id
end

Instance Method Details

#configureObject

Configure OpenTelemetry SDK

Sets up tracer provider with OTLP exporter, logger provider for OTLP log export, and optionally meter provider if available.



61
62
63
64
65
66
67
68
69
70
71
# File 'lib/launchdarkly_observability/opentelemetry_config.rb', line 61

def configure
  return if @configured

  configure_traces if @options.fetch(:enable_traces, true)
  configure_logs if @options.fetch(:enable_logs, true)
  configure_metrics if @options.fetch(:enable_metrics, true)

  setup_shutdown_hook

  @configured = true
end

#flushObject

Flush all pending telemetry data



74
75
76
77
78
79
80
# File 'lib/launchdarkly_observability/opentelemetry_config.rb', line 74

def flush
  OpenTelemetry.tracer_provider&.force_flush
  @logger_provider&.force_flush
  @meter_provider&.force_flush
rescue StandardError => e
  warn "[LaunchDarklyObservability] Error flushing telemetry: #{e.message}"
end

#shutdownObject

Shutdown all providers



83
84
85
86
87
88
89
# File 'lib/launchdarkly_observability/opentelemetry_config.rb', line 83

def shutdown
  OpenTelemetry.tracer_provider&.shutdown
  @logger_provider&.shutdown
  @meter_provider&.shutdown
rescue StandardError => e
  warn "[LaunchDarklyObservability] Error shutting down telemetry: #{e.message}"
end