Class: Datadog::OpenTelemetry::Metrics

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

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(components) ⇒ Metrics

Returns a new instance of Metrics.



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

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



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

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

Instance Method Details

#configure_metrics_sdk ⇒ Object



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

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