opentelemetry-sdk 0.17.0 → 1.0.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.
@@ -8,24 +8,36 @@ module OpenTelemetry
8
8
  module SDK
9
9
  module Trace
10
10
  # {TracerProvider} is the SDK implementation of {OpenTelemetry::Trace::TracerProvider}.
11
- class TracerProvider < OpenTelemetry::Trace::TracerProvider
11
+ class TracerProvider < OpenTelemetry::Trace::TracerProvider # rubocop:disable Metrics/ClassLength
12
12
  Key = Struct.new(:name, :version)
13
13
  private_constant(:Key)
14
14
 
15
- attr_accessor :active_trace_config, :id_generator
16
- attr_reader :active_span_processor, :stopped, :resource
17
- alias stopped? stopped
15
+ attr_accessor :span_limits, :id_generator, :sampler
16
+ attr_reader :resource
18
17
 
19
18
  # Returns a new {TracerProvider} instance.
20
19
  #
20
+ # @param [optional Sampler] sampler The sampling policy for new spans
21
+ # @param [optional Resource] resource The resource to associate with spans
22
+ # created by Tracers created by this TracerProvider
23
+ # @param [optional IDGenerator] id_generator The trace and span ID generation
24
+ # policy
25
+ # @param [optional SpanLimits] span_limits The limits to apply to attribute,
26
+ # event and link counts for Spans created by Tracers created by this
27
+ # TracerProvider
28
+ #
21
29
  # @return [TracerProvider]
22
- def initialize(resource = OpenTelemetry::SDK::Resources::Resource.create)
30
+ def initialize(sampler: sampler_from_environment(Samplers.parent_based(root: Samplers::ALWAYS_ON)),
31
+ resource: OpenTelemetry::SDK::Resources::Resource.create,
32
+ id_generator: OpenTelemetry::Trace,
33
+ span_limits: SpanLimits::DEFAULT)
23
34
  @mutex = Mutex.new
24
35
  @registry = {}
25
- @active_span_processor = NoopSpanProcessor.instance
26
- @active_trace_config = Config::TraceConfig::DEFAULT
27
- @id_generator = OpenTelemetry::Trace
28
- @registered_span_processors = []
36
+ @registry_mutex = Mutex.new
37
+ @span_processors = []
38
+ @span_limits = span_limits
39
+ @sampler = sampler
40
+ @id_generator = id_generator
29
41
  @stopped = false
30
42
  @resource = resource
31
43
  end
@@ -39,7 +51,8 @@ module OpenTelemetry
39
51
  def tracer(name = nil, version = nil)
40
52
  name ||= ''
41
53
  version ||= ''
42
- @mutex.synchronize { @registry[Key.new(name, version)] ||= Tracer.new(name, version, self) }
54
+ OpenTelemetry.logger.warn 'calling TracerProvider#tracer without providing a tracer name.' if name.empty?
55
+ @registry_mutex.synchronize { @registry[Key.new(name, version)] ||= Tracer.new(name, version, self) }
43
56
  end
44
57
 
45
58
  # Attempts to stop all the activity for this {TracerProvider}. Calls
@@ -52,14 +65,24 @@ module OpenTelemetry
52
65
  # After this is called all the newly created {Span}s will be no-op.
53
66
  #
54
67
  # @param [optional Numeric] timeout An optional timeout in seconds.
68
+ # @return [Integer] Export::SUCCESS if no error occurred, Export::FAILURE if
69
+ # a non-specific failure occurred, Export::TIMEOUT if a timeout occurred.
55
70
  def shutdown(timeout: nil)
56
71
  @mutex.synchronize do
57
72
  if @stopped
58
73
  OpenTelemetry.logger.warn('calling Tracer#shutdown multiple times.')
