Class: Couchbase::OpenTelemetry::Meter

Inherits:
Metrics::Meter
  • Object
show all
Defined in:
lib/couchbase/opentelemetry/meter.rb

Instance Method Summary collapse

Constructor Details

#initialize(meter_provider) ⇒ Meter

Initializes a Couchbase OpenTelemetry Meter

Examples:

Initializing a Couchbase OpenTelemetry Meter with an OTLP Exporter

require "opentelemetry-metrics-sdk"

# Initialize a meter provider
meter_provider = ::OpenTelemetry::SDK::Metrics::MeterProvider.new
meter_provider.add_metric_reader(
    ::OpenTelemetry::SDK::Metrics::Export::PeriodicMetricReader.new(
        exporter: ::OpenTelemetry::Exporter::OTLP::Metrics::MetricsExporter.new(
            endpoint: "https://<hostname>:<port>/v1/metrics"
       )
    )
)
# Initialize the Couchbase OpenTelemetry Meter
meter = Couchbase::OpenTelemetry::Meter.new(meter_provider)

# Set the meter in the cluster options
options = Couchbase::Options::Cluster.new(
   authenticator: Couchbase::PasswordAuthenticator.new("Administrator", "password")
   meter: meter
)

Parameters:

  • meter_provider (::OpenTelemetry::Metrics::MeterProvider)

    The OpenTelemetry meter provider

Raises:

  • (Couchbase::Error::MeterError)

    if the meter cannot be created for any reason

See Also:



59
60
61
62
63
64
65
66
67
# File 'lib/couchbase/opentelemetry/meter.rb', line 59

def initialize(meter_provider)
  super()
  @histogram_cache = Concurrent::Map.new
  begin
    @wrapped = meter_provider.meter("com.couchbase.client/ruby")
  rescue StandardError => e
    raise Error::MeterError.new("Failed to create OpenTelemetry Meter: #{e.message}", nil, e)
  end
end

Instance Method Details

#value_recorder(name, tags) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
# File 'lib/couchbase/opentelemetry/meter.rb', line 69

def value_recorder(name, tags)
  unit = tags.delete("__unit")

  otel_histogram = @histogram_cache.compute_if_absent(name) do
    @wrapped.create_histogram(name, unit: unit)
  end

  ValueRecorder.new(otel_histogram, tags, unit: unit)
rescue StandardError => e
  raise Error::MeterError.new("Failed to create OpenTelemetry Histogram: #{e.message}", nil, e)
end