opentelemetry-sdk 0.14.0 → 1.0.0.rc2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|