opentelemetry-exporter-zipkin 0.20.0 → 0.22.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dd0f6efbe1457e04c816f0e2be81ad8cf1ea5ab59a8c76a939429776cb46b9fa
4
- data.tar.gz: 46067ad66e3b6b3c5121936f5f0fa74860d21a14c90abcdbf266f37ea8471e9d
3
+ metadata.gz: ce9a72f8ea654dd6f51d8066e93c0cf54833ef7ae7abd5f75420a14be4ff1827
4
+ data.tar.gz: 95abf49f858e331a719a5f1bd815c67637b8ebacc2ffdd35f432a223fcd42cc3
5
5
  SHA512:
6
- metadata.gz: 50cc28cfa5da93f15b5f0e32ef10b003357dc06583638cd93ae9574f0fc187e5e3aff5694f6007b326f784e5aca2ba7adaf1da47b583f6cdf766c9aea1246142
7
- data.tar.gz: 3418502a4f82b0e2e260bee0423f51aa28772f69ba7ea9233a54877bf76c3f77669caf6bafcdfd05bf8da47a2cd2835565714a9ff69ee3693460b1c5eead14bc
6
+ metadata.gz: 0feb421e2bde5ae20949be3955a155b643efcc438a6355f637cc4afc9cfd9b954a4ca498560f4ef85ddbc5b13df6889b31faa805a8f362e3133ce352bea4026a
7
+ data.tar.gz: 1ce234a51afb7d73826bf9fb27bd2e6cbc64296ef12bba7d2decabd188e8e1fd79ac9d932ac21fd0323310099286e9143c9f21f3f8e8678f495bb7ff4097bb74
data/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # Release History: opentelemetry-exporter-zipkin
2
2
 
3
+ ### v0.22.0 / 2023-05-30
4
+
5
+ * ADDED: Custom Metrics Reporter Support for Zipkin
6
+
7
+ ### v0.21.0 / 2022-09-14
8
+
9
+ * ADDED: Add dropped events/attributes/links counts to zipkin + jaeger exporters
10
+ * ADDED: Support InstrumentationScope, and update OTLP proto to 0.18.0
11
+
3
12
  ### v0.20.0 / 2022-06-09
4
13
 
5
14
  * (No significant changes)
@@ -29,7 +29,8 @@ module OpenTelemetry
29
29
 
30
30
  def initialize(endpoint: OpenTelemetry::Common::Utilities.config_opt('OTEL_EXPORTER_ZIPKIN_ENDPOINT', default: 'http://localhost:9411/api/v2/spans'),
31
31
  headers: OpenTelemetry::Common::Utilities.config_opt('OTEL_EXPORTER_ZIPKIN_TRACES_HEADERS', 'OTEL_EXPORTER_ZIPKIN_HEADERS'),
32
- timeout: OpenTelemetry::Common::Utilities.config_opt('OTEL_EXPORTER_ZIPKIN_TRACES_TIMEOUT', 'OTEL_EXPORTER_ZIPKIN_TIMEOUT', default: 10))
32
+ timeout: OpenTelemetry::Common::Utilities.config_opt('OTEL_EXPORTER_ZIPKIN_TRACES_TIMEOUT', 'OTEL_EXPORTER_ZIPKIN_TIMEOUT', default: 10),
33
+ metrics_reporter: nil)
33
34
  raise ArgumentError, "invalid url for Zipkin::Exporter #{endpoint}" unless OpenTelemetry::Common::Utilities.valid_url?(endpoint)
34
35
  raise ArgumentError, 'headers must be comma-separated k=v pairs or a Hash' unless valid_headers?(headers)
35
36
 
@@ -50,6 +51,7 @@ module OpenTelemetry
50
51
  when Hash then headers
51
52
  end
52
53
 
54
+ @metrics_reporter = metrics_reporter || OpenTelemetry::SDK::Trace::Export::MetricsReporter
53
55
  @shutdown = false
54
56
  end
55
57
 
@@ -66,6 +68,7 @@ module OpenTelemetry
66
68
  zipkin_spans = encode_spans(span_data)
67
69
  send_spans(zipkin_spans, timeout: timeout)
68
70
  rescue StandardError => e
71
+ @metrics_reporter.add_to_counter('otel.zipkin_exporter.failure', labels: { 'reason' => e.class.to_s })
69
72
  OpenTelemetry.handle_error(exception: e, message: 'unexpected error in Zipkin::Exporter#export')
70
73
  FAILURE
71
74
  end
@@ -112,7 +115,7 @@ module OpenTelemetry
112
115
  false
113
116
  end
114
117
 
115
- def send_spans(zipkin_spans, timeout: nil) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
118
+ def send_spans(zipkin_spans, timeout: nil) # rubocop:disable Metrics/MethodLength
116
119
  retry_count = 0
117
120
  timeout ||= @timeout
118
121
  start_time = OpenTelemetry::Common::Utilities.timeout_timestamp
@@ -130,7 +133,7 @@ module OpenTelemetry
130
133
  @http.write_timeout = remaining_timeout if WRITE_TIMEOUT_SUPPORTED
131
134
  @http.start unless @http.started?
132
135
 
133
- response = @http.request(request)
136
+ response = measure_request_duration { @http.request(request) }
134
137
  response.body # Read and discard body