59
- return
74
+ return Export::FAILURE
75
+ end
76
+
77
+ start_time = OpenTelemetry::Common::Utilities.timeout_timestamp
78
+ results = @span_processors.map do |processor|
79
+ remaining_timeout = OpenTelemetry::Common::Utilities.maybe_timeout(timeout, start_time)
80
+ break [Export::TIMEOUT] if remaining_timeout&.zero?
81
+
82
+ processor.shutdown(timeout: remaining_timeout)
60
83
  end
61
- @active_span_processor.shutdown(timeout: timeout)
62
84
  @stopped = true
85
+ results.max || Export::SUCCESS
63
86
  end
64
87
  end
65
88
 
@@ -78,7 +101,14 @@ module OpenTelemetry
78
101
  @mutex.synchronize do
79
102
  return Export::SUCCESS if @stopped
80
103
 
81
- @active_span_processor.force_flush(timeout: timeout)
104
+ start_time = OpenTelemetry::Common::Utilities.timeout_timestamp
105
+ results = @span_processors.map do |processor|
106
+ remaining_timeout = OpenTelemetry::Common::Utilities.maybe_timeout(timeout, start_time)
107
+ return Export::TIMEOUT if remaining_timeout&.zero?
108
+
109
+ processor.force_flush(timeout: remaining_timeout)
110
+ end
111
+ results.max || Export::SUCCESS
82
112
  end
83
113
  end
84
114
 
@@ -91,13 +121,53 @@ module OpenTelemetry
91
121
  OpenTelemetry.logger.warn('calling Tracer#add_span_processor after shutdown.')
92
122
  return
93
123
  end
94
- @registered_span_processors << span_processor
95
- @active_span_processor = if @registered_span_processors.size == 1
96
- span_processor
97
- else
98
- MultiSpanProcessor.new(@registered_span_processors.dup)
99
- end
124
+ @span_processors = @span_processors.dup.push(span_processor)
125
+ end
126
+ end
127
+
128
+ # @api private
129
+ def internal_create_span(name, kind, trace_id, parent_span_id, attributes, links, start_timestamp, parent_context, instrumentation_library) # rubocop:disable Metrics/MethodLength
130
+ trace_id ||= @id_generator.generate_trace_id
131
+ result = @sampler.should_sample?(trace_id: trace_id, parent_context: parent_context, links: links, name: name, kind: kind, attributes: attributes)
132
+ span_id = @id_generator.generate_span_id
133
+ if result.recording? && !@stopped
134
+ trace_flags = result.sampled? ? OpenTelemetry::Trace::TraceFlags::SAMPLED : OpenTelemetry::Trace::TraceFlags::DEFAULT
135
+ context = OpenTelemetry::Trace::SpanContext.new(trace_id: trace_id, span_id: span_id, trace_flags: trace_flags, tracestate: result.tracestate)
136
+ attributes = attributes&.merge(result.attributes) || result.attributes
137
+ Span.new(
138
+ context,
139
+ parent_context,
140
+ name,
141
+ kind,
142
+ parent_span_id,
143
+ @span_limits,
144
+ @span_processors,
145
+ attributes,
146
+ links,
147
+ start_timestamp,
148
+ @resource,
149
+ instrumentation_library
150
+ )
151
+ else
152
+ OpenTelemetry::Trace.non_recording_span(OpenTelemetry::Trace::SpanContext.new(trace_id: trace_id, span_id: span_id, tracestate: result.tracestate))
153
+ end
154
+ end
155
+
156
+ private
157
+
158
+ def sampler_from_environment(default_sampler) # rubocop:disable Metrics/CyclomaticComplexity
159
+ case ENV['OTEL_TRACES_SAMPLER']
160
+ when 'always_on' then Samplers::ALWAYS_ON
161
+ when 'always_off' then Samplers::ALWAYS_OFF
162
+ when 'traceidratio' then Samplers.trace_id_ratio_based(Float(ENV.fetch('OTEL_TRACES_SAMPLER_ARG', 1.0)))
163
+ when 'parentbased_always_on' then Samplers.parent_based(root: Samplers::ALWAYS_ON)
164
+ when 'parentbased_always_off' then Samplers.parent_based(root: Samplers::ALWAYS_OFF)
165
+ when 'parentbased_traceidratio' then Samplers.parent_based(root: Samplers.trace_id_ratio_based(Float(ENV.fetch('OTEL_TRACES_SAMPLER_ARG', 1.0))))
166
+ else default_sampler
100
167
  end
