opentelemetry-exporter-otlp 0.20.1 → 0.20.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: eaad2b71ecee14b25626ab9a081b837972160d1482b7936c7aaa6ae843d05d05
4
- data.tar.gz: 459cc38c5d021a2b87044a25f5a9d9df2688852f7cb3c2c593b3d7a72d692e46
3
+ metadata.gz: 8530c195f058735185d2ea019dc1e889f9fb394cda91a0117386e41e7b5dd415
4
+ data.tar.gz: cdcfb33aaef38cf55c458a709a652701d7baaeebf6ad963a88ed1a0beefd8ee4
5
5
  SHA512:
6
- metadata.gz: 82b047da9287198aef162b6afe176e37a6d73304ea081efff724d4452aedf931dd1617995ea07181bf09ada22f3db50d41abba03253f44dd1f0a11e207f231de
7
- data.tar.gz: 38f2fcfd39070808b6a50b0bc3efb891f8910e0898a2a00f2f2a3f481d8e9c98ec563b6269385068426837a8420fe9475a8dcd75d50ffb1fa076d2de223c2d4e
6
+ metadata.gz: 127ac744ca9a47efd6780d11f36e5dec7e0989922b3ff07781ab74285131350b95c192a271cd56a319c1eb2c4a82f97ae96f181a847d777243de58d81d2d7999
7
+ data.tar.gz: 03517ea7670f36d0df88478493a34452f5fd3aa58c0a58096533f10e48aeb8bec21033b67632584875628c7368655398dcd858ab2b324b1c8997373f51b36109
data/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # Release History: opentelemetry-exporter-otlp
2
2
 
3
+ ### v0.20.5 / 2021-09-29
4
+
5
+ * (No significant changes)
6
+
7
+ ### v0.20.4 / 2021-09-29
8
+
9
+ * FIXED: OTLP Export Header Format
10
+
11
+ ### v0.20.3 / 2021-08-19
12
+
13
+ * FIXED: OTLP exporter missing failure metrics
14
+
15
+ ### v0.20.2 / 2021-08-12
16
+
17
+ * FIXED: Add rescue for OpenSSL errors during export
18
+ * DOCS: Update docs to rely more on environment variable configuration
19
+
3
20
  ### v0.20.1 / 2021-06-29
4
21
 
5
22
  * FIXED: Otlp encoding exceptions again
data/README.md CHANGED
@@ -35,16 +35,15 @@ Then, configure the SDK to use the OTLP exporter as a span processor, and use th
35
35
  require 'opentelemetry/sdk'
36
36
  require 'opentelemetry/exporter/otlp'
37
37
 
38
- # Configure the sdk with custom export
39
- OpenTelemetry::SDK.configure do |c|
40
- c.add_span_processor(
41
- OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(
42
- OpenTelemetry::Exporter::OTLP::Exporter.new(
43
- compression: 'gzip'
44
- )
45
- )
46
- )
47
- end
38
+ # The OTLP exporter is the default, so no configuration is needed.
39
+ # However, it could be manually selected via an environment variable if required:
40
+ #
41
+ # ENV['OTEL_TRACES_EXPORTER'] = 'otlp'
42
+ #
43
+ # You may also configure various settings via environment variables:
44
+ # ENV['OTEL_EXPORTER_OTLP_COMPRESSION'] = 'gzip'
45
+
46
+ OpenTelemetry::SDK.configure
48
47
 
49
48
  # To start a trace you need to get a Tracer from the TracerProvider
50
49
  tracer = OpenTelemetry.tracer_provider.tracer('my_app_or_gem', '0.1.0')
@@ -67,7 +66,7 @@ For additional examples, see the [examples on github][examples-github].
67
66
 
68
67
  ## How can I configure the OTLP exporter?
69
68
 
70
- The collector exporter can be configured explicitly in code, as shown above, or via environment variables. The configuration parameters, environment variables, and defaults are shown below.
69
+ The collector exporter can be configured explicitly in code, or via environment variables as shown above. The configuration parameters, environment variables, and defaults are shown below.
71
70
 
72
71
  | Parameter | Environment variable | Default |
73
72
  | ------------------- | -------------------------------------------- | ----------------------------------- |
@@ -31,6 +31,9 @@ module OpenTelemetry
31
31
  WRITE_TIMEOUT_SUPPORTED = Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.6')
