Class: OpenTelemetry::SDK::Metrics::MeterProvider
- Inherits:
-
Metrics::MeterProvider
- Object
- Metrics::MeterProvider
- OpenTelemetry::SDK::Metrics::MeterProvider
- Defined in:
- lib/opentelemetry/sdk/metrics/meter_provider.rb
Overview
MeterProvider is the SDK implementation of Metrics::MeterProvider. rubocop:disable Metrics/ClassLength
Instance Attribute Summary collapse
-
#exemplar_filter ⇒ Object
readonly
Returns the value of attribute exemplar_filter.
-
#metric_readers ⇒ Object
readonly
Returns the value of attribute metric_readers.
-
#registered_views ⇒ Object
readonly
Returns the value of attribute registered_views.
-
#resource ⇒ Object
readonly
Returns the value of attribute resource.
Instance Method Summary collapse
-
#add_metric_reader(metric_reader) ⇒ Object
Adds a new MetricReader to this MeterProvider.
-
#add_view(name, **options) ⇒ nil
A View provides SDK users with the flexibility to customize the metrics that are output by the SDK.
-
#disable_exemplar_filter ⇒ Object
turn off exemplar_filter by setting the exemplar_fitler to AlwaysOffExemplarFilter.
-
#enable_exemplar_filter(exemplar_filter: Exemplar::TraceBasedExemplarFilter) ⇒ Object
Adds a new exemplar_filter to replace exist exemplar_filter Default to TraceBasedExemplarFilter.
-
#exemplar_filter_setup ⇒ Object
spec: https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/sdk-environment-variables.md#exemplar this is one way to turn on the exemplar (exemplar should be turned off by default).
-
#force_flush(timeout: nil) ⇒ Integer
This method provides a way for provider to notify the registered MetricReader instances, so they can do as much as they could to consume or send the metrics.
-
#initialize(resource: OpenTelemetry::SDK::Resources::Resource.create) ⇒ MeterProvider
constructor
A new instance of MeterProvider.
-
#meter(name, version: nil) ⇒ Meter
Returns a Meter instance.
- #register_synchronous_instrument(instrument) ⇒ Object (also: #register_asynchronous_instrument) private
-
#shutdown(timeout: nil) ⇒ Integer
Attempts to stop all the activity for this MeterProvider.
Constructor Details
#initialize(resource: OpenTelemetry::SDK::Resources::Resource.create) ⇒ MeterProvider
Returns a new instance of MeterProvider.
20 21 22 23 24 25 26 27 28 |
# File 'lib/opentelemetry/sdk/metrics/meter_provider.rb', line 20 def initialize(resource: OpenTelemetry::SDK::Resources::Resource.create) @mutex = Mutex.new @meter_registry = {} @stopped = false @metric_readers = [] @resource = resource @registered_views = [] exemplar_filter_setup end |
Instance Attribute Details
#exemplar_filter ⇒ Object (readonly)
Returns the value of attribute exemplar_filter.
18 19 20 |
# File 'lib/opentelemetry/sdk/metrics/meter_provider.rb', line 18 def exemplar_filter @exemplar_filter end |
#metric_readers ⇒ Object (readonly)
Returns the value of attribute metric_readers.
18 19 20 |
# File 'lib/opentelemetry/sdk/metrics/meter_provider.rb', line 18 def metric_readers @metric_readers end |
#registered_views ⇒ Object (readonly)
Returns the value of attribute registered_views.
18 19 20 |
# File 'lib/opentelemetry/sdk/metrics/meter_provider.rb', line 18 def registered_views @registered_views end |
#resource ⇒ Object (readonly)
Returns the value of attribute resource.
18 19 20 |
# File 'lib/opentelemetry/sdk/metrics/meter_provider.rb', line 18 def resource @resource end |
Instance Method Details
#add_metric_reader(metric_reader) ⇒ Object
Adds a new MetricReader to this OpenTelemetry::SDK::Metrics::MeterProvider.
110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/opentelemetry/sdk/metrics/meter_provider.rb', line 110 def add_metric_reader(metric_reader) @mutex.synchronize do if @stopped OpenTelemetry.logger.warn('calling MetricProvider#add_metric_reader after shutdown.') else @metric_readers.push(metric_reader) @meter_registry.each_value { |meter| meter.add_metric_reader(metric_reader) } end nil end end |
#add_view(name, **options) ⇒ nil
A View provides SDK users with the flexibility to customize the metrics that are output by the SDK.
Example:
OpenTelemetry.meter_provider.add_view('test', :aggregation => Aggregation::Drop.new, :type => :counter, :unit => 'smidgen', :meter_name => 'test', :meter_version => '1.0')
182 183 184 185 186 |
# File 'lib/opentelemetry/sdk/metrics/meter_provider.rb', line 182 def add_view(name, **) # TODO: add schema_url as part of options @registered_views << View::RegisteredView.new(name, **) nil end |
#disable_exemplar_filter ⇒ Object
turn off exemplar_filter by setting the exemplar_fitler to AlwaysOffExemplarFilter
158 159 160 |
# File 'lib/opentelemetry/sdk/metrics/meter_provider.rb', line 158 def disable_exemplar_filter @exemplar_filter = Exemplar::AlwaysOffExemplarFilter end |
#enable_exemplar_filter(exemplar_filter: Exemplar::TraceBasedExemplarFilter) ⇒ Object
Adds a new exemplar_filter to replace exist exemplar_filter Default to TraceBasedExemplarFilter
153 154 155 |
# File 'lib/opentelemetry/sdk/metrics/meter_provider.rb', line 153 def enable_exemplar_filter(exemplar_filter: Exemplar::TraceBasedExemplarFilter) @exemplar_filter = exemplar_filter end |
#exemplar_filter_setup ⇒ Object
spec: https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/sdk-environment-variables.md#exemplar this is one way to turn on the exemplar (exemplar should be turned off by default)
135 136 137 138 139 140 141 142 143 144 145 146 147 |
# File 'lib/opentelemetry/sdk/metrics/meter_provider.rb', line 135 def exemplar_filter_setup case ENV['OTEL_METRICS_EXEMPLAR_FILTER'] when 'always_on' @exemplar_filter = Exemplar::AlwaysOnExemplarFilter when 'trace_based' @exemplar_filter = Exemplar::TraceBasedExemplarFilter when 'always_off' @exemplar_filter = Exemplar::AlwaysOffExemplarFilter else OpenTelemetry.logger.warn("OTEL_METRICS_EXEMPLAR_FILTER #{ENV['OTEL_METRICS_EXEMPLAR_FILTER']} is not part of the provided exemplar filters. Exemplar is off.") @exemplar_filter = Exemplar::AlwaysOffExemplarFilter end end |
#force_flush(timeout: nil) ⇒ Integer
This method provides a way for provider to notify the registered MetricReader instances, so they can do as much as they could to consume or send the metrics. Note: unlike Push Metric Exporter which can send data on its own schedule, Pull Metric Exporter can only send the data when it is being asked by the scraper, so ForceFlush would not make much sense.
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/opentelemetry/sdk/metrics/meter_provider.rb', line 87 def force_flush(timeout: nil) @mutex.synchronize do if @stopped Export::SUCCESS else start_time = OpenTelemetry::Common::Utilities. results = @metric_readers.map do |metric_reader| remaining_timeout = OpenTelemetry::Common::Utilities.maybe_timeout(timeout, start_time) if remaining_timeout&.zero? Export::TIMEOUT else metric_reader.force_flush(timeout: remaining_timeout) end end results.max || Export::SUCCESS end end end |
#meter(name, version: nil) ⇒ Meter
Returns a OpenTelemetry::SDK::Metrics::Meter instance.
36 37 38 39 40 41 42 43 44 45 |
# File 'lib/opentelemetry/sdk/metrics/meter_provider.rb', line 36 def meter(name, version: nil) version ||= '' if @stopped OpenTelemetry.logger.warn 'calling MeterProvider#meter after shutdown, a noop meter will be returned.' OpenTelemetry::Metrics::Meter.new else OpenTelemetry.logger.warn "Invalid meter name provided: #{name.nil? ? 'nil' : 'empty'} value" if name.to_s.empty? @mutex.synchronize { @meter_registry[Key.new(name, version)] ||= Meter.new(name, version, self) } end end |
#register_synchronous_instrument(instrument) ⇒ Object Also known as: register_asynchronous_instrument
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
124 125 126 127 128 129 130 |
# File 'lib/opentelemetry/sdk/metrics/meter_provider.rb', line 124 def register_synchronous_instrument(instrument) @mutex.synchronize do @metric_readers.each do |mr| instrument.register_with_new_metric_store(mr.metric_store) end end end |
#shutdown(timeout: nil) ⇒ Integer
Attempts to stop all the activity for this OpenTelemetry::SDK::Metrics::MeterProvider.
Calls MetricReader#shutdown for all registered MetricReaders.
After this is called all the newly created OpenTelemetry::SDK::Metrics::Meters will be no-op.
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/opentelemetry/sdk/metrics/meter_provider.rb', line 56 def shutdown(timeout: nil) @mutex.synchronize do if @stopped OpenTelemetry.logger.warn('calling MetricProvider#shutdown multiple times.') Export::FAILURE else start_time = OpenTelemetry::Common::Utilities. results = @metric_readers.map do |metric_reader| remaining_timeout = OpenTelemetry::Common::Utilities.maybe_timeout(timeout, start_time) if remaining_timeout&.zero? Export::TIMEOUT else metric_reader.shutdown(timeout: remaining_timeout) end end @stopped = true results.max || Export::SUCCESS end end end |