opentelemetry-sdk 0.14.0 → 1.0.0.rc2
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 +110 -44
- data/README.md +2 -2
- data/lib/opentelemetry/sdk.rb +4 -3
- data/lib/opentelemetry/sdk/configurator.rb +52 -33
- data/lib/opentelemetry/sdk/forwarding_logger.rb +69 -0
- data/lib/opentelemetry/sdk/internal.rb +3 -3
- data/lib/opentelemetry/sdk/resources/constants.rb +48 -3
- data/lib/opentelemetry/sdk/resources/resource.rb +8 -1
- data/lib/opentelemetry/sdk/trace.rb +2 -3
- data/lib/opentelemetry/sdk/trace/event.rb +7 -36
- data/lib/opentelemetry/sdk/trace/export.rb +1 -2
- data/lib/opentelemetry/sdk/trace/export/batch_span_processor.rb +10 -5
- data/lib/opentelemetry/sdk/trace/export/console_span_exporter.rb +4 -0
- data/lib/opentelemetry/sdk/trace/export/in_memory_span_exporter.rb +23 -4
- data/lib/opentelemetry/sdk/trace/export/simple_span_processor.rb +4 -2
- data/lib/opentelemetry/sdk/trace/export/{noop_span_exporter.rb → span_exporter.rb} +18 -7
- data/lib/opentelemetry/sdk/trace/span.rb +83 -39
- data/lib/opentelemetry/sdk/trace/span_data.rb +25 -18
- data/lib/opentelemetry/sdk/trace/span_limits.rb +60 -0
- data/lib/opentelemetry/sdk/trace/{noop_span_processor.rb → span_processor.rb} +5 -8
- data/lib/opentelemetry/sdk/trace/tracer.rb +1 -37
- data/lib/opentelemetry/sdk/trace/tracer_provider.rb +106 -19
- data/lib/opentelemetry/sdk/version.rb +1 -1
- metadata +43 -20
- data/lib/opentelemetry/sdk/baggage.rb +0 -16
- data/lib/opentelemetry/sdk/baggage/builder.rb +0 -40
- data/lib/opentelemetry/sdk/baggage/manager.rb +0 -97
- data/lib/opentelemetry/sdk/trace/config.rb +0 -18
- data/lib/opentelemetry/sdk/trace/config/trace_config.rb +0 -79
- data/lib/opentelemetry/sdk/trace/export/multi_span_exporter.rb +0 -59
- data/lib/opentelemetry/sdk/trace/multi_span_processor.rb +0 -86
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d43559eaa2be64a3597d078d032c168429702e47bdeaee1ac454dc5e74f9f496
|
4
|
+
data.tar.gz: 583f42bb1b6543d6375d3cfc8e4bd2319d5146306f42a73d726ca73f3c01e56d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 14112a30284f0ececabcf75dda91f6634b3748c44ccec52e19c6d42e7fae59979e6ea82ef276d21ea5503d2b4f35821945b62d2b1afc83c5bcb9d4a6a9ce6bf4
|
7
|
+
data.tar.gz: 87aaa08db88b9495c86ee1135cdcbfb95827fbbed42edf3280500d86025ff269ee3af95c675e20231267e7b561082cea12df7738db004922468246ad437805fb
|
data/CHANGELOG.md
CHANGED
@@ -1,88 +1,154 @@
|
|
1
1
|
# Release History: opentelemetry-sdk
|
2
2
|
|
3
|
+
### v1.0.0.rc2 / 2021-06-23
|
4
|
+
|
5
|
+
* BREAKING CHANGE: Remove optional parent_context from in_span [729](https://github.com/open-telemetry/opentelemetry-ruby/pull/729)
|
6
|
+
* BREAKING CHANGE: Replace Time.now with Process.clock_gettime [717](https://github.com/open-telemetry/opentelemetry-ruby/pull/717)
|
7
|
+
* BREAKING CHANGE: Refactor Baggage to remove Noop* [800](https://github.com/open-telemetry/opentelemetry-ruby/pull/800)
|
8
|
+
* BREAKING CHANGE: Remove unnecessary readers from SDK Tracer [820](https://github.com/open-telemetry/opentelemetry-ruby/pull/820)
|
9
|
+
- Tracer no longer surfaces attribute readers for the name, version, or tracer_provider
|
10
|
+
* BREAKING CHANGE: Total order constraint on span.status= [805](https://github.com/open-telemetry/opentelemetry-ruby/pull/805)
|
11
|
+
|
12
|
+
* ADDED: Add Tracer.non_recording_span to API [799](https://github.com/open-telemetry/opentelemetry-ruby/pull/799)
|
13
|
+
* ADDED: Add unnamed tracer warning message [830](https://github.com/open-telemetry/opentelemetry-ruby/pull/830)
|
14
|
+
* ADDED: Allow disabling of install messages [831](https://github.com/open-telemetry/opentelemetry-ruby/pull/831)
|
15
|
+
* FIXED: Rename cloud.zone to cloud.availability_zone [734](https://github.com/open-telemetry/opentelemetry-ruby/pull/734)
|
16
|
+
* FIXED: Improve attribute error messages [742](https://github.com/open-telemetry/opentelemetry-ruby/pull/742)
|
17
|
+
* FIXED: Support OTEL_SERVICE_NAME env var [806]https://github.com/open-telemetry/opentelemetry-ruby/pull/806
|
18
|
+
* FIXED: Flakey tracer provider test
|
19
|
+
|
20
|
+
### v1.0.0.rc1 / 2021-05-21
|
21
|
+
|
22
|
+
* BREAKING CHANGE: Remove optional parent_context from in_span
|
23
|
+
* BREAKING CHANGE: Replace Time.now with Process.clock_gettime
|
24
|
+
|
25
|
+
* FIXED: Remove optional parent_context from in_span
|
26
|
+
* FIXED: Replace Time.now with Process.clock_gettime
|
27
|
+
* FIXED: Rename cloud.zone to cloud.availability_zone
|
28
|
+
* FIXED: Improve attribute error messages
|
29
|
+
|
30
|
+
### v0.17.0 / 2021-04-22
|
31
|
+
|
32
|
+
* BREAKING CHANGE: Replace TextMapInjector/TextMapExtractor pairs with a TextMapPropagator.
|
33
|
+
|
34
|
+
[Check the propagator documentation](https://open-telemetry.github.io/opentelemetry-ruby/) for the new usage.
|
35
|
+
|
36
|
+
* ADDED: Add zipkin exporter
|
37
|
+
* ADDED: Processors validate exporters on init.
|
38
|
+
* ADDED: Add configurable truncation of span and event attribute values
|
39
|
+
* ADDED: Add simple 'recording' attr_accessor to InMemorySpanExporter
|
40
|
+
* FIXED: Typo in error message
|
41
|
+
* FIXED: Improve configuration error reporting
|
42
|
+
* FIXED: Refactor propagators to add #fields
|
43
|
+
|
44
|
+
### v0.16.0 / 2021-03-17
|
45
|
+
|
46
|
+
* BREAKING CHANGE: Update SDK BaggageManager to match API
|
47
|
+
* BREAKING CHANGE: Implement Exporter#force_flush
|
48
|
+
|
49
|
+
* ADDED: Add force_flush to SDK's TracerProvider
|
50
|
+
* ADDED: Add k8s node to gcp resource detector
|
51
|
+
* ADDED: Add console option for OTEL_TRACES_EXPORTER
|
52
|
+
* ADDED: Span#add_attributes
|
53
|
+
* ADDED: Implement Exporter#force_flush
|
54
|
+
* FIXED: Update SDK BaggageManager to match API
|
55
|
+
* DOCS: Replace Gitter with GitHub Discussions
|
56
|
+
|
57
|
+
### v0.15.0 / 2021-02-18
|
58
|
+
|
59
|
+
* BREAKING CHANGE: Streamline processor pipeline
|
60
|
+
|
61
|
+
* ADDED: Add instrumentation config validation
|
62
|
+
* FIXED: Streamline processor pipeline
|
63
|
+
* FIXED: OTEL_TRACE -> OTEL_TRACES env vars
|
64
|
+
* FIXED: Change limits from 1000 to 128
|
65
|
+
* FIXED: OTEL_TRACES_EXPORTER and OTEL_PROPAGATORS
|
66
|
+
* FIXED: Add thread error handling to the BSP
|
67
|
+
* DOCS: Clarify nil attribute values not allowed
|
68
|
+
|
3
69
|
### v0.14.0 / 2021-02-03
|
4
70
|
|
5
|
-
* BREAKING CHANGE: Replace getter and setter callables and remove rack specific propagators
|
71
|
+
* BREAKING CHANGE: Replace getter and setter callables and remove rack specific propagators
|
6
72
|
|
7
|
-
* ADDED: Replace getter and setter callables and remove rack specific propagators
|
73
|
+
* ADDED: Replace getter and setter callables and remove rack specific propagators
|
8
74
|
|
9
75
|
### v0.13.1 / 2021-02-01
|
10
76
|
|
11
|
-
* FIXED: Leaky test
|
12
|
-
* FIXED: Allow env var override of service.name
|
77
|
+
* FIXED: Leaky test
|
78
|
+
* FIXED: Allow env var override of service.name
|
13
79
|
|
14
80
|
### v0.13.0 / 2021-01-29
|
15
81
|
|
16
|
-
* BREAKING CHANGE: Remove MILLIS from BatchSpanProcessor vars
|
82
|
+
* BREAKING CHANGE: Remove MILLIS from BatchSpanProcessor vars
|
17
83
|
|
18
|
-
* ADDED: Process.runtime resource
|
19
|
-
* ADDED: Provide default resource in SDK
|
20
|
-
* ADDED: Add optional attributes to record_exception
|
21
|
-
* FIXED: Resource.merge consistency
|
22
|
-
* FIXED: Remove MILLIS from BatchSpanProcessor vars
|
84
|
+
* ADDED: Process.runtime resource
|
85
|
+
* ADDED: Provide default resource in SDK
|
86
|
+
* ADDED: Add optional attributes to record_exception
|
87
|
+
* FIXED: Resource.merge consistency
|
88
|
+
* FIXED: Remove MILLIS from BatchSpanProcessor vars
|
23
89
|
|
24
90
|
### v0.12.1 / 2021-01-13
|
25
91
|
|
26
|
-
* FIXED: Fix several BatchSpanProcessor errors related to fork safety
|
27
|
-
* FIXED: Define default value for traceid ratio
|
92
|
+
* FIXED: Fix several BatchSpanProcessor errors related to fork safety
|
93
|
+
* FIXED: Define default value for traceid ratio
|
28
94
|
|
29
95
|
### v0.12.0 / 2020-12-24
|
30
96
|
|
31
|
-
* ADDED: Structured error handling
|
32
|
-
* ADDED: Pluggable ID generation
|
33
|
-
* FIXED: BSP dropped span buffer full reporting
|
34
|
-
* FIXED: Implement SDK environment variables
|
35
|
-
* FIXED: Remove incorrect TODO
|
97
|
+
* ADDED: Structured error handling
|
98
|
+
* ADDED: Pluggable ID generation
|
99
|
+
* FIXED: BSP dropped span buffer full reporting
|
100
|
+
* FIXED: Implement SDK environment variables
|
101
|
+
* FIXED: Remove incorrect TODO
|
36
102
|
|
37
103
|
### v0.11.1 / 2020-12-16
|
38
104
|
|
39
|
-
* FIXED: BSP dropped span buffer full reporting
|
105
|
+
* FIXED: BSP dropped span buffer full reporting
|
40
106
|
|
41
107
|
### v0.11.0 / 2020-12-11
|
42
108
|
|
43
|
-
* ADDED: Metrics reporting from trace export
|
44
|
-
* FIXED: Copyright comments to not reference year
|
109
|
+
* ADDED: Metrics reporting from trace export
|
110
|
+
* FIXED: Copyright comments to not reference year
|
45
111
|
|
46
112
|
### v0.10.0 / 2020-12-03
|
47
113
|
|
48
|
-
* BREAKING CHANGE: Allow samplers to modify tracestate
|
114
|
+
* BREAKING CHANGE: Allow samplers to modify tracestate
|
49
115
|
|
50
|
-
* FIXED: Allow samplers to modify tracestate
|
116
|
+
* FIXED: Allow samplers to modify tracestate
|
51
117
|
|
52
118
|
### v0.9.0 / 2020-11-27
|
53
119
|
|
54
|
-
* BREAKING CHANGE: Pass full Context to samplers
|
55
|
-
* BREAKING CHANGE: Add timeout for force_flush and shutdown
|
120
|
+
* BREAKING CHANGE: Pass full Context to samplers
|
121
|
+
* BREAKING CHANGE: Add timeout for force_flush and shutdown
|
56
122
|
|
57
|
-
* ADDED: Add OTEL_RUBY_BSP_START_THREAD_ON_BOOT env var
|
58
|
-
* ADDED: Add timeout for force_flush and shutdown
|
59
|
-
* FIXED: Signal at batch_size
|
60
|
-
* FIXED: SDK Span.recording? after finish
|
61
|
-
* FIXED: Pass full Context to samplers
|
62
|
-
* DOCS: Add documentation on usage scenarios for span processors
|
123
|
+
* ADDED: Add OTEL_RUBY_BSP_START_THREAD_ON_BOOT env var
|
124
|
+
* ADDED: Add timeout for force_flush and shutdown
|
125
|
+
* FIXED: Signal at batch_size
|
126
|
+
* FIXED: SDK Span.recording? after finish
|
127
|
+
* FIXED: Pass full Context to samplers
|
128
|
+
* DOCS: Add documentation on usage scenarios for span processors
|
63
129
|
|
64
130
|
### v0.8.0 / 2020-10-27
|
65
131
|
|
66
|
-
* BREAKING CHANGE: Move context/span methods to Trace module
|
67
|
-
* BREAKING CHANGE: Remove 'canonical' from status codes
|
68
|
-
* BREAKING CHANGE: Assorted SpanContext fixes
|
132
|
+
* BREAKING CHANGE: Move context/span methods to Trace module
|
133
|
+
* BREAKING CHANGE: Remove 'canonical' from status codes
|
134
|
+
* BREAKING CHANGE: Assorted SpanContext fixes
|
69
135
|
|
70
|
-
* FIXED: Move context/span methods to Trace module
|
71
|
-
* FIXED: Remove 'canonical' from status codes
|
72
|
-
* FIXED: Assorted SpanContext fixes
|
136
|
+
* FIXED: Move context/span methods to Trace module
|
137
|
+
* FIXED: Remove 'canonical' from status codes
|
138
|
+
* FIXED: Assorted SpanContext fixes
|
73
139
|
|
74
140
|
### v0.7.0 / 2020-10-07
|
75
141
|
|
76
|
-
* ADDED: Add service_name setter to configurator
|
77
|
-
* ADDED: Add service_version setter to configurator
|
78
|
-
* FIXED: Fork safety for batch processor
|
79
|
-
* FIXED: Don't generate a span ID unnecessarily
|
80
|
-
* DOCS: Fix Configurator#add_span_processor
|
81
|
-
* DOCS: Standardize toplevel docs structure and readme
|
142
|
+
* ADDED: Add service_name setter to configurator
|
143
|
+
* ADDED: Add service_version setter to configurator
|
144
|
+
* FIXED: Fork safety for batch processor
|
145
|
+
* FIXED: Don't generate a span ID unnecessarily
|
146
|
+
* DOCS: Fix Configurator#add_span_processor
|
147
|
+
* DOCS: Standardize toplevel docs structure and readme
|
82
148
|
|
83
149
|
### v0.6.0 / 2020-09-10
|
84
150
|
|
85
|
-
* BREAKING CHANGE: Rename Resource labels to attributes
|
151
|
+
* BREAKING CHANGE: Rename Resource labels to attributes
|
86
152
|
* BREAKING CHANGE: Export resource from Span/SpanData instead of library_resource
|
87
153
|
* BREAKING CHANGE: Rename CorrelationContext to Baggage
|
88
154
|
* BREAKING CHANGE: Rename Text* to TextMap* (propagators, injectors, extractors)
|
@@ -92,7 +158,7 @@
|
|
92
158
|
|
93
159
|
* ADDED: Add OTLP exporter
|
94
160
|
* ADDED: Add support for OTEL_LOG_LEVEL env var
|
95
|
-
* FIXED: Rename Resource labels to attributes
|
161
|
+
* FIXED: Rename Resource labels to attributes
|
96
162
|
* ADDED: Environment variable resource detection
|
97
163
|
* ADDED: BatchSpanProcessor environment variable support
|
98
164
|
* FIXED: Remove semver prefix
|
data/README.md
CHANGED
@@ -56,7 +56,7 @@ For additional examples, see the [examples on github][examples-github].
|
|
56
56
|
|
57
57
|
The `opentelemetry-sdk` gem source is [on github][repo-github], along with related gems including `opentelemetry-api`.
|
58
58
|
|
59
|
-
The OpenTelemetry Ruby gems are maintained by the OpenTelemetry-Ruby special interest group (SIG). You can get involved by joining us
|
59
|
+
The OpenTelemetry Ruby gems are maintained by the OpenTelemetry-Ruby special interest group (SIG). You can get involved by joining us in [GitHub Discussions][discussions-url] or attending our weekly meeting. See the [meeting calendar][community-meetings] for dates and times. For more information on this and other language SIGs, see the OpenTelemetry [community page][ruby-sig].
|
60
60
|
|
61
61
|
## License
|
62
62
|
|
@@ -70,4 +70,4 @@ The `opentelemetry-sdk` gem is distributed under the Apache 2.0 license. See [LI
|
|
70
70
|
[examples-github]: https://github.com/open-telemetry/opentelemetry-ruby/tree/main/examples
|
71
71
|
[ruby-sig]: https://github.com/open-telemetry/community#ruby-sig
|
72
72
|
[community-meetings]: https://github.com/open-telemetry/community#community-meetings
|
73
|
-
[
|
73
|
+
[discussions-url]: https://github.com/open-telemetry/opentelemetry-ruby/discussions
|
data/lib/opentelemetry/sdk.rb
CHANGED
@@ -6,6 +6,7 @@
|
|
6
6
|
|
7
7
|
require 'opentelemetry'
|
8
8
|
require 'opentelemetry/common'
|
9
|
+
require 'opentelemetry-instrumentation-base'
|
9
10
|
|
10
11
|
# OpenTelemetry is an open source observability framework, providing a
|
11
12
|
# general-purpose API, SDK, and related tools required for the instrumentation
|
@@ -54,7 +55,7 @@ module OpenTelemetry
|
|
54
55
|
# Configure everything
|
55
56
|
#
|
56
57
|
# OpenTelemetry::SDK.configure do |c|
|
57
|
-
# c.logger = Logger.new(
|
58
|
+
# c.logger = Logger.new(File::NULL)
|
58
59
|
# c.add_span_processor SpanProcessor.new(SomeExporter.new)
|
59
60
|
# c.use_all
|
60
61
|
# end
|
@@ -66,14 +67,14 @@ module OpenTelemetry
|
|
66
67
|
begin
|
67
68
|
raise ConfigurationError
|
68
69
|
rescue ConfigurationError => e
|
69
|
-
OpenTelemetry.handle_error(exception: e, message:
|
70
|
+
OpenTelemetry.handle_error(exception: e, message: "unexpected configuration error due to #{e.cause}")
|
70
71
|
end
|
71
72
|
end
|
72
73
|
end
|
73
74
|
end
|
74
75
|
|
75
76
|
require 'opentelemetry/sdk/configurator'
|
76
|
-
require 'opentelemetry/sdk/
|
77
|
+
require 'opentelemetry/sdk/forwarding_logger'
|
77
78
|
require 'opentelemetry/sdk/internal'
|
78
79
|
require 'opentelemetry/sdk/instrumentation_library'
|
79
80
|
require 'opentelemetry/sdk/resources'
|
@@ -15,14 +15,12 @@ module OpenTelemetry
|
|
15
15
|
|
16
16
|
private_constant :USE_MODE_UNSPECIFIED, :USE_MODE_ONE, :USE_MODE_ALL
|
17
17
|
|
18
|
-
attr_writer :
|
19
|
-
:id_generator
|
18
|
+
attr_writer :propagators, :error_handler, :id_generator
|
20
19
|
|
21
20
|
def initialize
|
22
21
|
@instrumentation_names = []
|
23
22
|
@instrumentation_config_map = {}
|
24
|
-
@
|
25
|
-
@extractors = nil
|
23
|
+
@propagators = nil
|
26
24
|
@span_processors = []
|
27
25
|
@use_mode = USE_MODE_UNSPECIFIED
|
28
26
|
@resource = Resources::Resource.default
|
@@ -33,6 +31,15 @@ module OpenTelemetry
|
|
33
31
|
@logger ||= OpenTelemetry.logger
|
34
32
|
end
|
35
33
|
|
34
|
+
# Accepts a logger and wraps it in the {ForwardingLogger} which allows
|
35
|
+
# for controlling the severity level emitted by the OpenTelemetry.logger
|
36
|
+
# independently of the supplied logger.
|
37
|
+
#
|
38
|
+
# @param [Logger] new_logger The logger for OpenTelemetry to use
|
39
|
+
def logger=(new_logger)
|
40
|
+
@logger = ForwardingLogger.new(new_logger, level: ENV['OTEL_LOG_LEVEL'] || Logger::INFO)
|
41
|
+
end
|
42
|
+
|
36
43
|
def error_handler
|
37
44
|
@error_handler ||= OpenTelemetry.error_handler
|
38
45
|
end
|
@@ -114,7 +121,6 @@ module OpenTelemetry
|
|
114
121
|
def configure
|
115
122
|
OpenTelemetry.logger = logger
|
116
123
|
OpenTelemetry.error_handler = error_handler
|
117
|
-
OpenTelemetry.baggage = Baggage::Manager.new
|
118
124
|
configure_propagation
|
119
125
|
configure_span_processors
|
120
126
|
tracer_provider.id_generator = @id_generator
|
@@ -125,7 +131,7 @@ module OpenTelemetry
|
|
125
131
|
private
|
126
132
|
|
127
133
|
def tracer_provider
|
128
|
-
@tracer_provider ||= Trace::TracerProvider.new(@resource)
|
134
|
+
@tracer_provider ||= Trace::TracerProvider.new(resource: @resource)
|
129
135
|
end
|
130
136
|
|
131
137
|
def check_use_mode!(mode)
|
@@ -136,48 +142,61 @@ module OpenTelemetry
|
|
136
142
|
def install_instrumentation
|
137
143
|
case @use_mode
|
138
144
|
when USE_MODE_ONE
|
139
|
-
OpenTelemetry.
|
145
|
+
OpenTelemetry::Instrumentation.registry.install(@instrumentation_names, @instrumentation_config_map)
|
140
146
|
when USE_MODE_ALL
|
141
|
-
OpenTelemetry.
|
147
|
+
OpenTelemetry::Instrumentation.registry.install_all(@instrumentation_config_map)
|
142
148
|
end
|
143
149
|
end
|
144
150
|
|
145
151
|
def configure_span_processors
|
146
|
-
processors = @span_processors.empty? ? [
|
152
|
+
processors = @span_processors.empty? ? [wrapped_exporter_from_env].compact : @span_processors
|
147
153
|
processors.each { |p| tracer_provider.add_span_processor(p) }
|
148
154
|
end
|
149
155
|
|
150
|
-
def
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
156
|
+
def wrapped_exporter_from_env
|
157
|
+
exporter = ENV.fetch('OTEL_TRACES_EXPORTER', 'otlp')
|
158
|
+
case exporter
|
159
|
+
when 'none' then nil
|
160
|
+
when 'otlp' then fetch_exporter(exporter, 'OpenTelemetry::Exporter::OTLP::Exporter')
|
161
|
+
when 'jaeger' then fetch_exporter(exporter, 'OpenTelemetry::Exporter::Jaeger::CollectorExporter')
|
162
|
+
when 'zipkin' then fetch_exporter(exporter, 'OpenTelemetry::Exporter::Zipkin::Exporter')
|
163
|
+
when 'console' then Trace::Export::SimpleSpanProcessor.new(Trace::Export::ConsoleSpanExporter.new)
|
164
|
+
else
|
165
|
+
OpenTelemetry.logger.warn "The #{exporter} exporter is unknown and cannot be configured, spans will not be exported"
|
166
|
+
nil
|
167
|
+
end
|
159
168
|
end
|
160
169
|
|
161
|
-
def
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
170
|
+
def configure_propagation # rubocop:disable Metrics/CyclomaticComplexity
|
171
|
+
propagators = ENV.fetch('OTEL_PROPAGATORS', 'tracecontext,baggage').split(',').uniq.collect do |propagator|
|
172
|
+
case propagator
|
173
|
+
when 'tracecontext' then OpenTelemetry::Trace::Propagation::TraceContext.text_map_propagator
|
174
|
+
when 'baggage' then OpenTelemetry::Baggage::Propagation.text_map_propagator
|
175
|
+
when 'b3' then fetch_propagator(propagator, 'OpenTelemetry::Propagator::B3::Single')
|
176
|
+
when 'b3multi' then fetch_propagator(propagator, 'OpenTelemetry::Propagator::B3::Multi', 'b3')
|
177
|
+
when 'jaeger' then fetch_propagator(propagator, 'OpenTelemetry::Propagator::Jaeger')
|
178
|
+
when 'xray' then fetch_propagator(propagator, 'OpenTelemetry::Propagator::XRay')
|
179
|
+
when 'ottrace' then fetch_propagator(propagator, 'OpenTelemetry::Propagator::OTTrace')
|
180
|
+
else
|
181
|
+
OpenTelemetry.logger.warn "The #{propagator} propagator is unknown and cannot be configured"
|
182
|
+
Context::Propagation::NoopTextMapPropagator.new
|
183
|
+
end
|
166
184
|
end
|
185
|
+
OpenTelemetry.propagation = Context::Propagation::CompositeTextMapPropagator.compose_propagators((@propagators || propagators).compact)
|
167
186
|
end
|
168
187
|
|
169
|
-
def
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
188
|
+
def fetch_propagator(name, class_name, gem_suffix = name)
|
189
|
+
Kernel.const_get(class_name).text_map_propagator
|
190
|
+
rescue NameError
|
191
|
+
OpenTelemetry.logger.warn "The #{name} propagator cannot be configured - please add opentelemetry-propagator-#{gem_suffix} to your Gemfile"
|
192
|
+
nil
|
174
193
|
end
|
175
194
|
|
176
|
-
def
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
195
|
+
def fetch_exporter(name, class_name)
|
196
|
+
Trace::Export::BatchSpanProcessor.new(Kernel.const_get(class_name).new)
|
197
|
+
rescue NameError
|
198
|
+
OpenTelemetry.logger.warn "The #{name} exporter cannot be configured - please add opentelemetry-exporter-#{name} to your Gemfile, spans will not be exported"
|
199
|
+
nil
|
181
200
|
end
|
182
201
|
end
|
183
202
|
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'logger'
|
4
|
+
|
5
|
+
module OpenTelemetry
|
6
|
+
module SDK
|
7
|
+
# The ForwardingLogger provides a wrapper to control the OpenTelemetry
|
8
|
+
# log level, while respecting the configured level of the supplied logger.
|
9
|
+
# If the OTEL_LOG_LEVEL is set to debug, and the supplied logger is configured
|
10
|
+
# with an ERROR log level, only OpenTelemetry logs at the ERROR level or higher
|
11
|
+
# will be emitted.
|
12
|
+
class ForwardingLogger
|
13
|
+
def initialize(logger, level:) # rubocop:disable Metrics/CyclomaticComplexity
|
14
|
+
@logger = logger
|
15
|
+
|
16
|
+
if level.is_a?(Integer)
|
17
|
+
@level = level
|
18
|
+
else
|
19
|
+
case level.to_s.downcase
|
20
|
+
when 'debug'
|
21
|
+
@level = Logger::DEBUG
|
22
|
+
when 'info'
|
23
|
+
@level = Logger::INFO
|
24
|
+
when 'warn'
|
25
|
+
@level = Logger::WARN
|
26
|
+
when 'error'
|
27
|
+
@level = Logger::ERROR
|
28
|
+
when 'fatal'
|
29
|
+
@level = Logger::FATAL
|
30
|
+
when 'unknown'
|
31
|
+
@level = Logger::UNKNOWN
|
32
|
+
else
|
33
|
+
raise ArgumentError, "invalid log level: #{level}"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def add(severity, message = nil, progname = nil)
|
39
|
+
return true if severity < @level
|
40
|
+
|
41
|
+
@logger.add(severity, message, progname)
|
42
|
+
end
|
43
|
+
|
44
|
+
def debug(progname = nil, &block)
|
45
|
+
add(Logger::DEBUG, nil, progname, &block)
|
46
|
+
end
|
47
|
+
|
48
|
+
def info(progname = nil, &block)
|
49
|
+
add(Logger::INFO, nil, progname, &block)
|
50
|
+
end
|
51
|
+
|
52
|
+
def warn(progname = nil, &block)
|
53
|
+
add(Logger::WARN, nil, progname, &block)
|
54
|
+
end
|
55
|
+
|
56
|
+
def error(progname = nil, &block)
|
57
|
+
add(Logger::ERROR, nil, progname, &block)
|
58
|
+
end
|
59
|
+
|
60
|
+
def fatal(progname = nil, &block)
|
61
|
+
add(Logger::FATAL, nil, progname, &block)
|
62
|
+
end
|
63
|
+
|
64
|
+
def unknown(progname = nil, &block)
|
65
|
+
add(Logger::UNKNOWN, nil, progname, &block)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|