32
32
  private_constant(:KEEP_ALIVE_TIMEOUT, :RETRY_COUNT, :WRITE_TIMEOUT_SUPPORTED)
33
33
 
34
+ ERROR_MESSAGE_INVALID_HEADERS = 'headers must be a String with comma-separated URL Encoded UTF-8 k=v pairs or a Hash'
35
+ private_constant(:ERROR_MESSAGE_INVALID_HEADERS)
36
+
34
37
  def self.ssl_verify_mode
35
38
  if ENV.key?('OTEL_RUBY_EXPORTER_OTLP_SSL_VERIFY_PEER')
36
39
  OpenSSL::SSL::VERIFY_PEER
@@ -41,16 +44,15 @@ module OpenTelemetry
41
44
  end
42
45
  end
43
46
 
44
- def initialize(endpoint: config_opt('OTEL_EXPORTER_OTLP_TRACES_ENDPOINT', 'OTEL_EXPORTER_OTLP_ENDPOINT', default: 'https://localhost:4317/v1/traces'), # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/MethodLength
47
+ def initialize(endpoint: config_opt('OTEL_EXPORTER_OTLP_TRACES_ENDPOINT', 'OTEL_EXPORTER_OTLP_ENDPOINT', default: 'https://localhost:4317/v1/traces'), # rubocop:disable Metrics/MethodLength, Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
45
48
  certificate_file: config_opt('OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE', 'OTEL_EXPORTER_OTLP_CERTIFICATE'),
46
49
  ssl_verify_mode: Exporter.ssl_verify_mode,
47
- headers: config_opt('OTEL_EXPORTER_OTLP_TRACES_HEADERS', 'OTEL_EXPORTER_OTLP_HEADERS'),
50
+ headers: config_opt('OTEL_EXPORTER_OTLP_TRACES_HEADERS', 'OTEL_EXPORTER_OTLP_HEADERS', default: {}),
48
51
  compression: config_opt('OTEL_EXPORTER_OTLP_TRACES_COMPRESSION', 'OTEL_EXPORTER_OTLP_COMPRESSION'),
49
52
  timeout: config_opt('OTEL_EXPORTER_OTLP_TRACES_TIMEOUT', 'OTEL_EXPORTER_OTLP_TIMEOUT', default: 10),
50
53
  metrics_reporter: nil)
51
54
  raise ArgumentError, "invalid url for OTLP::Exporter #{endpoint}" if invalid_url?(endpoint)
52
55
  raise ArgumentError, "unsupported compression key #{compression}" unless compression.nil? || compression == 'gzip'
53
- raise ArgumentError, 'headers must be comma-separated k=v pairs or a Hash' unless valid_headers?(headers)
54
56
 
55
57
  @uri = if endpoint == ENV['OTEL_EXPORTER_OTLP_ENDPOINT']
56
58
  URI("#{endpoint}/v1/traces")
@@ -66,8 +68,10 @@ module OpenTelemetry
66
68
 
67
69
  @path = @uri.path
68
70
  @headers = case headers
69
- when String then CSV.parse(headers, col_sep: '=', row_sep: ',').to_h
71
+ when String then parse_headers(headers)
70
72
  when Hash then headers
73
+ else
74
+ raise ArgumentError, ERROR_MESSAGE_INVALID_HEADERS
71
75
  end
72
76
  @timeout = timeout.to_f
73
77
  @compression = compression
@@ -118,16 +122,6 @@ module OpenTelemetry
118
122
  default
119
123
  end
120
124
 
121
- def valid_headers?(headers)
122
- return true if headers.nil? || headers.is_a?(Hash)
123
- return false unless headers.is_a?(String)
124
-
125
- CSV.parse(headers, col_sep: '=', row_sep: ',').to_h
126
- true
127
- rescue ArgumentError
128
- false
129
- end
130
-
131
125
  def invalid_url?(url)
132
126
  return true if url.nil? || url.strip.empty?
133
127
 
@@ -161,7 +155,7 @@ module OpenTelemetry
161
155
  bytes
162
156
  end
163
157
  request.add_field('Content-Type', 'application/x-protobuf')
164
- @headers&.each { |key, value| request.add_field(key, value) }
158
+ @headers.each { |key, value| request.add_field(key, value) }
165
159
 
166
160
  remaining_timeout = OpenTelemetry::Common::Utilities.maybe_timeout(timeout, start_time)
167
161
  return TIMEOUT if remaining_timeout.zero?
@@ -187,6 +181,7 @@ module OpenTelemetry
187
181
  when Net::HTTPBadRequest, Net::HTTPClientError, Net::HTTPServerError
188
182
  # TODO: decode the body as a google.rpc.Status Protobuf-encoded message when https://github.com/open-telemetry/opentelemetry-collector/issues/1357 is fixed.
189
183
  response.body # Read and discard body
184
+ @metrics_reporter.add_to_counter('otel.otlp_exporter.failure', labels: { 'reason' => response.code })
190
185
  FAILURE
191
186
  when Net::HTTPRedirection
192
187
  @http.finish
@@ -199,6 +194,9 @@ module OpenTelemetry
199
194
  rescue Net::OpenTimeout, Net::ReadTimeout
200
195
  retry if backoff?(retry_count: retry_count += 1, reason: 'timeout')
201
196
  return FAILURE
197
+ rescue OpenSSL::SSL::SSLError
198
+ retry if backoff?(retry_count: retry_count += 1, reason: 'openssl_error')
199
+ return FAILURE
202
200
  rescue SocketError
203
201
  retry if backoff?(retry_count: retry_count += 1, reason: 'socket_error')
204
202
  return FAILURE
@@ -234,9 +232,8 @@ module OpenTelemetry
234
232
  end
235
233
 
236
234
  def backoff?(retry_after: nil, retry_count:, reason:)
237
- return false if retry_count > RETRY_COUNT
238
-
239
235
  @metrics_reporter.add_to_counter('otel.otlp_exporter.failure', labels: { 'reason' => reason })
236
+ return false if retry_count > RETRY_COUNT
240
237
 
241
238
  sleep_interval = nil
242
239
  unless retry_after.nil?
@@ -364,6 +361,24 @@ module OpenTelemetry
364
361
  end
365
362
  result
366
363
  end
364
+
365
+ def parse_headers(raw)
366
+ entries = raw.split(',')
367
+ raise ArgumentError, ERROR_MESSAGE_INVALID_HEADERS if entries.empty?
368
+
369
+ entries.each_with_object({}) do |entry, headers|
370
+ k, v = entry.split('=', 2).map(&CGI.method(:unescape))
371
+ begin
372
+ k = k.to_s.strip
373
+ v = v.to_s.strip
374
+ rescue ArgumentError => e
375
+ raise e, ERROR_MESSAGE_INVALID_HEADERS
376
+ end
377
+ raise ArgumentError, ERROR_MESSAGE_INVALID_HEADERS if k.empty? || v.empty?
378
+
379
+ headers[k] = v
380
+ end
381
+ end
367
382
  end
368
383
  end
369
384
  end
@@ -8,7 +8,7 @@ module OpenTelemetry
8
8
  module Exporter
9
9
  module OTLP
10
10
  ## Current OpenTelemetry OTLP exporter version
11
- VERSION = '0.20.1'
11
+ VERSION = '0.20.5'
12
12
  end
13
13
  end
14
14
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opentelemetry-exporter-otlp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.20.1
4
+ version: 0.20.5
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-06-29 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: google-protobuf
@@ -30,42 +30,42 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 1.0.0.rc2
33
+ version: '1.0'
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: 1.0.0.rc2
40
+ version: '1.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: opentelemetry-common
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.19.0
47
+ version: 0.19.2
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.19.0
54
+ version: 0.19.2
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: opentelemetry-sdk
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 1.0.0.rc2
61
+ version: '1.0'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 1.0.0.rc2
68
+ version: '1.0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: bundler
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: '5.0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: pry-byebug
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: rake
113
127
  requirement: !ruby/object:Gem::Requirement
@@ -215,10 +229,10 @@ homepage: https://github.com/open-telemetry/opentelemetry-ruby
215
229
  licenses:
216
230
  - Apache-2.0
217
231
  metadata:
218
- changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-exporter-otlp/v0.20.1/file.CHANGELOG.html
232
+ changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-exporter-otlp/v0.20.5/file.CHANGELOG.html
219
233
  source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/main/exporter/otlp
220
234
  bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby/issues
221
- documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-exporter-otlp/v0.20.1
235
+ documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-exporter-otlp/v0.20.5
222
236
  post_install_message:
223
237
  rdoc_options: []
224
238
  require_paths: