opentelemetry-exporter-otlp 0.10.0 → 0.11.0

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: c38c079d7055f8842353fe02c763eaebef34fef5cb2c985eeb7e9027871911aa
4
- data.tar.gz: 47baa5fc026fdca6dba142486283ce11f240ee20dad154d7fe72687f21112fba
3
+ metadata.gz: d07dd6897e62a261598a0ca5319d678e6d996b800f3fc73f2467bcc0c6fa899b
4
+ data.tar.gz: b0dbee8a937d627bc025c650dfe8013cac4e92a78a382523cc796ca996b20676
5
5
  SHA512:
6
- metadata.gz: a55043aeb84da4fa813e8820f4623bbf52b3b4d35712149c0e50eb3240a4309b450879a1fad88635abf8742b05861b49247cc0bbfeb87206b41f8c1d71dba8e0
7
- data.tar.gz: ebf431657653d10763d30b3b77873f6e9733e17c4d0da4ca0513a7f93c99227c7be75976536fca1bae0f2ff1b7fee9ba296fd536aaccdb4f2cf2398cf338e280
6
+ metadata.gz: b847b754f84f5c488b9cf0dde660f4f4fc8c14938f07ae0eadc420b95691a4c7fe304cfb7cc43e56a57c496882167cb1b53136ea64b203bfbb7ed072a9e8ad24
7
+ data.tar.gz: 67654cd2493a263bf804a30ff4edba3834ba312d27c003baa93e630b59f004b355668af65d687849ff395380183af0b70c918e628789eec3e80f290fe2fbd9ae
@@ -1,5 +1,13 @@
1
1
  # Release History: opentelemetry-exporter-otlp
2
2
 
3
+ ### v0.11.0 / 2020-12-11
4
+
5
+ * BREAKING CHANGE: Implement tracestate
6
+
7
+ * ADDED: Implement tracestate
8
+ * ADDED: Metrics reporting from trace export
9
+ * FIXED: Copyright comments to not reference year
10
+
3
11
  ### v0.10.0 / 2020-12-03
4
12
 
5
13
  * (No significant changes)
data/LICENSE CHANGED
@@ -186,7 +186,7 @@
186
186
  same "printed page" as the copyright notice for easier
187
187
  identification within third-party archives.
188
188
 
189
- Copyright 2020 OpenTelemetry Authors
189
+ Copyright The OpenTelemetry Authors
190
190
 
191
191
  Licensed under the Apache License, Version 2.0 (the "License");
192
192
  you may not use this file except in compliance with the License.
@@ -31,12 +31,13 @@ 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
- def initialize(endpoint: config_opt('OTEL_EXPORTER_OTLP_SPAN_ENDPOINT', 'OTEL_EXPORTER_OTLP_ENDPOINT', default: 'localhost:55681/v1/trace'), # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity
34
+ def initialize(endpoint: config_opt('OTEL_EXPORTER_OTLP_SPAN_ENDPOINT', 'OTEL_EXPORTER_OTLP_ENDPOINT', default: 'localhost:55681/v1/trace'), # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
35
35
  insecure: config_opt('OTEL_EXPORTER_OTLP_SPAN_INSECURE', 'OTEL_EXPORTER_OTLP_INSECURE', default: false),
36
36
  certificate_file: config_opt('OTEL_EXPORTER_OTLP_SPAN_CERTIFICATE', 'OTEL_EXPORTER_OTLP_CERTIFICATE'),
37
37
  headers: config_opt('OTEL_EXPORTER_OTLP_SPAN_HEADERS', 'OTEL_EXPORTER_OTLP_HEADERS'), # TODO: what format is expected here?
38
38
  compression: config_opt('OTEL_EXPORTER_OTLP_SPAN_COMPRESSION', 'OTEL_EXPORTER_OTLP_COMPRESSION'),
39
- timeout: config_opt('OTEL_EXPORTER_OTLP_SPAN_TIMEOUT', 'OTEL_EXPORTER_OTLP_TIMEOUT', default: 10))
39
+ timeout: config_opt('OTEL_EXPORTER_OTLP_SPAN_TIMEOUT', 'OTEL_EXPORTER_OTLP_TIMEOUT', default: 10),
40
+ metrics_reporter: nil)
40
41
  raise ArgumentError, "invalid url for OTLP::Exporter #{endpoint}" if invalid_url?("http://#{endpoint}")
41
42
  raise ArgumentError, "unsupported compression key #{compression}" unless compression.nil? || compression == 'gzip'
42
43
  raise ArgumentError, 'headers must be comma-separated k:v pairs or a Hash' unless valid_headers?(headers)
@@ -54,6 +55,7 @@ module OpenTelemetry
54
55
  end
55
56
  @timeout = timeout.to_f # TODO: use this as a default timeout when we implement timeouts in https://github.com/open-telemetry/opentelemetry-ruby/pull/341
56
57
  @compression = compression
58
+ @metrics_reporter = metrics_reporter || OpenTelemetry::SDK::Trace::Export::MetricsReporter
57
59
 
58
60
  @shutdown = false
59
61
  end
@@ -132,7 +134,7 @@ module OpenTelemetry
132
134
  @http.read_timeout = remaining_timeout
133
135
  @http.write_timeout = remaining_timeout if WRITE_TIMEOUT_SUPPORTED
134
136
  @http.start unless @http.started?
135
- response = @http.request(request)
137
+ response = measure_request_duration { @http.request(request) }
136
138
 
137
139
  case response
138
140
  when Net::HTTPOK
@@ -140,11 +142,11 @@ module OpenTelemetry
140
142
  SUCCESS
141
143
  when Net::HTTPServiceUnavailable, Net::HTTPTooManyRequests
