Class: OpenTelemetry::Metrics::Meter

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

Overview

No-op implementation of Meter.

Direct Known Subclasses

Internal::ProxyMeter

Constant Summary collapse

NAME_REGEX =
%r{\A[a-zA-Z][-./\w]{0,254}\z}
DuplicateInstrumentError =

rubocop:disable Style/EmptyClassDefinition

Class.new(OpenTelemetry::Error)
InstrumentNameError =
Class.new(OpenTelemetry::Error)
InstrumentUnitError =
Class.new(OpenTelemetry::Error)
InstrumentDescriptionError =
Class.new(OpenTelemetry::Error)

Instance Method Summary collapse

Constructor Details

#initializeMeter

rubocop:enable Style/EmptyClassDefinition



30
31
32
33
# File 'lib/opentelemetry/metrics/meter.rb', line 30

def initialize
  @mutex = Mutex.new
  @instrument_registry = {}
end

Instance Method Details

#create_counter(name, unit: nil, description: nil, exemplar_filter: nil, exemplar_reservoir: nil) ⇒ nil

Counter is a synchronous Instrument which supports non-negative increments.

With this api call:

exception_counter = meter.create_counter("exceptions",
                                       description: "number of exceptions caught",
                                       unit: 's',
                                       exemplar_filter: OpenTelemetry::SDK::Metrics::Exemplar::TraceBasedExemplarFilter,
                                       exemplar_reservoir: OpenTelemetry::SDK::Metrics::Exemplar::SimpleFixedSizeExemplarReservoir.new)

Parameters:

  • name (String)

    the name of the counter

  • unit (optional String) (defaults to: nil)

    an optional string provided by user.

  • description (optional String) (defaults to: nil)

    an optional free-form text provided by user.

  • exemplar_filter (optional Object) (defaults to: nil)

    an optional filter to control which measurements are eligible to become exemplars. Must respond to #should_sample?. Available SDK implementations:

    • OpenTelemetry::SDK::Metrics::Exemplar::AlwaysOnExemplarFilter - all measurements are eligible
    • OpenTelemetry::SDK::Metrics::Exemplar::AlwaysOffExemplarFilter - no measurements are eligible
    • OpenTelemetry::SDK::Metrics::Exemplar::TraceBasedExemplarFilter - only measurements in a sampled span context are eligible
  • exemplar_reservoir (optional Object) (defaults to: nil)

    an optional reservoir used to sample exemplars from eligible measurements. Must respond to #offer and #collect. Available SDK implementations:

    • OpenTelemetry::SDK::Metrics::Exemplar::SimpleFixedSizeExemplarReservoir - uniformly-weighted sampling
    • OpenTelemetry::SDK::Metrics::Exemplar::AlignedHistogramBucketExemplarReservoir - one exemplar per histogram bucket (recommended for histograms)
    • OpenTelemetry::SDK::Metrics::Exemplar::NoopExemplarReservoir - no-op, disables exemplar collection

Returns:

  • (nil)

    after creation of counter, it will be stored in instrument_registry



60
61
62
# File 'lib/opentelemetry/metrics/meter.rb', line 60

def create_counter(name, unit: nil, description: nil, exemplar_filter: nil, exemplar_reservoir: nil)
  create_instrument(:counter, name, unit, description, nil, exemplar_filter, exemplar_reservoir) { COUNTER }
end

#create_gauge(name, unit: nil, description: nil, exemplar_filter: nil, exemplar_reservoir: nil) ⇒ nil

Gauge is an synchronous Instrument which reports non-additive value(s)

With this api call:

meter.create_gauge("cpu.frequency",
                  description: "the real-time CPU clock speed",
                  unit: "ms",
                  exemplar_filter: OpenTelemetry::SDK::Metrics::Exemplar::TraceBasedExemplarFilter,
                  exemplar_reservoir: OpenTelemetry::SDK::Metrics::Exemplar::SimpleFixedSizeExemplarReservoir.new)

Parameters:

  • name (String)

    the name of the gauge.

  • unit (optional String) (defaults to: nil)

    an optional string provided by user.

  • description (optional String) (defaults to: nil)

    an optional free-form text provided by user.

  • exemplar_filter (optional Object) (defaults to: nil)

    an optional filter to control which measurements are eligible to become exemplars. Must respond to #should_sample?. Available SDK implementations:

    • OpenTelemetry::SDK::Metrics::Exemplar::AlwaysOnExemplarFilter - all measurements are eligible
    • OpenTelemetry::SDK::Metrics::Exemplar::AlwaysOffExemplarFilter - no measurements are eligible
    • OpenTelemetry::SDK::Metrics::Exemplar::TraceBasedExemplarFilter - only measurements in a sampled span context are eligible
  • exemplar_reservoir (optional Object) (defaults to: nil)

    an optional reservoir used to sample exemplars from eligible measurements. Must respond to #offer and #collect. Available SDK implementations:

    • OpenTelemetry::SDK::Metrics::Exemplar::SimpleFixedSizeExemplarReservoir - uniformly-weighted sampling
    • OpenTelemetry::SDK::Metrics::Exemplar::AlignedHistogramBucketExemplarReservoir - one exemplar per histogram bucket (recommended for histograms)
    • OpenTelemetry::SDK::Metrics::Exemplar::NoopExemplarReservoir - no-op, disables exemplar collection

Returns:

  • (nil)

    after creation of gauge, it will be stored in instrument_registry



120
121
122
# File 'lib/opentelemetry/metrics/meter.rb', line 120

def create_gauge(name, unit: nil, description: nil, exemplar_filter: nil, exemplar_reservoir: nil)
  create_instrument(:gauge, name, unit, description, nil, exemplar_filter, exemplar_reservoir) { GAUGE }
end

#create_histogram(name, unit: nil, description: nil, exemplar_filter: nil, exemplar_reservoir: nil) ⇒ nil

Histogram is a synchronous Instrument which can be used to report arbitrary values that are likely to be statistically meaningful. It is intended for statistics such as histograms, summaries, and percentiles.

With this api call:

http_server_duration = meter.create_histogram("http.server.duration",
                                            description: "measures the duration of the inbound HTTP request",
                                            unit: "s",
                                            exemplar_filter: OpenTelemetry::SDK::Metrics::Exemplar::TraceBasedExemplarFilter,
                                            exemplar_reservoir: OpenTelemetry::SDK::Metrics::Exemplar::AlignedHistogramBucketExemplarReservoir.new)

Parameters:

  • name (String)

    the name of the histogram

  • unit (optional String) (defaults to: nil)

    an optional string provided by user.

  • description (optional String) (defaults to: nil)

    an optional free-form text provided by user.

  • exemplar_filter (optional Object) (defaults to: nil)

    an optional filter to control which measurements are eligible to become exemplars. Must respond to #should_sample?. Available SDK implementations:

    • OpenTelemetry::SDK::Metrics::Exemplar::AlwaysOnExemplarFilter - all measurements are eligible
    • OpenTelemetry::SDK::Metrics::Exemplar::AlwaysOffExemplarFilter - no measurements are eligible
    • OpenTelemetry::SDK::Metrics::Exemplar::TraceBasedExemplarFilter - only measurements in a sampled span context are eligible
  • exemplar_reservoir (optional Object) (defaults to: nil)

    an optional reservoir used to sample exemplars from eligible measurements. Must respond to #offer and #collect. Available SDK implementations:

    • OpenTelemetry::SDK::Metrics::Exemplar::SimpleFixedSizeExemplarReservoir - uniformly-weighted sampling
    • OpenTelemetry::SDK::Metrics::Exemplar::AlignedHistogramBucketExemplarReservoir - one exemplar per histogram bucket (recommended for histograms)
    • OpenTelemetry::SDK::Metrics::Exemplar::NoopExemplarReservoir - no-op, disables exemplar collection

Returns:

  • (nil)

    after creation of histogram, it will be stored in instrument_registry



91
92
93
# File 'lib/opentelemetry/metrics/meter.rb', line 91

def create_histogram(name, unit: nil, description: nil, exemplar_filter: nil, exemplar_reservoir: nil)
  create_instrument(:histogram, name, unit, description, nil, exemplar_filter, exemplar_reservoir) { HISTOGRAM }
end

#create_observable_counter(name, callback:, unit: nil, description: nil, exemplar_filter: nil, exemplar_reservoir: nil) ⇒ nil

ObservableCounter is an asynchronous Instrument which reports monotonically increasing value(s) when the instrument is being observed.

With this api call:

pf_callback = -> { # collect metrics here }
meter.create_observable_counter("PF",
                               pf_callback,
                               description: "process page faults",
                               unit: 'ms',
                               exemplar_filter: OpenTelemetry::SDK::Metrics::Exemplar::TraceBasedExemplarFilter,
                               exemplar_reservoir: OpenTelemetry::SDK::Metrics::Exemplar::SimpleFixedSizeExemplarReservoir.new)

Parameters:

  • name (String)

    the name of the observable_counter

  • callback (Proc)

    the callback function that used to collect metrics

  • unit (optional String) (defaults to: nil)

    an optional string provided by user.

  • description (optional String) (defaults to: nil)

    an optional free-form text provided by user.

  • exemplar_filter (optional Object) (defaults to: nil)

    an optional filter to control which measurements are eligible to become exemplars. Must respond to #should_sample?. Available SDK implementations:

    • OpenTelemetry::SDK::Metrics::Exemplar::AlwaysOnExemplarFilter - all measurements are eligible
    • OpenTelemetry::SDK::Metrics::Exemplar::AlwaysOffExemplarFilter - no measurements are eligible
    • OpenTelemetry::SDK::Metrics::Exemplar::TraceBasedExemplarFilter - only measurements in a sampled span context are eligible
  • exemplar_reservoir (optional Object) (defaults to: nil)

    an optional reservoir used to sample exemplars from eligible measurements. Must respond to #offer and #collect. Available SDK implementations:

    • OpenTelemetry::SDK::Metrics::Exemplar::SimpleFixedSizeExemplarReservoir - uniformly-weighted sampling
    • OpenTelemetry::SDK::Metrics::Exemplar::AlignedHistogramBucketExemplarReservoir - one exemplar per histogram bucket (recommended for histograms)
    • OpenTelemetry::SDK::Metrics::Exemplar::NoopExemplarReservoir - no-op, disables exemplar collection

Returns:

  • (nil)

    after creation of observable_counter, it will be stored in instrument_registry



182
183
184
# File 'lib/opentelemetry/metrics/meter.rb', line 182

def create_observable_counter(name, callback:, unit: nil, description: nil, exemplar_filter: nil, exemplar_reservoir: nil)
  create_instrument(:observable_counter, name, unit, description, callback, exemplar_filter, exemplar_reservoir) { OBSERVABLE_COUNTER }
end

#create_observable_gauge(name, callback:, unit: nil, description: nil, exemplar_filter: nil, exemplar_reservoir: nil) ⇒ nil

ObservableGauge is an asynchronous Instrument which reports non-additive value(s) (e.g. the room temperature - it makes no sense to report the temperature value from multiple rooms and sum them up) when the instrument is being observed.

With this api call:

pf_callback = -> { # collect metrics here }
meter.create_observable_gauge("cpu.frequency",
                             pf_callback,
                             description: "the real-time CPU clock speed",
                             unit: 'ms',
                             exemplar_filter: OpenTelemetry::SDK::Metrics::Exemplar::TraceBasedExemplarFilter,
                             exemplar_reservoir: OpenTelemetry::SDK::Metrics::Exemplar::SimpleFixedSizeExemplarReservoir.new)

Parameters:

  • name (String)

    the name of the observable_gauge

  • callback (Proc)

    the callback function that used to collect metrics

  • unit (optional String) (defaults to: nil)

    an optional string provided by user.

  • description (optional String) (defaults to: nil)

    an optional free-form text provided by user.

  • exemplar_filter (optional Object) (defaults to: nil)

    an optional filter to control which measurements are eligible to become exemplars. Must respond to #should_sample?. Available SDK implementations:

    • OpenTelemetry::SDK::Metrics::Exemplar::AlwaysOnExemplarFilter - all measurements are eligible
    • OpenTelemetry::SDK::Metrics::Exemplar::AlwaysOffExemplarFilter - no measurements are eligible
    • OpenTelemetry::SDK::Metrics::Exemplar::TraceBasedExemplarFilter - only measurements in a sampled span context are eligible
  • exemplar_reservoir (optional Object) (defaults to: nil)

    an optional reservoir used to sample exemplars from eligible measurements. Must respond to #offer and #collect. Available SDK implementations:

    • OpenTelemetry::SDK::Metrics::Exemplar::SimpleFixedSizeExemplarReservoir - uniformly-weighted sampling
    • OpenTelemetry::SDK::Metrics::Exemplar::AlignedHistogramBucketExemplarReservoir - one exemplar per histogram bucket (recommended for histograms)
    • OpenTelemetry::SDK::Metrics::Exemplar::NoopExemplarReservoir - no-op, disables exemplar collection

Returns:

  • (nil)

    after creation of observable_gauge, it will be stored in instrument_registry



216
217
218
# File 'lib/opentelemetry/metrics/meter.rb', line 216

def create_observable_gauge(name, callback:, unit: nil, description: nil, exemplar_filter: nil, exemplar_reservoir: nil)
  create_instrument(:observable_gauge, name, unit, description, callback, exemplar_filter, exemplar_reservoir) { OBSERVABLE_GAUGE }
end

#create_observable_up_down_counter(name, callback:, unit: nil, description: nil, exemplar_filter: nil, exemplar_reservoir: nil) ⇒ nil

ObservableUpDownCounter is an asynchronous Instrument which reports additive value(s) (e.g. the process heap size - it makes sense to report the heap size from multiple processes and sum them up, so we get the total heap usage) when the instrument is being observed.

With this api call:

pf_callback = -> { # collect metrics here }
meter.create_observable_up_down_counter("process.workingset",
                                       pf_callback,
                                       description: "process working set",
                                       unit: 'KB',
                                       exemplar_filter: OpenTelemetry::SDK::Metrics::Exemplar::TraceBasedExemplarFilter,
                                       exemplar_reservoir: OpenTelemetry::SDK::Metrics::Exemplar::SimpleFixedSizeExemplarReservoir.new)

Parameters:

  • name (String)

    the name of the observable_up_down_counter

  • callback (Proc)

    the callback function that used to collect metrics

  • unit (optional String) (defaults to: nil)

    an optional string provided by user.

  • description (optional String) (defaults to: nil)

    an optional free-form text provided by user.

  • exemplar_filter (optional Object) (defaults to: nil)

    an optional filter to control which measurements are eligible to become exemplars. Must respond to #should_sample?. Available SDK implementations:

    • OpenTelemetry::SDK::Metrics::Exemplar::AlwaysOnExemplarFilter - all measurements are eligible
    • OpenTelemetry::SDK::Metrics::Exemplar::AlwaysOffExemplarFilter - no measurements are eligible
    • OpenTelemetry::SDK::Metrics::Exemplar::TraceBasedExemplarFilter - only measurements in a sampled span context are eligible
  • exemplar_reservoir (optional Object) (defaults to: nil)

    an optional reservoir used to sample exemplars from eligible measurements. Must respond to #offer and #collect. Available SDK implementations:

    • OpenTelemetry::SDK::Metrics::Exemplar::SimpleFixedSizeExemplarReservoir - uniformly-weighted sampling
    • OpenTelemetry::SDK::Metrics::Exemplar::AlignedHistogramBucketExemplarReservoir - one exemplar per histogram bucket (recommended for histograms)
    • OpenTelemetry::SDK::Metrics::Exemplar::NoopExemplarReservoir - no-op, disables exemplar collection

Returns:

  • (nil)

    after creation of observable_up_down_counter, it will be stored in instrument_registry



250
251
252
# File 'lib/opentelemetry/metrics/meter.rb', line 250

def create_observable_up_down_counter(name, callback:, unit: nil, description: nil, exemplar_filter: nil, exemplar_reservoir: nil)
  create_instrument(:observable_up_down_counter, name, unit, description, callback, exemplar_filter, exemplar_reservoir) { OBSERVABLE_UP_DOWN_COUNTER }
end

#create_up_down_counter(name, unit: nil, description: nil, exemplar_filter: nil, exemplar_reservoir: nil) ⇒ nil

UpDownCounter is a synchronous Instrument which supports increments and decrements.

With this api call:

items_counter = meter.create_up_down_counter("store.inventory",
                                           description: "the number of the items available",
                                           unit: "s",
                                           exemplar_filter: OpenTelemetry::SDK::Metrics::Exemplar::TraceBasedExemplarFilter,
                                           exemplar_reservoir: OpenTelemetry::SDK::Metrics::Exemplar::SimpleFixedSizeExemplarReservoir.new)

Parameters:

  • name (String)

    the name of the up_down_counter

  • unit (optional String) (defaults to: nil)

    an optional string provided by user.

  • description (optional String) (defaults to: nil)

    an optional free-form text provided by user.

  • exemplar_filter (optional Object) (defaults to: nil)

    an optional filter to control which measurements are eligible to become exemplars. Must respond to #should_sample?. Available SDK implementations:

    • OpenTelemetry::SDK::Metrics::Exemplar::AlwaysOnExemplarFilter - all measurements are eligible
    • OpenTelemetry::SDK::Metrics::Exemplar::AlwaysOffExemplarFilter - no measurements are eligible
    • OpenTelemetry::SDK::Metrics::Exemplar::TraceBasedExemplarFilter - only measurements in a sampled span context are eligible
  • exemplar_reservoir (optional Object) (defaults to: nil)

    an optional reservoir used to sample exemplars from eligible measurements. Must respond to #offer and #collect. Available SDK implementations:

    • OpenTelemetry::SDK::Metrics::Exemplar::SimpleFixedSizeExemplarReservoir - uniformly-weighted sampling
    • OpenTelemetry::SDK::Metrics::Exemplar::AlignedHistogramBucketExemplarReservoir - one exemplar per histogram bucket (recommended for histograms)
    • OpenTelemetry::SDK::Metrics::Exemplar::NoopExemplarReservoir - no-op, disables exemplar collection

Returns:

  • (nil)

    after creation of up_down_counter, it will be stored in instrument_registry



149
150
151
# File 'lib/opentelemetry/metrics/meter.rb', line 149

def create_up_down_counter(name, unit: nil, description: nil, exemplar_filter: nil, exemplar_reservoir: nil)
  create_instrument(:up_down_counter, name, unit, description, nil, exemplar_filter, exemplar_reservoir) { UP_DOWN_COUNTER }
end