opentelemetry-sdk 0.17.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +130 -68
- data/README.md +25 -2
- data/lib/opentelemetry/sdk/configurator.rb +44 -18
- data/lib/opentelemetry/sdk/forwarding_logger.rb +69 -0
- data/lib/opentelemetry/sdk/internal.rb +3 -3
- data/lib/opentelemetry/sdk/resources/resource.rb +16 -9
- data/lib/opentelemetry/sdk/resources.rb +0 -1
- data/lib/opentelemetry/sdk/trace/event.rb +7 -36
- data/lib/opentelemetry/sdk/trace/export/batch_span_processor.rb +4 -4
- data/lib/opentelemetry/sdk/trace/export/{noop_span_exporter.rb → span_exporter.rb} +8 -7
- data/lib/opentelemetry/sdk/trace/export.rb +3 -2
- data/lib/opentelemetry/sdk/trace/span.rb +49 -42
- 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 +89 -19
- data/lib/opentelemetry/sdk/trace.rb +2 -3
- data/lib/opentelemetry/sdk/version.rb +1 -1
- data/lib/opentelemetry/sdk.rb +3 -1
- metadata +59 -20
- data/lib/opentelemetry/sdk/resources/constants.rb +0 -205
- data/lib/opentelemetry/sdk/trace/config/trace_config.rb +0 -85
- data/lib/opentelemetry/sdk/trace/config.rb +0 -18
- data/lib/opentelemetry/sdk/trace/export/multi_span_exporter.rb +0 -76
- 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: 945d2fc6ef9f85d085850f3060ec9dcf1687d9066aaa1eb9a0209a6ca5aad28d
|
4
|
+
data.tar.gz: a5fa5d0cd5eb0de4c8d99ecf87fa8e4ba965dd5ae7817847c454b48c1d18e74e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 94ba24237af75d15d0b5aea94c41b01f19392f04a9c7237cfe23388f468e54dcc45a6c0e32c9fd51fbe0d2439dc63d18d1ac6564634fa211110d75bc22069083
|
7
|
+
data.tar.gz: 3889a79b962b13be77e54374af5fc0335089eb2b0ee2637547014a74e744f359a03179838584846837e54e5e6f38c80c8b30690f9e9a85dc99657e858b012e6e
|
data/CHANGELOG.md
CHANGED
@@ -1,127 +1,189 @@
|
|
1
1
|
# Release History: opentelemetry-sdk
|
2
2
|
|
3
|
+
### v1.0.0 / 2021-09-29
|
4
|
+
|
5
|
+
* (No significant changes)
|
6
|
+
|
7
|
+
### v1.0.0.rc3 / 2021-08-12
|
8
|
+
|
9
|
+
* BREAKING CHANGE: Remove optional parent_context from in_span
|
10
|
+
* BREAKING CHANGE: Replace Time.now with Process.clock_gettime
|
11
|
+
* BREAKING CHANGE: Refactor Baggage to remove Noop*
|
12
|
+
* BREAKING CHANGE: Remove unnecessary readers from SDK Tracer
|
13
|
+
* BREAKING CHANGE: Total order constraint on span.status=
|
14
|
+
* BREAKING CHANGE: Use auto-generated resource constants in sdk and resource_detectors
|
15
|
+
* BREAKING CHANGE: Span limits env vars
|
16
|
+
|
17
|
+
* ADDED: Add Tracer.non_recording_span to API
|
18
|
+
* ADDED: Add unnamed tracer warning message
|
19
|
+
* ADDED: Allow disabling of install messages
|
20
|
+
* ADDED: Make API's NoopTextMapPropagator private
|
21
|
+
* ADDED: Use auto-generated resource constants in sdk and resource_detectors
|
22
|
+
* ADDED: Allow selecting multiple exporter
|
23
|
+
* ADDED: Add explicit BSP export error
|
24
|
+
* FIXED: Remove optional parent_context from in_span
|
25
|
+
* FIXED: Replace Time.now with Process.clock_gettime
|
26
|
+
* FIXED: Rename cloud.zone to cloud.availability_zone
|
27
|
+
* FIXED: Improve attribute error messages
|
28
|
+
* FIXED: Refactor Baggage to remove Noop*
|
29
|
+
* FIXED: Support OTEL_SERVICE_NAME env var
|
30
|
+
* FIXED: Remove unnecessary readers from SDK Tracer
|
31
|
+
* FIXED: Total order constraint on span.status=
|
32
|
+
* FIXED: Flakey tracer provider test
|
33
|
+
* FIXED: Split lock in TracerProvider
|
34
|
+
* FIXED: Span limits env vars
|
35
|
+
* FIXED: Prune invalid links
|
36
|
+
* DOCS: Update docs to rely more on environment variable configuration
|
37
|
+
|
38
|
+
### v1.0.0.rc2 / 2021-06-23
|
39
|
+
|
40
|
+
* BREAKING CHANGE: Remove optional parent_context from in_span [729](https://github.com/open-telemetry/opentelemetry-ruby/pull/729)
|
41
|
+
* BREAKING CHANGE: Replace Time.now with Process.clock_gettime [717](https://github.com/open-telemetry/opentelemetry-ruby/pull/717)
|
42
|
+
* BREAKING CHANGE: Refactor Baggage to remove Noop* [800](https://github.com/open-telemetry/opentelemetry-ruby/pull/800)
|
43
|
+
* BREAKING CHANGE: Remove unnecessary readers from SDK Tracer [820](https://github.com/open-telemetry/opentelemetry-ruby/pull/820)
|
44
|
+
- Tracer no longer surfaces attribute readers for the name, version, or tracer_provider
|
45
|
+
* BREAKING CHANGE: Total order constraint on span.status= [805](https://github.com/open-telemetry/opentelemetry-ruby/pull/805)
|
46
|
+
|
47
|
+
* ADDED: Add Tracer.non_recording_span to API [799](https://github.com/open-telemetry/opentelemetry-ruby/pull/799)
|
48
|
+
* ADDED: Add unnamed tracer warning message [830](https://github.com/open-telemetry/opentelemetry-ruby/pull/830)
|
49
|
+
* ADDED: Allow disabling of install messages [831](https://github.com/open-telemetry/opentelemetry-ruby/pull/831)
|
50
|
+
* FIXED: Rename cloud.zone to cloud.availability_zone [734](https://github.com/open-telemetry/opentelemetry-ruby/pull/734)
|
51
|
+
* FIXED: Improve attribute error messages [742](https://github.com/open-telemetry/opentelemetry-ruby/pull/742)
|
52
|
+
* FIXED: Support OTEL_SERVICE_NAME env var [806]https://github.com/open-telemetry/opentelemetry-ruby/pull/806
|
53
|
+
* FIXED: Flakey tracer provider test
|
54
|
+
|
55
|
+
### v1.0.0.rc1 / 2021-05-21
|
56
|
+
|
57
|
+
* BREAKING CHANGE: Remove optional parent_context from in_span
|
58
|
+
* BREAKING CHANGE: Replace Time.now with Process.clock_gettime
|
59
|
+
|
60
|
+
* FIXED: Remove optional parent_context from in_span
|
61
|
+
* FIXED: Replace Time.now with Process.clock_gettime
|
62
|
+
* FIXED: Rename cloud.zone to cloud.availability_zone
|
63
|
+
* FIXED: Improve attribute error messages
|
64
|
+
|
3
65
|
### v0.17.0 / 2021-04-22
|
4
66
|
|
5
67
|
* BREAKING CHANGE: Replace TextMapInjector/TextMapExtractor pairs with a TextMapPropagator.
|
6
68
|
|
7
69
|
[Check the propagator documentation](https://open-telemetry.github.io/opentelemetry-ruby/) for the new usage.
|
8
70
|
|
9
|
-
* ADDED: Add zipkin exporter
|
10
|
-
* ADDED: Processors validate exporters on init.
|
11
|
-
* ADDED: Add configurable truncation of span and event attribute values
|
12
|
-
* ADDED: Add simple 'recording' attr_accessor to InMemorySpanExporter
|
13
|
-
* FIXED: Typo in error message
|
14
|
-
* FIXED: Improve configuration error reporting
|
15
|
-
* FIXED: Refactor propagators to add #fields
|
71
|
+
* ADDED: Add zipkin exporter
|
72
|
+
* ADDED: Processors validate exporters on init.
|
73
|
+
* ADDED: Add configurable truncation of span and event attribute values
|
74
|
+
* ADDED: Add simple 'recording' attr_accessor to InMemorySpanExporter
|
75
|
+
* FIXED: Typo in error message
|
76
|
+
* FIXED: Improve configuration error reporting
|
77
|
+
* FIXED: Refactor propagators to add #fields
|
16
78
|
|
17
79
|
### v0.16.0 / 2021-03-17
|
18
80
|
|
19
|
-
* BREAKING CHANGE: Update SDK BaggageManager to match API
|
20
|
-
* BREAKING CHANGE: Implement Exporter#force_flush
|
81
|
+
* BREAKING CHANGE: Update SDK BaggageManager to match API
|
82
|
+
* BREAKING CHANGE: Implement Exporter#force_flush
|
21
83
|
|
22
|
-
* ADDED: Add force_flush to SDK's TracerProvider
|
23
|
-
* ADDED: Add k8s node to gcp resource detector
|
24
|
-
* ADDED: Add console option for OTEL_TRACES_EXPORTER
|
25
|
-
* ADDED: Span#add_attributes
|
26
|
-
* ADDED: Implement Exporter#force_flush
|
27
|
-
* FIXED: Update SDK BaggageManager to match API
|
28
|
-
* DOCS: Replace Gitter with GitHub Discussions
|
84
|
+
* ADDED: Add force_flush to SDK's TracerProvider
|
85
|
+
* ADDED: Add k8s node to gcp resource detector
|
86
|
+
* ADDED: Add console option for OTEL_TRACES_EXPORTER
|
87
|
+
* ADDED: Span#add_attributes
|
88
|
+
* ADDED: Implement Exporter#force_flush
|
89
|
+
* FIXED: Update SDK BaggageManager to match API
|
90
|
+
* DOCS: Replace Gitter with GitHub Discussions
|
29
91
|
|
30
92
|
### v0.15.0 / 2021-02-18
|
31
93
|
|
32
|
-
* BREAKING CHANGE: Streamline processor pipeline
|
94
|
+
* BREAKING CHANGE: Streamline processor pipeline
|
33
95
|
|
34
|
-
* ADDED: Add instrumentation config validation
|
35
|
-
* FIXED: Streamline processor pipeline
|
36
|
-
* FIXED: OTEL_TRACE -> OTEL_TRACES env vars
|
37
|
-
* FIXED: Change limits from 1000 to 128
|
38
|
-
* FIXED: OTEL_TRACES_EXPORTER and OTEL_PROPAGATORS
|
39
|
-
* FIXED: Add thread error handling to the BSP
|
40
|
-
* DOCS: Clarify nil attribute values not allowed
|
96
|
+
* ADDED: Add instrumentation config validation
|
97
|
+
* FIXED: Streamline processor pipeline
|
98
|
+
* FIXED: OTEL_TRACE -> OTEL_TRACES env vars
|
99
|
+
* FIXED: Change limits from 1000 to 128
|
100
|
+
* FIXED: OTEL_TRACES_EXPORTER and OTEL_PROPAGATORS
|
101
|
+
* FIXED: Add thread error handling to the BSP
|
102
|
+
* DOCS: Clarify nil attribute values not allowed
|
41
103
|
|
42
104
|
### v0.14.0 / 2021-02-03
|
43
105
|
|
44
|
-
* BREAKING CHANGE: Replace getter and setter callables and remove rack specific propagators
|
106
|
+
* BREAKING CHANGE: Replace getter and setter callables and remove rack specific propagators
|
45
107
|
|
46
|
-
* ADDED: Replace getter and setter callables and remove rack specific propagators
|
108
|
+
* ADDED: Replace getter and setter callables and remove rack specific propagators
|
47
109
|
|
48
110
|
### v0.13.1 / 2021-02-01
|
49
111
|
|
50
|
-
* FIXED: Leaky test
|
51
|
-
* FIXED: Allow env var override of service.name
|
112
|
+
* FIXED: Leaky test
|
113
|
+
* FIXED: Allow env var override of service.name
|
52
114
|
|
53
115
|
### v0.13.0 / 2021-01-29
|
54
116
|
|
55
|
-
* BREAKING CHANGE: Remove MILLIS from BatchSpanProcessor vars
|
117
|
+
* BREAKING CHANGE: Remove MILLIS from BatchSpanProcessor vars
|
56
118
|
|
57
|
-
* ADDED: Process.runtime resource
|
58
|
-
* ADDED: Provide default resource in SDK
|
59
|
-
* ADDED: Add optional attributes to record_exception
|
60
|
-
* FIXED: Resource.merge consistency
|
61
|
-
* FIXED: Remove MILLIS from BatchSpanProcessor vars
|
119
|
+
* ADDED: Process.runtime resource
|
120
|
+
* ADDED: Provide default resource in SDK
|
121
|
+
* ADDED: Add optional attributes to record_exception
|
122
|
+
* FIXED: Resource.merge consistency
|
123
|
+
* FIXED: Remove MILLIS from BatchSpanProcessor vars
|
62
124
|
|
63
125
|
### v0.12.1 / 2021-01-13
|
64
126
|
|
65
|
-
* FIXED: Fix several BatchSpanProcessor errors related to fork safety
|
66
|
-
* FIXED: Define default value for traceid ratio
|
127
|
+
* FIXED: Fix several BatchSpanProcessor errors related to fork safety
|
128
|
+
* FIXED: Define default value for traceid ratio
|
67
129
|
|
68
130
|
### v0.12.0 / 2020-12-24
|
69
131
|
|
70
|
-
* ADDED: Structured error handling
|
71
|
-
* ADDED: Pluggable ID generation
|
72
|
-
* FIXED: BSP dropped span buffer full reporting
|
73
|
-
* FIXED: Implement SDK environment variables
|
74
|
-
* FIXED: Remove incorrect TODO
|
132
|
+
* ADDED: Structured error handling
|
133
|
+
* ADDED: Pluggable ID generation
|
134
|
+
* FIXED: BSP dropped span buffer full reporting
|
135
|
+
* FIXED: Implement SDK environment variables
|
136
|
+
* FIXED: Remove incorrect TODO
|
75
137
|
|
76
138
|
### v0.11.1 / 2020-12-16
|
77
139
|
|
78
|
-
* FIXED: BSP dropped span buffer full reporting
|
140
|
+
* FIXED: BSP dropped span buffer full reporting
|
79
141
|
|
80
142
|
### v0.11.0 / 2020-12-11
|
81
143
|
|
82
|
-
* ADDED: Metrics reporting from trace export
|
83
|
-
* FIXED: Copyright comments to not reference year
|
144
|
+
* ADDED: Metrics reporting from trace export
|
145
|
+
* FIXED: Copyright comments to not reference year
|
84
146
|
|
85
147
|
### v0.10.0 / 2020-12-03
|
86
148
|
|
87
|
-
* BREAKING CHANGE: Allow samplers to modify tracestate
|
149
|
+
* BREAKING CHANGE: Allow samplers to modify tracestate
|
88
150
|
|
89
|
-
* FIXED: Allow samplers to modify tracestate
|
151
|
+
* FIXED: Allow samplers to modify tracestate
|
90
152
|
|
91
153
|
### v0.9.0 / 2020-11-27
|
92
154
|
|
93
|
-
* BREAKING CHANGE: Pass full Context to samplers
|
94
|
-
* BREAKING CHANGE: Add timeout for force_flush and shutdown
|
155
|
+
* BREAKING CHANGE: Pass full Context to samplers
|
156
|
+
* BREAKING CHANGE: Add timeout for force_flush and shutdown
|
95
157
|
|
96
|
-
* ADDED: Add OTEL_RUBY_BSP_START_THREAD_ON_BOOT env var
|
97
|
-
* ADDED: Add timeout for force_flush and shutdown
|
98
|
-
* FIXED: Signal at batch_size
|
99
|
-
* FIXED: SDK Span.recording? after finish
|
100
|
-
* FIXED: Pass full Context to samplers
|
101
|
-
* DOCS: Add documentation on usage scenarios for span processors
|
158
|
+
* ADDED: Add OTEL_RUBY_BSP_START_THREAD_ON_BOOT env var
|
159
|
+
* ADDED: Add timeout for force_flush and shutdown
|
160
|
+
* FIXED: Signal at batch_size
|
161
|
+
* FIXED: SDK Span.recording? after finish
|
162
|
+
* FIXED: Pass full Context to samplers
|
163
|
+
* DOCS: Add documentation on usage scenarios for span processors
|
102
164
|
|
103
165
|
### v0.8.0 / 2020-10-27
|
104
166
|
|
105
|
-
* BREAKING CHANGE: Move context/span methods to Trace module
|
106
|
-
* BREAKING CHANGE: Remove 'canonical' from status codes
|
107
|
-
* BREAKING CHANGE: Assorted SpanContext fixes
|
167
|
+
* BREAKING CHANGE: Move context/span methods to Trace module
|
168
|
+
* BREAKING CHANGE: Remove 'canonical' from status codes
|
169
|
+
* BREAKING CHANGE: Assorted SpanContext fixes
|
108
170
|
|
109
|
-
* FIXED: Move context/span methods to Trace module
|
110
|
-
* FIXED: Remove 'canonical' from status codes
|
111
|
-
* FIXED: Assorted SpanContext fixes
|
171
|
+
* FIXED: Move context/span methods to Trace module
|
172
|
+
* FIXED: Remove 'canonical' from status codes
|
173
|
+
* FIXED: Assorted SpanContext fixes
|
112
174
|
|
113
175
|
### v0.7.0 / 2020-10-07
|
114
176
|
|
115
|
-
* ADDED: Add service_name setter to configurator
|
116
|
-
* ADDED: Add service_version setter to configurator
|
117
|
-
* FIXED: Fork safety for batch processor
|
118
|
-
* FIXED: Don't generate a span ID unnecessarily
|
119
|
-
* DOCS: Fix Configurator#add_span_processor
|
120
|
-
* DOCS: Standardize toplevel docs structure and readme
|
177
|
+
* ADDED: Add service_name setter to configurator
|
178
|
+
* ADDED: Add service_version setter to configurator
|
179
|
+
* FIXED: Fork safety for batch processor
|
180
|
+
* FIXED: Don't generate a span ID unnecessarily
|
181
|
+
* DOCS: Fix Configurator#add_span_processor
|
182
|
+
* DOCS: Standardize toplevel docs structure and readme
|
121
183
|
|
122
184
|
### v0.6.0 / 2020-09-10
|
123
185
|
|
124
|
-
* BREAKING CHANGE: Rename Resource labels to attributes
|
186
|
+
* BREAKING CHANGE: Rename Resource labels to attributes
|
125
187
|
* BREAKING CHANGE: Export resource from Span/SpanData instead of library_resource
|
126
188
|
* BREAKING CHANGE: Rename CorrelationContext to Baggage
|
127
189
|
* BREAKING CHANGE: Rename Text* to TextMap* (propagators, injectors, extractors)
|
@@ -131,7 +193,7 @@
|
|
131
193
|
|
132
194
|
* ADDED: Add OTLP exporter
|
133
195
|
* ADDED: Add support for OTEL_LOG_LEVEL env var
|
134
|
-
* FIXED: Rename Resource labels to attributes
|
196
|
+
* FIXED: Rename Resource labels to attributes
|
135
197
|
* ADDED: Environment variable resource detection
|
136
198
|
* ADDED: BatchSpanProcessor environment variable support
|
137
199
|
* FIXED: Remove semver prefix
|
data/README.md
CHANGED
@@ -29,10 +29,33 @@ Then, configure the SDK according to your desired handling of telemetry data, an
|
|
29
29
|
```ruby
|
30
30
|
require 'opentelemetry/sdk'
|
31
31
|
|
32
|
-
# Configure the sdk with default export and context propagation formats
|
33
|
-
# see SDK#configure for customizing the setup
|
32
|
+
# Configure the sdk with default export and context propagation formats.
|
34
33
|
OpenTelemetry::SDK.configure
|
35
34
|
|
35
|
+
# Many configuration options may be set via the environment. To use them,
|
36
|
+
# set the appropriate variable before calling configure. For example:
|
37
|
+
#
|
38
|
+
# ENV['OTEL_TRACES_EXPORTER'] = 'console'
|
39
|
+
# ENV['OTEL_PROPAGATORS'] = 'ottrace'
|
40
|
+
# OpenTelemetry::SDK.configure
|
41
|
+
#
|
42
|
+
# You may also configure the SDK programmatically, for advanced usage or to
|
43
|
+
# enable auto-instrumentation. For example:
|
44
|
+
#
|
45
|
+
# OpenTelemetry::SDK.configure do |c|
|
46
|
+
# c.service_name = something_calculated_dynamically
|
47
|
+
# c.add_span_processor(
|
48
|
+
# OpenTelemetry::SDK::Trace::Export::SimpleSpanProcessor.new(
|
49
|
+
# OpenTelemetry::SDK::Trace::Export::ConsoleSpanExporter.new
|
50
|
+
# )
|
51
|
+
# )
|
52
|
+
#
|
53
|
+
# c.use 'OpenTelemetry::Instrumentation::Net::HTTP'
|
54
|
+
# end
|
55
|
+
#
|
56
|
+
# Note that the SimpleSpanExporter is not recommended for use in production.
|
57
|
+
|
58
|
+
|
36
59
|
# To start a trace you need to get a Tracer from the TracerProvider
|
37
60
|
tracer = OpenTelemetry.tracer_provider.tracer('my_app_or_gem', '0.1.0')
|
38
61
|
|
@@ -9,13 +9,29 @@ module OpenTelemetry
|
|
9
9
|
# The configurator provides defaults and facilitates configuring the
|
10
10
|
# SDK for use.
|
11
11
|
class Configurator # rubocop:disable Metrics/ClassLength
|
12
|
+
# @api private
|
13
|
+
class NoopTextMapPropagator
|
14
|
+
EMPTY_LIST = [].freeze
|
15
|
+
private_constant(:EMPTY_LIST)
|
16
|
+
|
17
|
+
def inject(carrier, context: Context.current, setter: Context::Propagation.text_map_setter); end
|
18
|
+
|
19
|
+
def extract(carrier, context: Context.current, getter: Context::Propagation.text_map_getter)
|
20
|
+
context
|
21
|
+
end
|
22
|
+
|
23
|
+
def fields
|
24
|
+
EMPTY_LIST
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
12
28
|
USE_MODE_UNSPECIFIED = 0
|
13
29
|
USE_MODE_ONE = 1
|
14
30
|
USE_MODE_ALL = 2
|
15
31
|
|
16
32
|
private_constant :USE_MODE_UNSPECIFIED, :USE_MODE_ONE, :USE_MODE_ALL
|
17
33
|
|
18
|
-
attr_writer :
|
34
|
+
attr_writer :propagators, :error_handler, :id_generator
|
19
35
|
|
20
36
|
def initialize
|
21
37
|
@instrumentation_names = []
|
@@ -31,6 +47,15 @@ module OpenTelemetry
|
|
31
47
|
@logger ||= OpenTelemetry.logger
|
32
48
|
end
|
33
49
|
|
50
|
+
# Accepts a logger and wraps it in the {ForwardingLogger} which allows
|
51
|
+
# for controlling the severity level emitted by the OpenTelemetry.logger
|
52
|
+
# independently of the supplied logger.
|
53
|
+
#
|
54
|
+
# @param [Logger] new_logger The logger for OpenTelemetry to use
|
55
|
+
def logger=(new_logger)
|
56
|
+
@logger = ForwardingLogger.new(new_logger, level: ENV['OTEL_LOG_LEVEL'] || Logger::INFO)
|
57
|
+
end
|
58
|
+
|
34
59
|
def error_handler
|
35
60
|
@error_handler ||= OpenTelemetry.error_handler
|
36
61
|
end
|
@@ -51,7 +76,7 @@ module OpenTelemetry
|
|
51
76
|
# @param [String] service_name The value to be used as the service name
|
52
77
|
def service_name=(service_name)
|
53
78
|
self.resource = OpenTelemetry::SDK::Resources::Resource.create(
|
54
|
-
OpenTelemetry::
|
79
|
+
OpenTelemetry::SemanticConventions::Resource::SERVICE_NAME => service_name
|
55
80
|
)
|
56
81
|
end
|
57
82
|
|
@@ -61,7 +86,7 @@ module OpenTelemetry
|
|
61
86
|
# @param [String] service_version The value to be used as the service version
|
62
87
|
def service_version=(service_version)
|
63
88
|
self.resource = OpenTelemetry::SDK::Resources::Resource.create(
|
64
|
-
OpenTelemetry::
|
89
|
+
OpenTelemetry::SemanticConventions::Resource::SERVICE_VERSION => service_version
|
65
90
|
)
|
66
91
|
end
|
67
92
|
|
@@ -112,7 +137,6 @@ module OpenTelemetry
|
|
112
137
|
def configure
|
113
138
|
OpenTelemetry.logger = logger
|
114
139
|
OpenTelemetry.error_handler = error_handler
|
115
|
-
OpenTelemetry.baggage = Baggage::Manager.new
|
116
140
|
configure_propagation
|
117
141
|
configure_span_processors
|
118
142
|
tracer_provider.id_generator = @id_generator
|
@@ -123,7 +147,7 @@ module OpenTelemetry
|
|
123
147
|
private
|
124
148
|
|
125
149
|
def tracer_provider
|
126
|
-
@tracer_provider ||= Trace::TracerProvider.new(@resource)
|
150
|
+
@tracer_provider ||= Trace::TracerProvider.new(resource: @resource)
|
127
151
|
end
|
128
152
|
|
129
153
|
def check_use_mode!(mode)
|
@@ -141,21 +165,23 @@ module OpenTelemetry
|
|
141
165
|
end
|
142
166
|
|
143
167
|
def configure_span_processors
|
144
|
-
processors = @span_processors.empty? ?
|
168
|
+
processors = @span_processors.empty? ? wrapped_exporters_from_env.compact : @span_processors
|
145
169
|
processors.each { |p| tracer_provider.add_span_processor(p) }
|
146
170
|
end
|
147
171
|
|
148
|
-
def
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
172
|
+
def wrapped_exporters_from_env
|
173
|
+
exporters = ENV.fetch('OTEL_TRACES_EXPORTER', 'otlp')
|
174
|
+
exporters.split(',').map do |exporter|
|
175
|
+
case exporter.strip
|
176
|
+
when 'none' then nil
|
177
|
+
when 'otlp' then fetch_exporter(exporter, 'OpenTelemetry::Exporter::OTLP::Exporter')
|
178
|
+
when 'jaeger' then fetch_exporter(exporter, 'OpenTelemetry::Exporter::Jaeger::CollectorExporter')
|
179
|
+
when 'zipkin' then fetch_exporter(exporter, 'OpenTelemetry::Exporter::Zipkin::Exporter')
|
180
|
+
when 'console' then Trace::Export::SimpleSpanProcessor.new(Trace::Export::ConsoleSpanExporter.new)
|
181
|
+
else
|
182
|
+
OpenTelemetry.logger.warn "The #{exporter} exporter is unknown and cannot be configured, spans will not be exported"
|
183
|
+
nil
|
184
|
+
end
|
159
185
|
end
|
160
186
|
end
|
161
187
|
|
@@ -171,7 +197,7 @@ module OpenTelemetry
|
|
171
197
|
when 'ottrace' then fetch_propagator(propagator, 'OpenTelemetry::Propagator::OTTrace')
|
172
198
|
else
|
173
199
|
OpenTelemetry.logger.warn "The #{propagator} propagator is unknown and cannot be configured"
|
174
|
-
|
200
|
+
NoopTextMapPropagator.new
|
175
201
|
end
|
176
202
|
end
|
177
203
|
OpenTelemetry.propagation = Context::Propagation::CompositeTextMapPropagator.compose_propagators((@propagators || propagators).compact)
|
@@ -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
|
@@ -44,13 +44,13 @@ module OpenTelemetry
|
|
44
44
|
valid_simple_value?(value) || valid_array_value?(value)
|
45
45
|
end
|
46
46
|
|
47
|
-
def valid_attributes?(attrs)
|
47
|
+
def valid_attributes?(owner, kind, attrs)
|
48
48
|
attrs.nil? || attrs.all? do |k, v|
|
49
49
|
if !valid_key?(k)
|
50
|
-
OpenTelemetry.handle_error(message: "invalid attribute key type #{k.class}")
|
50
|
+
OpenTelemetry.handle_error(message: "invalid #{kind} attribute key type #{k.class} on span '#{owner}'")
|
51
51
|
false
|
52
52
|
elsif !valid_value?(v)
|
53
|
-
OpenTelemetry.handle_error(message: "invalid attribute value type #{v.class}")
|
53
|
+
OpenTelemetry.handle_error(message: "invalid #{kind} attribute value type #{v.class} for key '#{k}' on span '#{owner}'")
|
54
54
|
false
|
55
55
|
else
|
56
56
|
true
|
@@ -31,14 +31,14 @@ module OpenTelemetry
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def default
|
34
|
-
@default ||= create(
|
34
|
+
@default ||= create(SemanticConventions::Resource::SERVICE_NAME => 'unknown_service').merge(process).merge(telemetry_sdk).merge(service_name_from_env)
|
35
35
|
end
|
36
36
|
|
37
37
|
def telemetry_sdk
|
38
38
|
resource_attributes = {
|
39
|
-
|
40
|
-
|
41
|
-
|
39
|
+
SemanticConventions::Resource::TELEMETRY_SDK_NAME => 'opentelemetry',
|
40
|
+
SemanticConventions::Resource::TELEMETRY_SDK_LANGUAGE => 'ruby',
|
41
|
+
SemanticConventions::Resource::TELEMETRY_SDK_VERSION => OpenTelemetry::SDK::VERSION
|
42
42
|
}
|
43
43
|
|
44
44
|
resource_pairs = ENV['OTEL_RESOURCE_ATTRIBUTES']
|
@@ -55,15 +55,22 @@ module OpenTelemetry
|
|
55
55
|
|
56
56
|
def process
|
57
57
|
resource_attributes = {
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
58
|
+
SemanticConventions::Resource::PROCESS_PID => Process.pid,
|
59
|
+
SemanticConventions::Resource::PROCESS_COMMAND => $PROGRAM_NAME,
|
60
|
+
SemanticConventions::Resource::PROCESS_RUNTIME_NAME => RUBY_ENGINE,
|
61
|
+
SemanticConventions::Resource::PROCESS_RUNTIME_VERSION => RUBY_VERSION,
|
62
|
+
SemanticConventions::Resource::PROCESS_RUNTIME_DESCRIPTION => RUBY_DESCRIPTION
|
63
63
|
}
|
64
64
|
|
65
65
|
create(resource_attributes)
|
66
66
|
end
|
67
|
+
|
68
|
+
private
|
69
|
+
|
70
|
+
def service_name_from_env
|
71
|
+
service_name = ENV['OTEL_SERVICE_NAME']
|
72
|
+
create(SemanticConventions::Resource::SERVICE_NAME => service_name) unless service_name.nil?
|
73
|
+
end
|
67
74
|
end
|
68
75
|
|
69
76
|
# @api private
|
@@ -7,42 +7,13 @@
|
|
7
7
|
module OpenTelemetry
|
8
8
|
module SDK
|
9
9
|
module Trace
|
10
|
-
# A text annotation with a set of attributes and a timestamp.
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
#
|
18
|
-
# @return [String]
|
19
|
-
attr_reader :name
|
20
|
-
|
21
|
-
# Returns the frozen attributes for this event
|
22
|
-
#
|
23
|
-
# @return [Hash{String => String, Numeric, Boolean, Array<String, Numeric, Boolean>}]
|
24
|
-
attr_reader :attributes
|
25
|
-
|
26
|
-
# Returns the timestamp for this event
|
27
|
-
#
|
28
|
-
# @return [Time]
|
29
|
-
attr_reader :timestamp
|
30
|
-
|
31
|
-
# Returns a new immutable {Event}.
|
32
|
-
#
|
33
|
-
# @param [String] name The name of this event
|
34
|
-
# @param [optional Hash{String => String, Numeric, Boolean, Array<String, Numeric, Boolean>}]
|
35
|
-
# attributes A hash of attributes for this event. Attributes will be
|
36
|
-
# frozen during Event initialization.
|
37
|
-
# @param [optional Time] timestamp The timestamp for this event.
|
38
|
-
# Defaults to Time.now.
|
39
|
-
# @return [Event]
|
40
|
-
def initialize(name:, attributes: nil, timestamp: nil)
|
41
|
-
@name = name
|
42
|
-
@attributes = attributes.freeze || EMPTY_ATTRIBUTES
|
43
|
-
@timestamp = timestamp || Time.now
|
44
|
-
end
|
45
|
-
end
|
10
|
+
# A text annotation with a set of attributes and a timestamp for export.
|
11
|
+
#
|
12
|
+
# Field types are as follows:
|
13
|
+
# name: String
|
14
|
+
# attributes: frozen Hash{String => String, Numeric, Boolean, Array<String, Numeric, Boolean>}
|
15
|
+
# timestamp: Integer nanoseconds since Epoch
|
16
|
+
Event = Struct.new(:name, :attributes, :timestamp)
|
46
17
|
end
|
47
18
|
end
|
48
19
|
end
|