Class: Puma::Plugin::TelemetryToo::Targets::OpenTelemetryTarget
- Inherits:
-
Object
- Object
- Puma::Plugin::TelemetryToo::Targets::OpenTelemetryTarget
- 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
- #call(telemetry) ⇒ Object
-
#initialize(meter_provider: ::OpenTelemetry.meter_provider, prefix: 'puma', suffix: nil, force_flush: false, attributes: {}) ⇒ OpenTelemetryTarget
constructor
A new instance of OpenTelemetryTarget.
- #instrument(metric) ⇒ Object
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 |