Skip to content

Commit e1830a9

Browse files
committed
Add a bunch of debug logs to help debugging issues
1 parent 81f6d1d commit e1830a9

File tree

3 files changed

+100
-8
lines changed

3 files changed

+100
-8
lines changed

exporter/otlp-http/lib/opentelemetry/exporter/otlp/http/trace_exporter.rb

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ def initialize(endpoint: OpenTelemetry::Common::Utilities.config_opt('OTEL_EXPOR
7171
# @param [optional Numeric] timeout An optional timeout in seconds.
7272
# @return [Integer] the result of the export.
7373
def export(span_data, timeout: nil)
74+
OpenTelemetry.logger.debug("OTLP::HTTP::TraceExporter#export: Called with #{span_data.size} spans, timeout=#{timeout.inspect}")
7475
return OpenTelemetry::SDK::Trace::Export.failure(message: 'exporter is shutdown') if @shutdown
7576

7677
send_bytes(OpenTelemetry::Exporter::OTLP::Common.as_encoded_etsr(span_data), timeout: timeout)
@@ -131,26 +132,33 @@ def around_request
131132
end
132133

133134
def send_bytes(bytes, timeout:) # rubocop:disable Metrics/MethodLength
135+
OpenTelemetry.logger.debug("OTLP::HTTP::TraceExporter#send_bytes: Entry with bytes.nil?=#{bytes.nil?}, timeout=#{timeout.inspect}")
134136
if bytes.nil?
135137
OpenTelemetry.logger.error('OTLP::HTTP::TraceExporter: send_bytes called with nil bytes')
136138
return OpenTelemetry::SDK::Trace::Export.failure(message: 'send_bytes called with nil bytes')
137139
end
138140

141+
OpenTelemetry.logger.debug("OTLP::HTTP::TraceExporter#send_bytes: Uncompressed size=#{bytes.bytesize} bytes")
139142
retry_count = 0
140143
timeout ||= @timeout
141144
start_time = OpenTelemetry::Common::Utilities.timeout_timestamp
145+
OpenTelemetry.logger.debug("OTLP::HTTP::TraceExporter#send_bytes: Starting request to #{@uri} with timeout=#{timeout}s")
142146
around_request do # rubocop:disable Metrics/BlockLength
143147
request = Net::HTTP::Post.new(@path)
144148
request.body = if @compression == 'gzip'
145149
request.add_field('Content-Encoding', 'gzip')
146-
Zlib.gzip(bytes)
150+
compressed = Zlib.gzip(bytes)
151+
OpenTelemetry.logger.debug("OTLP::HTTP::TraceExporter#send_bytes: Compressed size=#{compressed.bytesize} bytes")
152+
compressed
147153
else
154+
OpenTelemetry.logger.debug("OTLP::HTTP::TraceExporter#send_bytes: No compression applied")
148155
bytes
149156
end
150157
request.add_field('Content-Type', 'application/x-protobuf')
151158
@headers.each { |key, value| request.add_field(key, value) }
152159

153160
remaining_timeout = OpenTelemetry::Common::Utilities.maybe_timeout(timeout, start_time)
161+
OpenTelemetry.logger.debug("OTLP::HTTP::TraceExporter#send_bytes: Remaining timeout=#{remaining_timeout}s, retry_count=#{retry_count}")
154162
if remaining_timeout.zero?
155163
OpenTelemetry.logger.error('OTLP::HTTP::TraceExporter: timeout exceeded before sending request')
156164
return OpenTelemetry::SDK::Trace::Export.failure(message: 'timeout exceeded before sending request')
@@ -160,68 +168,92 @@ def send_bytes(bytes, timeout:) # rubocop:disable Metrics/MethodLength
160168
@http.read_timeout = remaining_timeout
161169
@http.write_timeout = remaining_timeout
162170
@http.start unless @http.started?
171+
OpenTelemetry.logger.debug("OTLP::HTTP::TraceExporter#send_bytes: Sending HTTP request")
163172
response = measure_request_duration { @http.request(request) }
173+
OpenTelemetry.logger.debug("OTLP::HTTP::TraceExporter#send_bytes: Received response code=#{response.code}, message=#{response.message}")
164174

165175
case response
166176
when Net::HTTPOK
177+
OpenTelemetry.logger.debug("OTLP::HTTP::TraceExporter#send_bytes: SUCCESS - HTTP 200 OK")
167178
response.body # Read and discard body
168179
SUCCESS
169180
when Net::HTTPServiceUnavailable, Net::HTTPTooManyRequests
170181
body = response.body
182+
OpenTelemetry.logger.debug("OTLP::HTTP::TraceExporter#send_bytes: ServiceUnavailable/TooManyRequests - retry_count=#{retry_count + 1}, retry_after=#{response['Retry-After']}")
171183
redo if backoff?(retry_after: response['Retry-After'], retry_count: retry_count += 1, reason: response.code)
184+
OpenTelemetry.logger.debug("OTLP::HTTP::TraceExporter#send_bytes: FAILURE after max retries - HTTP #{response.code}")
172185
OpenTelemetry.logger.error("OTLP::HTTP::TraceExporter: export failed with #{response.code} after #{retry_count} retries")
173186
OpenTelemetry::SDK::Trace::Export.failure(message: "export failed with HTTP #{response.code} (#{response.message}) after #{retry_count} retries: #{body}")
174187
when Net::HTTPRequestTimeOut, Net::HTTPGatewayTimeOut, Net::HTTPBadGateway
175188
body = response.body
189+
OpenTelemetry.logger.debug("OTLP::HTTP::TraceExporter#send_bytes: Timeout/Gateway error - retry_count=#{retry_count + 1}, code=#{response.code}")
176190
redo if backoff?(retry_count: retry_count += 1, reason: response.code)
191+
OpenTelemetry.logger.debug("OTLP::HTTP::TraceExporter#send_bytes: FAILURE after max retries - HTTP #{response.code}")
177192
OpenTelemetry.logger.error("OTLP::HTTP::TraceExporter: export failed with #{response.code} after #{retry_count} retries")
178193
OpenTelemetry::SDK::Trace::Export.failure(message: "export failed with HTTP #{response.code} (#{response.message}) after #{retry_count} retries: #{body}")
179194
when Net::HTTPBadRequest, Net::HTTPClientError, Net::HTTPServerError
180195
body = response.body
196+
OpenTelemetry.logger.debug("OTLP::HTTP::TraceExporter#send_bytes: Client/Server error - HTTP #{response.code}")
181197
log_status(body)
182198
@metrics_reporter.add_to_counter('otel.otlp_exporter.failure', labels: { 'reason' => response.code })
183199
OpenTelemetry::SDK::Trace::Export.failure(message: "export failed with HTTP #{response.code} (#{response.message}): #{body}")
184200
when Net::HTTPRedirection
201+
OpenTelemetry.logger.debug("OTLP::HTTP::TraceExporter#send_bytes: Redirect to location=#{response['location']}")
185202
@http.finish
186203
handle_redirect(response['location'])
187204
redo if backoff?(retry_after: 0, retry_count: retry_count += 1, reason: response.code)
188205
else
206+
OpenTelemetry.logger.debug("OTLP::HTTP::TraceExporter#send_bytes: Unexpected response - code=#{response.code}, class=#{response.class}")
189207
@http.finish
190208
body = response.body
191209
OpenTelemetry.logger.error("OTLP::HTTP::TraceExporter: export failed with unexpected HTTP response #{response.code}")
192210
OpenTelemetry::SDK::Trace::Export.failure(message: "export failed with unexpected HTTP response #{response.code} (#{response.message}): #{body}")
193211
end
194212
rescue Net::OpenTimeout, Net::ReadTimeout => e
213+
OpenTelemetry.logger.debug("OTLP::HTTP::TraceExporter#send_bytes: Caught #{e.class}: #{e.message}, retry_count=#{retry_count + 1}")
195214
retry if backoff?(retry_count: retry_count += 1, reason: 'timeout')
215+
OpenTelemetry.logger.debug("OTLP::HTTP::TraceExporter#send_bytes: Max retries exceeded for #{e.class}")
196216
OpenTelemetry.logger.error("OTLP::HTTP::TraceExporter: export failed due to #{e.class} after #{retry_count} retries")
197217
return OpenTelemetry::SDK::Trace::Export.failure(error: e, message: "export failed due to #{e.class} after #{retry_count} retries")
198218
rescue OpenSSL::SSL::SSLError => e
219+
OpenTelemetry.logger.debug("OTLP::HTTP::TraceExporter#send_bytes: Caught SSLError: #{e.message}, retry_count=#{retry_count + 1}")
199220
retry if backoff?(retry_count: retry_count += 1, reason: 'openssl_error')
221+
OpenTelemetry.logger.debug("OTLP::HTTP::TraceExporter#send_bytes: Max retries exceeded for SSLError")
200222
OpenTelemetry.handle_error(exception: e, message: 'SSL error in OTLP::Exporter#send_bytes')
201223
return OpenTelemetry::SDK::Trace::Export.failure(error: e, message: 'SSL error in OTLP::Exporter#send_bytes')
202224
rescue SocketError => e
225+
OpenTelemetry.logger.debug("OTLP::HTTP::TraceExporter#send_bytes: Caught SocketError: #{e.message}, retry_count=#{retry_count + 1}")
203226
retry if backoff?(retry_count: retry_count += 1, reason: 'socket_error')
227+
OpenTelemetry.logger.debug("OTLP::HTTP::TraceExporter#send_bytes: Max retries exceeded for SocketError")
204228
OpenTelemetry.logger.error("OTLP::HTTP::TraceExporter: export failed due to SocketError after #{retry_count} retries: #{e.message}")
205229
return OpenTelemetry::SDK::Trace::Export.failure(error: e, message: "export failed due to SocketError after #{retry_count} retries: #{e.message}")
206230
rescue SystemCallError => e
231+
OpenTelemetry.logger.debug("OTLP::HTTP::TraceExporter#send_bytes: Caught #{e.class}: #{e.message}, retry_count=#{retry_count + 1}")
207232
retry if backoff?(retry_count: retry_count += 1, reason: e.class.name)
233+
OpenTelemetry.logger.debug("OTLP::HTTP::TraceExporter#send_bytes: Max retries exceeded for #{e.class}")
208234
OpenTelemetry.logger.error("OTLP::HTTP::TraceExporter: export failed due to #{e.class} after #{retry_count} retries: #{e.message}")
209235
return OpenTelemetry::SDK::Trace::Export.failure(error: e, message: "export failed due to #{e.class} after #{retry_count} retries: #{e.message}")
210236
rescue EOFError => e
237+
OpenTelemetry.logger.debug("OTLP::HTTP::TraceExporter#send_bytes: Caught EOFError: #{e.message}, retry_count=#{retry_count + 1}")
211238
retry if backoff?(retry_count: retry_count += 1, reason: 'eof_error')
239+
OpenTelemetry.logger.debug("OTLP::HTTP::TraceExporter#send_bytes: Max retries exceeded for EOFError")
212240
OpenTelemetry.logger.error("OTLP::HTTP::TraceExporter: export failed due to EOFError after #{retry_count} retries: #{e.message}")
213241
return OpenTelemetry::SDK::Trace::Export.failure(error: e, message: "export failed due to EOFError after #{retry_count} retries: #{e.message}")
214242
rescue Zlib::DataError => e
243+
OpenTelemetry.logger.debug("OTLP::HTTP::TraceExporter#send_bytes: Caught Zlib::DataError: #{e.message}, retry_count=#{retry_count + 1}")
215244
retry if backoff?(retry_count: retry_count += 1, reason: 'zlib_error')
245+
OpenTelemetry.logger.debug("OTLP::HTTP::TraceExporter#send_bytes: Max retries exceeded for Zlib::DataError")
216246
OpenTelemetry.logger.error("OTLP::HTTP::TraceExporter: export failed due to Zlib::DataError after #{retry_count} retries: #{e.message}")
217247
return OpenTelemetry::SDK::Trace::Export.failure(error: e, message: "export failed due to Zlib::DataError after #{retry_count} retries: #{e.message}")
218248
rescue StandardError => e
249+
OpenTelemetry.logger.debug("OTLP::HTTP::TraceExporter#send_bytes: Caught unexpected #{e.class}: #{e.message}")
219250
OpenTelemetry.handle_error(exception: e, message: 'unexpected error in OTLP::Exporter#send_bytes')
220251
@metrics_reporter.add_to_counter('otel.otlp_exporter.failure', labels: { 'reason' => e.class.to_s })
221252
return OpenTelemetry::SDK::Trace::Export.failure(error: e, message: 'unexpected error in OTLP::Exporter#send_bytes')
222253
end
223254
ensure
224255
# Reset timeouts to defaults for the next call.
256+
OpenTelemetry.logger.debug("OTLP::HTTP::TraceExporter#send_bytes: Resetting timeouts to default #{@timeout}s")
225257
@http.open_timeout = @timeout
226258
@http.read_timeout = @timeout
227259
@http.write_timeout = @timeout

0 commit comments

Comments
 (0)