168
+ rescue StandardError => e
169
+ OpenTelemetry.handle_error(exception: e, message: "installing default sampler #{default_sampler.description}")
170
+ default_sampler
101
171
  end
102
172
  end
103
173
  end
@@ -14,12 +14,11 @@ module OpenTelemetry
14
14
  end
15
15
 
16
16
  require 'opentelemetry/sdk/trace/samplers'
17
- require 'opentelemetry/sdk/trace/config'
17
+ require 'opentelemetry/sdk/trace/span_limits'
18
18
  require 'opentelemetry/sdk/trace/event'
19
19
  require 'opentelemetry/sdk/trace/export'
20
- require 'opentelemetry/sdk/trace/multi_span_processor'
21
- require 'opentelemetry/sdk/trace/noop_span_processor'
22
20
  require 'opentelemetry/sdk/trace/span_data'
21
+ require 'opentelemetry/sdk/trace/span_processor'
23
22
  require 'opentelemetry/sdk/trace/span'
24
23
  require 'opentelemetry/sdk/trace/tracer'
25
24
  require 'opentelemetry/sdk/trace/tracer_provider'
@@ -7,6 +7,6 @@
7
7
  module OpenTelemetry
8
8
  module SDK
9
9
  ## Current OpenTelemetry version
10
- VERSION = '0.17.0'
10
+ VERSION = '1.0.0'
11
11
  end
12
12
  end
@@ -7,6 +7,7 @@
7
7
  require 'opentelemetry'
8
8
  require 'opentelemetry/common'
9
9
  require 'opentelemetry-instrumentation-base'
10
+ require 'opentelemetry-semantic_conventions'
10
11
 
11
12
  # OpenTelemetry is an open source observability framework, providing a
12
13
  # general-purpose API, SDK, and related tools required for the instrumentation
@@ -55,7 +56,7 @@ module OpenTelemetry
55
56
  # Configure everything
56
57
  #
57
58
  # OpenTelemetry::SDK.configure do |c|
58
- # c.logger = Logger.new('/dev/null')
59
+ # c.logger = Logger.new(File::NULL)
59
60
  # c.add_span_processor SpanProcessor.new(SomeExporter.new)
60
61
  # c.use_all
61
62
  # end
@@ -74,6 +75,7 @@ module OpenTelemetry
74
75
  end
75
76
 
76
77
  require 'opentelemetry/sdk/configurator'
78
+ require 'opentelemetry/sdk/forwarding_logger'
77
79
  require 'opentelemetry/sdk/internal'
78
80
  require 'opentelemetry/sdk/instrumentation_library'
79
81
  require 'opentelemetry/sdk/resources'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opentelemetry-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenTelemetry Authors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-04-23 00:00:00.000000000 Z
11
+ date: 2021-09-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opentelemetry-api
@@ -16,42 +16,56 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.17.0
19
+ version: '1.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.17.0
26
+ version: '1.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: opentelemetry-common
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.17.0
33
+ version: 0.19.2
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.17.0
40
+ version: 0.19.2
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: opentelemetry-instrumentation-base
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.17.0
47
+ version: 0.18.3
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.17.0
54
+ version: 0.18.3
55
+ - !ruby/object:Gem::Dependency
56
+ name: opentelemetry-semantic_conventions
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: bundler
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -95,19 +109,33 @@ dependencies:
95
109
  - !ruby/object:Gem::Version
96
110
  version: '5.0'
97
111
  - !ruby/object:Gem::Dependency
98
- name: opentelemetry-exporter-jaeger
112
+ name: opentelemetry-exporter-zipkin
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
115
  - - "~>"