135
138
  # in opentelemetry-js 200-399 is succcess, in opentelemetry-collector zipkin exporter,200-299 is a success
136
139
  # zipkin api docs list 202 as default success code
@@ -171,7 +174,7 @@ module OpenTelemetry
171
174
  # TODO: figure out destination and reinitialize @http and @path
172
175
  end
173
176
 
174
- def backoff?(retry_after: nil, retry_count:, reason:)
177
+ def backoff?(retry_count:, reason:, retry_after: nil)
175
178
  return false if retry_count > RETRY_COUNT
176
179
 
177
180
  # TODO: metric exporter
@@ -197,6 +200,19 @@ module OpenTelemetry
197
200
  sleep(sleep_interval)
198
201
  true
199
202
  end
203
+
204
+ def measure_request_duration
205
+ start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
206
+ begin
207
+ response = yield
208
+ ensure
209
+ stop = Process.clock_gettime(Process::CLOCK_MONOTONIC)
210
+ duration_ms = 1000.0 * (stop - start)
211
+ @metrics_reporter.record_value('otel.zipkin_exporter.request_duration',
212
+ value: duration_ms,
213
+ labels: { 'status' => response&.code || 'unknown' })
214
+ end
215
+ end
200
216
  end
201
217
  end
202
218
  end
@@ -46,7 +46,7 @@ module OpenTelemetry
46
46
  service_name = value if key == SERVICE_NAME_ATTRIBUTE_KEY
47
47
  end
48
48
 
49
- add_il_tags(span_d, tags)
49
+ add_scope_tags(span_d, tags)
50
50
  add_status_tags(span_d, tags)
51
51
  tags = aggregate_span_tags(span_d, tags)
52
52
 
@@ -70,9 +70,12 @@ module OpenTelemetry
70
70
  zipkin_span
71
71
  end
72
72
 
73
- def add_il_tags(span_data, tags)
74
- tags['otel.library.name'] = span_data.instrumentation_library.name
75
- tags['otel.library.version'] = span_data.instrumentation_library.version
73
+ def add_scope_tags(span_data, tags)
74
+ tags['otel.scope.name'] = span_data.instrumentation_scope.name
75
+ tags['otel.library.name'] = span_data.instrumentation_scope.name
76
+
77
+ tags['otel.scope.version'] = span_data.instrumentation_scope.version
78
+ tags['otel.library.version'] = span_data.instrumentation_scope.version
76
79
  end
77
80
 
78
81
  def add_status_tags(span_data, tags)
@@ -89,6 +92,13 @@ module OpenTelemetry
89
92
  end
90
93
 
91
94
  def add_conditional_tags(zipkin_span, span_data, tags, service_name)
95
+ dropped_attributes_count = span_data.total_recorded_attributes - span_data.attributes&.size.to_i
96
+ dropped_events_count = span_data.total_recorded_events - span_data.events&.size.to_i
97
+ dropped_links_count = span_data.total_recorded_links - span_data.links&.size.to_i
98
+ tags['otel.dropped_attributes_count'] = dropped_attributes_count.to_s if dropped_attributes_count.positive?
99
+ tags['otel.dropped_events_count'] = dropped_events_count.to_s if dropped_events_count.positive?
100
+ tags['otel.dropped_links_count'] = dropped_links_count.to_s if dropped_links_count.positive?
101
+
92
102
  zipkin_span['tags'] = tags unless tags.empty?
93
103
  zipkin_span['kind'] = KIND_MAP[span_data.kind] unless span_data.kind.nil?
94
104
  zipkin_span['parentId'] = span_data.hex_parent_span_id unless span_data.parent_span_id == OpenTelemetry::Trace::INVALID_SPAN_ID
@@ -8,7 +8,7 @@ module OpenTelemetry
8
8
  module Exporter
9
9
  module Zipkin
10
10
  ## Current OpenTelemetry Zipkin exporter version
11
- VERSION = '0.20.0'
11
+ VERSION = '0.22.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-zipkin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.20.0
4
+ version: 0.22.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: 2022-06-09 00:00:00.000000000 Z
11
+ date: 2023-05-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opentelemetry-api
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.0'
19
+ version: '1.1'
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: '1.0'
26
+ version: '1.1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: opentelemetry-common
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '1.0'
47
+ version: '1.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: '1.0'
54
+ version: '1.2'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: opentelemetry-semantic_conventions
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -142,14 +142,14 @@ dependencies:
142
142
  requirements:
143
143
  - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: 0.73.0
145
+ version: 1.51.0
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: 0.73.0
152
+ version: 1.51.0
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: simplecov
155
155
  requirement: !ruby/object:Gem::Requirement
@@ -226,10 +226,10 @@ homepage: https://github.com/open-telemetry/opentelemetry-ruby
226
226
  licenses:
227
227
  - Apache-2.0
228
228
  metadata:
229
- changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-exporter-zipkin/v0.20.0/file.CHANGELOG.html
229
+ changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-exporter-zipkin/v0.22.0/file.CHANGELOG.html
230
230
  source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/main/exporter/zipkin
231
231
  bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby/issues
232
- documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-exporter-zipkin/v0.20.0
232
+ documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-exporter-zipkin/v0.22.0
233
233
  post_install_message:
234
234
  rdoc_options: []
235
235
  require_paths: