opentelemetry-exporter-zipkin 0.20.0 → 0.22.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: 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: