Class: Puma::Plugin::TelemetryToo::Targets::OpenTelemetryTarget

Inherits:
Object
  • Object
show all
Defined in:
lib/puma/plugin/telemetry_too/targets/open_telemetry_target.rb

Overview

Target wrapping OpenTelemetry Metrics client.

This uses the gauge metric type which only exports the last value because the OpenTelemetry exporter aggregates metrics before sending them. Meaning metrics could be published several times before they are flushed via aggregation thread. And when flushed, the last values will be sent.

If you need to persist all metrics, you can enable the force_flush option. However, force-flushing metrics every time can significantly impact performance.

Example

require 'opentelemetry-metrics-sdk'

OpenTelemetryTarget.new(meter_provider: OpenTelemetry.meter_provider, prefix: 'webserver')

Instance Method Summary collapse

Constructor Details

#initialize(meter_provider: ::OpenTelemetry.meter_provider, prefix: 'puma', suffix: nil, force_flush: false, attributes: {}) ⇒ OpenTelemetryTarget

Returns a new instance of OpenTelemetryTarget.



23
24
25
26
27
28
29
30
31
32
33
# File 'lib/puma/plugin/telemetry_too/targets/open_telemetry_target.rb', line 23

def initialize(meter_provider: ::OpenTelemetry.meter_provider, prefix: 'puma', suffix: nil,
               force_flush: false, attributes: {})
  @meter_provider = meter_provider
  @meter = meter_provider.meter('puma.telemetry')
  @prefix = prefix
  @suffix = suffix
  @force_flush = force_flush
  @attributes  = attributes
  @instruments = {}
  @mutex = Mutex.new
end

Instance Method Details

#call(telemetry) ⇒ Object



35
36
37
38
39
40
41
# File 'lib/puma/plugin/telemetry_too/targets/open_telemetry_target.rb', line 35

def call(telemetry)
  telemetry.each do |metric, value|
    instrument(metric).record(value, attributes: attributes)
  end

  meter_provider.force_flush if force_flush?
end

#instrument(metric) ⇒ Object



43
44
45
46
47
# File 'lib/puma/plugin/telemetry_too/targets/open_telemetry_target.rb', line 43

def instrument(metric)
  mutex.synchronize do
    instruments[metric] ||= create_gauge(metric)
  end
end