Class: Datadog::OpenTelemetry::Metrics

Inherits:
Object
  • Object
show all
Defined in:
lib/datadog/opentelemetry/metrics.rb

Constant Summary collapse

EXPORTER_NONE =
'none'

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(components) ⇒ Metrics



18
19
20
21
22
23
# File 'lib/datadog/opentelemetry/metrics.rb', line 18

def initialize(components)
  @logger = components.logger
  @settings = components.settings
  @agent_host = components.agent_settings.hostname
  @agent_ssl = components.agent_settings.ssl
end

Class Method Details

.initialize!(components) ⇒ Object



10
11
12
13
14
15
16
# File 'lib/datadog/opentelemetry/metrics.rb', line 10

def self.initialize!(components)
  new(components).configure_metrics_sdk
  true
rescue => exc
  components.logger.error("Failed to initialize OpenTelemetry metrics: #{exc.class}: #{exc}: #{exc.backtrace.join("\n")}")
  false
end

Instance Method Details

#configure_metrics_sdkObject



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/datadog/opentelemetry/metrics.rb', line 25

def configure_metrics_sdk
  provider = ::OpenTelemetry.meter_provider
  provider.shutdown if provider.is_a?(::OpenTelemetry::SDK::Metrics::MeterProvider)

  # The OpenTelemetry SDK defaults to cumulative temporality, but Datadog prefers delta temporality.
  # Here is an example of how this config is applied: https://github.com/open-telemetry/opentelemetry-ruby/blob/1933d4c18e5f5e45c53fa9e902e58aa91e85cc38/metrics_sdk/lib/opentelemetry/sdk/metrics/aggregation/sum.rb#L14
  if DATADOG_ENV['OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE'].nil?
    ENV['OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE'] = 'delta' # rubocop:disable CustomCops/EnvUsageCop
  end

  resource = create_resource
  provider = ::OpenTelemetry::SDK::Metrics::MeterProvider.new(resource: resource)
  configure_metric_reader(provider)
  ::OpenTelemetry.meter_provider = provider
end