opentelemetry-metrics-sdk 0.13.0 → 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 +4 -4
- data/CHANGELOG.md +11 -0
- data/README.md +65 -1
- data/lib/opentelemetry/sdk/metrics/exemplar/exemplar_reservoir.rb +12 -0
- data/lib/opentelemetry/sdk/metrics/exemplar/noop_exemplar_reservoir.rb +4 -0
- data/lib/opentelemetry/sdk/metrics/meter_provider.rb +3 -5
- data/lib/opentelemetry/sdk/metrics/state/metric_stream.rb +2 -0
- data/lib/opentelemetry/sdk/metrics/version.rb +1 -1
- data/lib/opentelemetry/sdk/metrics.rb +4 -0
- data/lib/opentelemetry-metrics-sdk.rb +0 -2
- metadata +4 -18
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 35222d1da9eadba8252b7110b20a504a5e5b339c7ecc50403b3d6056f6b2c282
|
|
4
|
+
data.tar.gz: 23732ae05bea5b79aa6678f636e429d5958a35b96cf7dbd54846212db33d6727
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 81abb739ad7ee5191f98d3577a2a7f65323dbb567ba137def5a0f35cf3937caf61f442e6ef3b8320d5cc2c0e6083c02a1f32e58d955d09461df1742f5df0e967
|
|
7
|
+
data.tar.gz: 83031636bdddd8317ca29fc8cf21f7bd17ca2f37cc06e16faba61b82d5286ea8e1c218de32461beb647ce8fd6a49928a0f73f26f26e0e219f19276214a744a5b
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
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
|
+
|
|
10
|
+
### v0.13.1 / 2026-04-15
|
|
11
|
+
|
|
12
|
+
* FIXED: Move the metrics-sdk requires to support "require 'opentelemetry/sdk/metrics'" (#1956)
|
|
13
|
+
|
|
3
14
|
### v0.13.0 / 2026-04-07
|
|
4
15
|
|
|
5
16
|
* ADDED: Min Ruby Version 3.3 (#2070)
|
data/README.md
CHANGED
|
@@ -37,10 +37,13 @@ At this time, you should be able to:
|
|
|
37
37
|
* `ConsoleMetricPullExporter`
|
|
38
38
|
* `InMemoryMetricPullExporter` (for testing)
|
|
39
39
|
* Export metrics on a schedule using `PeriodicMetricReader` with any compatible push exporter (e.g. OTLP via `opentelemetry-exporter-otlp-metrics`)
|
|
40
|
+
* Attach exemplars to metric data points for trace correlation:
|
|
41
|
+
* `AlwaysOnExemplarFilter` — every measurement is eligible
|
|
42
|
+
* `AlwaysOffExemplarFilter` — no exemplars collected
|
|
43
|
+
* `TraceBasedExemplarFilter` — only measurements inside a sampled trace (default)
|
|
40
44
|
|
|
41
45
|
We do not yet have support for:
|
|
42
46
|
|
|
43
|
-
* Metrics Exemplars
|
|
44
47
|
* `schema_url` in view configuration
|
|
45
48
|
|
|
46
49
|
These lists are incomplete and are intended to give a broad description of what's available.
|
|
@@ -271,6 +274,67 @@ counter.add(1, attributes: { 'service' => 'web' })
|
|
|
271
274
|
OpenTelemetry.meter_provider.shutdown
|
|
272
275
|
```
|
|
273
276
|
|
|
277
|
+
### Exemplars
|
|
278
|
+
|
|
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
|
+
|
|
281
|
+
By default, exemplars use `TraceBasedExemplarFilter`, which records measurements only when they occur inside a sampled trace.
|
|
282
|
+
|
|
283
|
+
#### Enable via environment variable
|
|
284
|
+
|
|
285
|
+
```bash
|
|
286
|
+
# Eligible only when the measurement occurs inside a sampled trace (recommended)
|
|
287
|
+
export OTEL_METRICS_EXEMPLAR_FILTER=trace_based
|
|
288
|
+
|
|
289
|
+
# Eligible for every measurement regardless of trace context
|
|
290
|
+
export OTEL_METRICS_EXEMPLAR_FILTER=always_on
|
|
291
|
+
|
|
292
|
+
# Disabled
|
|
293
|
+
export OTEL_METRICS_EXEMPLAR_FILTER=always_off
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
#### Enable programmatically
|
|
297
|
+
|
|
298
|
+
```ruby
|
|
299
|
+
require 'opentelemetry/sdk'
|
|
300
|
+
require 'opentelemetry-metrics-sdk'
|
|
301
|
+
|
|
302
|
+
ENV['OTEL_METRICS_EXPORTER'] = 'none'
|
|
303
|
+
OpenTelemetry::SDK.configure
|
|
304
|
+
|
|
305
|
+
exporter = OpenTelemetry::SDK::Metrics::Export::ConsoleMetricPullExporter.new
|
|
306
|
+
OpenTelemetry.meter_provider.add_metric_reader(exporter)
|
|
307
|
+
|
|
308
|
+
# Enable exemplar, by default using trace_based
|
|
309
|
+
OpenTelemetry.meter_provider.enable_exemplar_filter
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
#### AlwaysOn Exemplars and Customized Exemplars
|
|
313
|
+
|
|
314
|
+
```ruby
|
|
315
|
+
# Use AlwaysOn Exemplars
|
|
316
|
+
OpenTelemetry.meter_provider.enable_exemplar_filter(
|
|
317
|
+
exemplar_filter: OpenTelemetry::SDK::Metrics::Exemplar::AlwaysOnExemplarFilter
|
|
318
|
+
)
|
|
319
|
+
|
|
320
|
+
# Customized Exemplars
|
|
321
|
+
class CustomExemplarFilter < OpenTelemetry::SDK::Metrics::Exemplar::ExemplarFilter
|
|
322
|
+
def self.should_sample?(value, timestamp, attributes, context)
|
|
323
|
+
# customized logic to determine should sample
|
|
324
|
+
end
|
|
325
|
+
end
|
|
326
|
+
|
|
327
|
+
OpenTelemetry.meter_provider.enable_exemplar_filter(
|
|
328
|
+
exemplar_filter: CustomExemplarFilter
|
|
329
|
+
)
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
#### Disabling exemplars
|
|
333
|
+
|
|
334
|
+
```ruby
|
|
335
|
+
OpenTelemetry.meter_provider.disable_exemplar_filter
|
|
336
|
+
```
|
|
337
|
+
|
|
274
338
|
### Using InMemoryMetricPullExporter for testing
|
|
275
339
|
|
|
276
340
|
```ruby
|
|
@@ -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
|
|
@@ -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.
|
|
145
|
-
@exemplar_filter = Exemplar::
|
|
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)
|
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
#
|
|
5
5
|
# SPDX-License-Identifier: Apache-2.0
|
|
6
6
|
|
|
7
|
+
require 'opentelemetry/sdk'
|
|
8
|
+
require 'opentelemetry-metrics-api'
|
|
9
|
+
|
|
7
10
|
module OpenTelemetry
|
|
8
11
|
module SDK
|
|
9
12
|
# The Metrics module contains the OpenTelemetry metrics reference
|
|
@@ -13,6 +16,7 @@ module OpenTelemetry
|
|
|
13
16
|
end
|
|
14
17
|
end
|
|
15
18
|
|
|
19
|
+
require 'opentelemetry/sdk/metrics/version'
|
|
16
20
|
require 'opentelemetry/sdk/metrics/exemplar'
|
|
17
21
|
require 'opentelemetry/sdk/metrics/aggregation'
|
|
18
22
|
require 'opentelemetry/sdk/metrics/configurator_patch'
|
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.
|
|
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.
|
|
237
|
-
source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/
|
|
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.
|
|
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
|