opentelemetry-metrics-sdk 0.13.1 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7334096b386c7cfbef752c28e4f0e21f10dad2fd6c7d200a6b2ac005199c1aa4
4
- data.tar.gz: a885b64ee8021d1c53fcd647c114ae919197d4596aec37c72743f75b20e4e255
3
+ metadata.gz: 35222d1da9eadba8252b7110b20a504a5e5b339c7ecc50403b3d6056f6b2c282
4
+ data.tar.gz: 23732ae05bea5b79aa6678f636e429d5958a35b96cf7dbd54846212db33d6727
5
5
  SHA512:
6
- metadata.gz: 1ec27c0c72f390a2d48c533ba021d714987f5183983e2aa968f0f03e8b07dadc2b63dce78c3b9379d9abfd22737f859745c9c3ce17d38520dfaee1a4dd652d89
7
- data.tar.gz: 0c706c3757af11cd8cc65bdc07aea5498f88aabcf1d683f9178502f440cd5dc46a3b86e29a80ca0e21429ad5f4ae5d5412dce3f453b803b9733b51091ea19c4c
6
+ metadata.gz: 81abb739ad7ee5191f98d3577a2a7f65323dbb567ba137def5a0f35cf3937caf61f442e6ef3b8320d5cc2c0e6083c02a1f32e58d955d09461df1742f5df0e967
7
+ data.tar.gz: 83031636bdddd8317ca29fc8cf21f7bd17ca2f37cc06e16faba61b82d5286ea8e1c218de32461beb647ce8fd6a49928a0f73f26f26e0e219f19276214a744a5b
data/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Release History: opentelemetry-metrics-sdk
2
2
 
3
+ ### v0.14.0 / 2026-05-12
4
+
5
+ * BREAKING CHANGE: Use trace_based exemplar filter by default (#2112)
6
+ * ADDED: Use trace_based exemplar filter by default (#2112)
7
+ * ADDED: Add git tag to source URI in gemspec (#2101)
8
+ * FIXED: Return false if it is noop_exemplar_reservoir (#2104)
9
+
3
10
  ### v0.13.1 / 2026-04-15
4
11
 
5
12
  * FIXED: Move the metrics-sdk requires to support "require 'opentelemetry/sdk/metrics'" (#1956)
data/README.md CHANGED
@@ -39,8 +39,8 @@ At this time, you should be able to:
39
39
  * Export metrics on a schedule using `PeriodicMetricReader` with any compatible push exporter (e.g. OTLP via `opentelemetry-exporter-otlp-metrics`)
40
40
  * Attach exemplars to metric data points for trace correlation:
41
41
  * `AlwaysOnExemplarFilter` — every measurement is eligible
42
- * `AlwaysOffExemplarFilter` — no exemplars collected (default)
43
- * `TraceBasedExemplarFilter` — only measurements inside a sampled trace
42
+ * `AlwaysOffExemplarFilter` — no exemplars collected
43
+ * `TraceBasedExemplarFilter` — only measurements inside a sampled trace (default)
44
44
 
45
45
  We do not yet have support for:
46
46
 
@@ -278,7 +278,7 @@ OpenTelemetry.meter_provider.shutdown
278
278
 
279
279
  Exemplars attach individual raw measurements — along with the trace context active at the time of the measurement — to an exported metric data point. This lets you jump from a metric spike directly to the trace that caused it.
280
280
 
281
- By default exemplars are **disabled** (`AlwaysOffExemplarFilter`). Enable them via an environment variable or programmatically.
281
+ By default, exemplars use `TraceBasedExemplarFilter`, which records measurements only when they occur inside a sampled trace.
282
282
 
283
283
  #### Enable via environment variable
284
284
 
@@ -289,7 +289,7 @@ export OTEL_METRICS_EXEMPLAR_FILTER=trace_based
289
289
  # Eligible for every measurement regardless of trace context
290
290
  export OTEL_METRICS_EXEMPLAR_FILTER=always_on
291
291
 
292
- # Disabled (default)
292
+ # Disabled
293
293
  export OTEL_METRICS_EXEMPLAR_FILTER=always_off
294
294
  ```
295
295
 
@@ -32,6 +32,18 @@ module OpenTelemetry
32
32
  def collect(attributes: nil, aggregation_temporality: :delta)
33
33
  raise NotImplementedError, "#{self.class} must implement #collect"
34
34
  end
35
+
36
+ # Called after dup to reset internal state before reuse for a new attribute set.
37
+ # Subclasses that hold mutable per-attribute state must override this.
38
+ def reset; end
39
+
40
+ # Returns true if this reservoir never stores exemplars.
41
+ # Used to skip the exemplar filter and timestamp lookups entirely.
42
+ #
43
+ # @return [Boolean]
44
+ def noop?
45
+ false
46
+ end
35
47
  end
36
48
  end
37
49
  end
@@ -15,6 +15,10 @@ module OpenTelemetry
15
15
  def collect(attributes: nil, aggregation_temporality: :delta)
16
16
  []
17
17
  end
18
+
19
+ def noop?
20
+ true
21
+ end
18
22
  end
19
23
  end
20
24
  end
@@ -130,19 +130,17 @@ module OpenTelemetry
130
130
  end
131
131
  alias register_asynchronous_instrument register_synchronous_instrument
132
132
 
133
- # spec: https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/sdk-environment-variables.md#exemplar
134
- # this is one way to turn on the exemplar (exemplar should be turned off by default)
135
133
  def exemplar_filter_setup
136
134
  case ENV['OTEL_METRICS_EXEMPLAR_FILTER']
137
135
  when 'always_on'
138
136
  @exemplar_filter = Exemplar::AlwaysOnExemplarFilter
139
- when 'trace_based'
137
+ when nil, '', 'trace_based'
140
138
  @exemplar_filter = Exemplar::TraceBasedExemplarFilter
141
139
  when 'always_off'
142
140
  @exemplar_filter = Exemplar::AlwaysOffExemplarFilter
143
141
  else
144
- OpenTelemetry.logger.warn("OTEL_METRICS_EXEMPLAR_FILTER #{ENV['OTEL_METRICS_EXEMPLAR_FILTER']} is not part of the provided exemplar filters. Exemplar is off.")
145
- @exemplar_filter = Exemplar::AlwaysOffExemplarFilter
142
+ OpenTelemetry.logger.warn("OTEL_METRICS_EXEMPLAR_FILTER #{ENV['OTEL_METRICS_EXEMPLAR_FILTER']} is not part of the provided exemplar filters. Using trace_based.")
143
+ @exemplar_filter = Exemplar::TraceBasedExemplarFilter
146
144
  end
147
145
  end
148
146
 
@@ -120,6 +120,8 @@ module OpenTelemetry
120
120
  end
121
121
 
122
122
  def should_offer_exemplar?(value, attributes)
123
+ return false if @exemplar_reservoir&.noop?
124
+
123
125
  context = OpenTelemetry::Context.current
124
126
  time = OpenTelemetry::Common::Utilities.time_in_nanoseconds
125
127
  @exemplar_filter&.should_sample?(value, time, attributes, context)
@@ -8,7 +8,7 @@ module OpenTelemetry
8
8
  module SDK
9
9
  module Metrics
10
10
  # Current OpenTelemetry metrics sdk version
11
- VERSION = '0.13.1'
11
+ VERSION = '0.14.0'
12
12
  end
13
13
  end
14
14
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opentelemetry-metrics-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.1
4
+ version: 0.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenTelemetry Authors
@@ -51,20 +51,6 @@ dependencies:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
53
  version: '1.2'
54
- - !ruby/object:Gem::Dependency
55
- name: benchmark-ipsa
56
- requirement: !ruby/object:Gem::Requirement
57
- requirements:
58
- - - "~>"
59
- - !ruby/object:Gem::Version
60
- version: 0.2.0
61
- type: :development
62
- prerelease: false
63
- version_requirements: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - "~>"
66
- - !ruby/object:Gem::Version
67
- version: 0.2.0
68
54
  - !ruby/object:Gem::Dependency
69
55
  name: minitest
70
56
  requirement: !ruby/object:Gem::Requirement
@@ -233,10 +219,10 @@ homepage: https://github.com/open-telemetry/opentelemetry-ruby
233
219
  licenses:
234
220
  - Apache-2.0
235
221
  metadata:
236
- changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-metrics-sdk/v0.13.1/file.CHANGELOG.html
237
- source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/main/metrics_sdk
222
+ changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-metrics-sdk/v0.14.0/file.CHANGELOG.html
223
+ source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/opentelemetry-metrics-sdk/v0.14.0/metrics_sdk
238
224
  bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby/issues
239
- documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-metrics-sdk/v0.13.1
225
+ documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-metrics-sdk/v0.14.0
240
226
  rdoc_options: []
241
227
  require_paths:
242
228
  - lib