102
116
  - !ruby/object:Gem::Version
103
- version: 0.17.0
117
+ version: 0.19.0
104
118
  type: :development
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
107
121
  requirements:
108
122
  - - "~>"
109
123
  - !ruby/object:Gem::Version
110
- version: 0.17.0
124
+ version: 0.19.0
125
+ - !ruby/object:Gem::Dependency
126
+ name: pry
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
111
139
  - !ruby/object:Gem::Dependency
112
140
  name: rake
113
141
  requirement: !ruby/object:Gem::Requirement
@@ -178,6 +206,20 @@ dependencies:
178
206
  - - "~>"
179
207
  - !ruby/object:Gem::Version
180
208
  version: 0.1.6
209
+ - !ruby/object:Gem::Dependency
210
+ name: pry-byebug
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - ">="
214
+ - !ruby/object:Gem::Version
215
+ version: '0'
216
+ type: :development
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - ">="
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
181
223
  description: A stats collection and distributed tracing framework
182
224
  email:
183
225
  - cncf-opentelemetry-contributors@lists.cncf.io
@@ -192,25 +234,20 @@ files:
192
234
  - lib/opentelemetry-sdk.rb
193
235
  - lib/opentelemetry/sdk.rb
194
236
  - lib/opentelemetry/sdk/configurator.rb
237
+ - lib/opentelemetry/sdk/forwarding_logger.rb
195
238
  - lib/opentelemetry/sdk/instrumentation_library.rb
196
239
  - lib/opentelemetry/sdk/internal.rb
197
240
  - lib/opentelemetry/sdk/resources.rb
198
- - lib/opentelemetry/sdk/resources/constants.rb
199
241
  - lib/opentelemetry/sdk/resources/resource.rb
200
242
  - lib/opentelemetry/sdk/trace.rb
201
- - lib/opentelemetry/sdk/trace/config.rb
202
- - lib/opentelemetry/sdk/trace/config/trace_config.rb
203
243
  - lib/opentelemetry/sdk/trace/event.rb
204
244
  - lib/opentelemetry/sdk/trace/export.rb
205
245
  - lib/opentelemetry/sdk/trace/export/batch_span_processor.rb
206
246
  - lib/opentelemetry/sdk/trace/export/console_span_exporter.rb
207
247
  - lib/opentelemetry/sdk/trace/export/in_memory_span_exporter.rb
208
248
  - lib/opentelemetry/sdk/trace/export/metrics_reporter.rb
209
- - lib/opentelemetry/sdk/trace/export/multi_span_exporter.rb
210
- - lib/opentelemetry/sdk/trace/export/noop_span_exporter.rb
211
249
  - lib/opentelemetry/sdk/trace/export/simple_span_processor.rb
212
- - lib/opentelemetry/sdk/trace/multi_span_processor.rb
213
- - lib/opentelemetry/sdk/trace/noop_span_processor.rb
250
+ - lib/opentelemetry/sdk/trace/export/span_exporter.rb
214
251
  - lib/opentelemetry/sdk/trace/samplers.rb
215
252
  - lib/opentelemetry/sdk/trace/samplers/constant_sampler.rb
216
253
  - lib/opentelemetry/sdk/trace/samplers/decision.rb
@@ -219,6 +256,8 @@ files:
219
256
  - lib/opentelemetry/sdk/trace/samplers/trace_id_ratio_based.rb
220
257
  - lib/opentelemetry/sdk/trace/span.rb
221
258
  - lib/opentelemetry/sdk/trace/span_data.rb
259
+ - lib/opentelemetry/sdk/trace/span_limits.rb
260
+ - lib/opentelemetry/sdk/trace/span_processor.rb
222
261
  - lib/opentelemetry/sdk/trace/tracer.rb
223
262
  - lib/opentelemetry/sdk/trace/tracer_provider.rb
224
263
  - lib/opentelemetry/sdk/version.rb
@@ -226,10 +265,10 @@ homepage: https://github.com/open-telemetry/opentelemetry-ruby
226
265
  licenses:
227
266
  - Apache-2.0
228
267
  metadata:
229
- changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-sdk/v0.17.0/file.CHANGELOG.html
268
+ changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-sdk/v1.0.0/file.CHANGELOG.html
230
269
  source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/main/sdk
231
270
  bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby/issues
232
- documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-sdk/v0.17.0
271
+ documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-sdk/v1.0.0
233
272
  post_install_message:
234
273
  rdoc_options: []
235
274
  require_paths:
@@ -1,205 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright The OpenTelemetry Authors
4
- #
5
- # SPDX-License-Identifier: Apache-2.0
6
-
7
- module OpenTelemetry
8
- module SDK
9
- module Resources
10
- module Constants
11
- # Attributes describing a service instance.
12
- SERVICE_RESOURCE = {
13
- # Logical name of the service.
14
- name: 'service.name',
15
-
16
- # A namespace for `service.name`.
17
- namespace: 'service.namespace',
18
-
19
- # The string ID of the service instance.
20
- instance_id: 'service.instance.id',
21
-
22
- # The version string of the service API or implementation.
23
- version: 'service.version'
24
- }.freeze
25
-
26
- # Attributes describing the telemetry library.
27
- TELEMETRY_SDK_RESOURCE = {
28
- # The name of the telemetry library.
29
- name: 'telemetry.sdk.name',
30
-
31
- # The language of the telemetry library and of the code instrumented with it.
32
- language: 'telemetry.sdk.language',
33
-
34
- # The version string of the telemetry library
35
- version: 'telemetry.sdk.version'
36
- }.freeze
37
-
38
- # Attributes defining a compute unit (e.g. Container, Process, Lambda
39
- # Function).
40
- CONTAINER_RESOURCE = {
41
- # The container name.
42
- name: 'container.name',
43
-
44
- # The name of the image the container was built on.
45
- image_name: 'container.image.name',
46
-
47
- # The container image tag.
48
- image_tag: 'container.image.tag'
49
- }.freeze
50
-
51
- FAAS_RESOURCE = {
52
- # The name of the function being executed.
53
- name: 'faas.name',
54
-
55
- # The unique name of the function being executed.
56
- id: 'faas.id',
57
-
58
- # The version string of the function being executed.
59
- version: 'faas.version',
60
-
61
- # The execution environment ID as a string.
62
- instance: 'faas.instance'
63
- }.freeze
64
-
65
- # Attributes defining a deployment service (e.g. Kubernetes).
66
- K8S_RESOURCE = {
67
- # The name of the cluster that the pod is running in.
68
- cluster_name: 'k8s.cluster.name',
69
-
70
- # The name of the Node.
71
- node_name: 'k8s.node.name',
72
-
73
- # The UID of the Node.
74
- node_uid: 'k8s.node.uid',
75
-
76
- # The name of the namespace that the pod is running in.
77
- namespace_name: 'k8s.namespace.name',
78
-
79
- # The name of the pod.
80
- pod_name: 'k8s.pod.name',
81
-
82
- # The UID of the Pod.
83
- pod_uid: 'k8s.pod.uid',
84
-
85
- # The name of the Container in a Pod template.
86
- container_name: 'k8s.container.name',
87
-
88
- # The UID of the ReplicaSet.
89
- replicaset_uid: 'k8s.replicaset.uid',
90
-
91
- # The name of the ReplicaSet.
92
- replicaset_name: 'k8s.replicaset.name',
93
-
94
- # The UID of the Deployment.
95
- deployment_uid: 'k8s.deployment.uid',
96
-
97
- # The name of the deployment.
98
- deployment_name: 'k8s.deployment.name',
99
-
100
- # The UID of the StatefulSet.
101
- statefulset_uid: 'k8s.statefulset.uid',
102
-
103
- # The name of the StatefulSet.
104
- statefulset_name: 'k8s.statefulset.name',
105
-
106
- # The UID of the DaemonSet.
107
- daemonset_uid: 'k8s.daemonset.uid',
108
-
109
- # The name of the DaemonSet.
110
- daemonset_name: 'k8s.daemonset.name',
111
-
112
- # The UID of the Job.
113
- job_uid: 'k8s.job.uid',
114
-
115
- # The name of the Job.
116
- job_name: 'k8s.job.name',
117
-
118
- # The UID of the CronJob.
119
- cronjob_uid: 'k8s.cronjob.uid',
120
-
121
- # The name of the CronJob.
122
- cronjob_name: 'k8s.cronjob.name'
123
- }.freeze
124
-
125
- # Attributes defining an operating system process.
126
- PROCESS_RESOURCE = {
127
- # Process identifier (PID).
128
- pid: 'process.pid',
129
-
130
- # The name of the process executable.
131
- executable_name: 'process.executable.name',
132
-
133
- # The full path to the process executable.
134
- executable_path: 'process.executable.path',
135
-
136
- # The command used to launch the process (i.e. the command name).
137
- command: 'process.command',
138
-
139
- # The full command used to launch the process as a single string
140
- # representing the full command.
141
- command_line: 'process.command_line',
142
-
143
- # All the command arguments (including the command/executable itself)
144
- # as received by the process.
145
- command_args: 'process.command_args',
146
-
147
- # The username of the user that owns the process.
148
- owner: 'process.owner'
149
- }.freeze
150
-
151
- # Attributes defining the single (language) runtime instance which is monitored.
152
- PROCESS_RUNTIME_RESOURCE = {
153
- # The name of the runtime of this process.
154
- name: 'process.runtime.name',
155
-
156
- # The version of the runtime of this process, as returned by the runtime
157
- # without modification.
158
- version: 'process.runtime.version',
159
-
160
- # An additional description about the runtime of the process, for example
161
- # a specific vendor customization of the runtime environment.
162
- description: 'process.runtime.description'
163
- }.freeze
164
-
165
- # Attributes defining a computing instance (e.g. host).
166
- HOST_RESOURCE = {
167
- # Unique host id. For Cloud this must be the instance_id assigned by the
168
- # cloud provider
169
- id: 'host.id',
170
-
171
- # Name of the host. It may contain what hostname returns on Unix systems,
172
- # the fully qualified, or a name specified by the user.
173
- name: 'host.name',
174
-
175
- # Type of host. For Cloud this must be the machine type.
176
- type: 'host.type',
177
-
178
- # Name of the VM image or OS install the host was instantiated from.
179
- image_name: 'host.image.name',
180
-
181
- # VM image id. For Cloud, this value is from the provider.
182
- image_id: 'host.image.id',
183
-
184
- # The version string of the VM image.
185
- image_version: 'host.image.version'
186
- }.freeze
187
-
188
- # Attributes defining a running environment (e.g. Cloud, Data Center).
189
- CLOUD_RESOURCE = {
190
- # Name of the cloud provider. Example values are aws, azure, gcp.
191
- provider: 'cloud.provider',
192
-
193
- # The cloud account id used to identify different entities.
194
- account_id: 'cloud.account.id',
195
-
196
- # A specific geographical location where different entities can run.
197
- region: 'cloud.region',
198
-
199
- # Zones are a sub set of the region connected through low-latency links.
200
- zone: 'cloud.zone'
201
- }.freeze
202
- end
203
- end
204
- end
205
- end
@@ -1,85 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright The OpenTelemetry Authors
4
- #
5
- # SPDX-License-Identifier: Apache-2.0
6
-
7
- module OpenTelemetry
8
- module SDK
9
- module Trace
10
- module Config
11
- # Class that holds global trace parameters.
12
- class TraceConfig
13
- # The global default sampler (see {Samplers}).
14
- attr_reader :sampler
15
-
16
- # The global default max number of attributes per {Span}.
17
- attr_reader :max_attributes_count
18
-
19
- # The global default max length of attribute value per {Span}.
20
- attr_reader :max_attributes_length
21
-
22
- # The global default max number of {OpenTelemetry::SDK::Trace::Event}s per {Span}.
23
- attr_reader :max_events_count
24
-
25
- # The global default max number of {OpenTelemetry::Trace::Link} entries per {Span}.
26
- attr_reader :max_links_count
27
-
28
- # The global default max number of attributes per {OpenTelemetry::SDK::Trace::Event}.
29
- attr_reader :max_attributes_per_event
30
-
31
- # The global default max number of attributes per {OpenTelemetry::Trace::Link}.
32
- attr_reader :max_attributes_per_link
33
-
34
- # Returns a {TraceConfig} with the desired values.
35
- #
36
- # @return [TraceConfig] with the desired values.
37
- # @raise [ArgumentError] if any of the max numbers are not positive.
38
- def initialize(sampler: sampler_from_environment(Samplers.parent_based(root: Samplers::ALWAYS_ON)), # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
39
- max_attributes_count: Integer(ENV.fetch('OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT', 128)),
40
- max_attributes_length: ENV['OTEL_RUBY_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT'],
41
- max_events_count: Integer(ENV.fetch('OTEL_SPAN_EVENT_COUNT_LIMIT', 128)),
42
- max_links_count: Integer(ENV.fetch('OTEL_SPAN_LINK_COUNT_LIMIT', 128)),
43
- max_attributes_per_event: max_attributes_count,
44
- max_attributes_per_link: max_attributes_count)
45
- raise ArgumentError, 'max_attributes_count must be positive' unless max_attributes_count.positive?
46
- raise ArgumentError, 'max_attributes_length must not be less than 32' unless max_attributes_length.nil? || Integer(max_attributes_length) >= 32
47
- raise ArgumentError, 'max_events_count must be positive' unless max_events_count.positive?
48
- raise ArgumentError, 'max_links_count must be positive' unless max_links_count.positive?
49
- raise ArgumentError, 'max_attributes_per_event must be positive' unless max_attributes_per_event.positive?
50
- raise ArgumentError, 'max_attributes_per_link must be positive' unless max_attributes_per_link.positive?
51
-
52
- @sampler = sampler
53
- @max_attributes_count = max_attributes_count
54
- @max_attributes_length = max_attributes_length.nil? ? nil : Integer(max_attributes_length)
55
- @max_events_count = max_events_count
56
- @max_links_count = max_links_count
57
- @max_attributes_per_event = max_attributes_per_event
58
- @max_attributes_per_link = max_attributes_per_link
59
- end
60
-
61
- # TODO: from_proto
62
- private
63
-
64
- def sampler_from_environment(default_sampler) # rubocop:disable Metrics/CyclomaticComplexity
65
- case ENV['OTEL_TRACES_SAMPLER']
66
- when 'always_on' then Samplers::ALWAYS_ON
67
- when 'always_off' then Samplers::ALWAYS_OFF
68
- when 'traceidratio' then Samplers.trace_id_ratio_based(Float(ENV.fetch('OTEL_TRACES_SAMPLER_ARG', 1.0)))
69
- when 'parentbased_always_on' then Samplers.parent_based(root: Samplers::ALWAYS_ON)
70
- when 'parentbased_always_off' then Samplers.parent_based(root: Samplers::ALWAYS_OFF)
71
- when 'parentbased_traceidratio' then Samplers.parent_based(root: Samplers.trace_id_ratio_based(Float(ENV.fetch('OTEL_TRACES_SAMPLER_ARG', 1.0))))
72
- else default_sampler
73
- end
74
- rescue StandardError => e
75
- OpenTelemetry.handle_error(exception: e, message: "installing default sampler #{default_sampler.description}")
76
- default_sampler
77
- end
78
-
79
- # The default {TraceConfig}.
80
- DEFAULT = new
81
- end
82
- end
83
- end
84
- end
85
- end