142
144
  response.body # Read and discard body
143
- redo if backoff?(retry_after: response['Retry-After'], retry_count: retry_count += 1)
145
+ redo if backoff?(retry_after: response['Retry-After'], retry_count: retry_count += 1, reason: response.code)
144
146
  FAILURE
145
147
  when Net::HTTPRequestTimeOut, Net::HTTPGatewayTimeOut, Net::HTTPBadGateway
146
148
  response.body # Read and discard body
147
- redo if backoff?(retry_count: retry_count += 1)
149
+ redo if backoff?(retry_count: retry_count += 1, reason: response.code)
148
150
  FAILURE
149
151
  when Net::HTTPBadRequest, Net::HTTPClientError, Net::HTTPServerError
150
152
  # TODO: decode the body as a google.rpc.Status Protobuf-encoded message when https://github.com/open-telemetry/opentelemetry-collector/issues/1357 is fixed.
@@ -153,13 +155,13 @@ module OpenTelemetry
153
155
  when Net::HTTPRedirection
154
156
  @http.finish
155
157
  handle_redirect(response['location'])
156
- redo if backoff?(retry_after: 0, retry_count: retry_count += 1)
158
+ redo if backoff?(retry_after: 0, retry_count: retry_count += 1, reason: response.code)
157
159
  else
158
160
  @http.finish
159
161
  FAILURE
160
162
  end
161
163
  rescue Net::OpenTimeout, Net::ReadTimeout
162
- retry if backoff?(retry_count: retry_count += 1)
164
+ retry if backoff?(retry_count: retry_count += 1, reason: 'timeout')
163
165
  return FAILURE
164
166
  end
165
167
  ensure
@@ -177,9 +179,24 @@ module OpenTelemetry
177
179
  OpenTelemetry::Trace.with_span(OpenTelemetry::Trace::Span.new) { yield }
178
180
  end
179
181
 
180
- def backoff?(retry_after: nil, retry_count:)
182
+ def measure_request_duration
183
+ start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
184
+ begin
185
+ response = yield
186
+ ensure
187
+ stop = Process.clock_gettime(Process::CLOCK_MONOTONIC)
188
+ duration_ms = 1000.0 * (stop - start)
189
+ @metrics_reporter.record_value('otel.otlp_exporter.request_duration',
190
+ value: duration_ms,
191
+ labels: { 'status' => response&.code || 'unknown' })
192
+ end
193
+ end
194
+
195
+ def backoff?(retry_after: nil, retry_count:, reason:)
181
196
  return false if retry_count > RETRY_COUNT
182
197
 
198
+ @metrics_reporter.add_to_counter('otel.otlp_exporter.failure', labels: { 'reason' => reason })
199
+
183
200
  sleep_interval = nil
184
201
  unless retry_after.nil?
185
202
  sleep_interval =
@@ -233,7 +250,7 @@ module OpenTelemetry
233
250
  Opentelemetry::Proto::Trace::V1::Span.new(
234
251
  trace_id: span_data.trace_id,
235
252
  span_id: span_data.span_id,
236
- trace_state: span_data.tracestate,
253
+ trace_state: span_data.tracestate.to_s,
237
254
  parent_span_id: span_data.parent_span_id == OpenTelemetry::Trace::INVALID_SPAN_ID ? nil : span_data.parent_span_id,
238
255
  name: span_data.name,
239
256
  kind: as_otlp_span_kind(span_data.kind),
@@ -254,7 +271,7 @@ module OpenTelemetry
254
271
  Opentelemetry::Proto::Trace::V1::Span::Link.new(
255
272
  trace_id: link.span_context.trace_id,
256
273
  span_id: link.span_context.span_id,
257
- trace_state: link.span_context.tracestate,
274
+ trace_state: link.span_context.tracestate.to_s,
258
275
  attributes: link.attributes&.map { |k, v| as_otlp_key_value(k, v) }
259
276
  # TODO: track dropped_attributes_count in Span#trim_links
260
277
  )
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright 2019 OpenTelemetry Authors
3
+ # Copyright The OpenTelemetry Authors
4
4
  #
5
5
  # SPDX-License-Identifier: Apache-2.0
6
6
 
@@ -8,7 +8,7 @@ module OpenTelemetry
8
8
  module Exporter
9
9
  module OTLP
10
10
  ## Current OpenTelemetry OTLP exporter version
11
- VERSION = '0.10.0'
11
+ VERSION = '0.11.0'
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.10.0
4
+ version: 0.11.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: 2020-12-03 00:00:00.000000000 Z
11
+ date: 2020-12-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: google-protobuf
@@ -36,28 +36,28 @@ dependencies:
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: 0.10.0
39
+ version: 0.11.0
40
40
  type: :runtime
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
- version: 0.10.0
46
+ version: 0.11.0
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: opentelemetry-common
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: 0.10.0
53
+ version: 0.11.0
54
54
  type: :runtime
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: 0.10.0
60
+ version: 0.11.0
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: bundler
63
63
  requirement: !ruby/object:Gem::Requirement
@@ -207,10 +207,10 @@ homepage: https://github.com/open-telemetry/opentelemetry-ruby
207
207
  licenses:
208
208
  - Apache-2.0
209
209
  metadata:
210
- changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-exporter-otlp/v0.10.0/file.CHANGELOG.html
210
+ changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-exporter-otlp/v0.11.0/file.CHANGELOG.html
211
211
  source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/master/exporter/otlp
212
212
  bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby/issues
213
- documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-exporter-otlp/v0.10.0
213
+ documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-exporter-otlp/v0.11.0
214
214
  post_install_message:
215
215
  rdoc_options: []
216
216
  require_paths: