Skip to content

Commit 6bae4e1

Browse files
feat: add stats for serialization time in otlp exporter (#1628)
Co-authored-by: Francis Bogsanyi <[email protected]>
1 parent a446199 commit 6bae4e1

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

exporter/otlp/lib/opentelemetry/exporter/otlp/exporter.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,7 @@ def backoff?(retry_count:, reason:, retry_after: nil) # rubocop:disable Metrics/
271271
end
272272

273273
def encode(span_data) # rubocop:disable Metrics/MethodLength, Metrics/CyclomaticComplexity
274+
start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
274275
Opentelemetry::Proto::Collector::Trace::V1::ExportTraceServiceRequest.encode(
275276
Opentelemetry::Proto::Collector::Trace::V1::ExportTraceServiceRequest.new(
276277
resource_spans: span_data
@@ -298,6 +299,11 @@ def encode(span_data) # rubocop:disable Metrics/MethodLength, Metrics/Cyclomatic
298299
rescue StandardError => e
299300
OpenTelemetry.handle_error(exception: e, message: 'unexpected error in OTLP::Exporter#encode')
300301
nil
302+
ensure
303+
stop = Process.clock_gettime(Process::CLOCK_MONOTONIC)
304+
duration_ms = 1000.0 * (stop - start)
305+
@metrics_reporter.record_value('otel.otlp_exporter.encode_duration',
306+
value: duration_ms)
301307
end
302308

303309
def as_otlp_span(span_data) # rubocop:disable Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity

exporter/otlp/test/opentelemetry/exporter/otlp/exporter_test.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,17 @@
382382
_(result).must_equal(SUCCESS)
383383
end
384384

385+
it 'records metrics' do
386+
metrics_reporter = Minitest::Mock.new
387+
exporter = OpenTelemetry::Exporter::OTLP::Exporter.new(metrics_reporter: metrics_reporter)
388+
stub_request(:post, 'http://localhost:4318/v1/traces').to_timeout.then.to_return(status: 200)
389+
metrics_reporter.expect(:record_value, nil) { |m, _, _| m == 'otel.otlp_exporter.encode_duration' }
390+
metrics_reporter.expect(:record_value, nil) { |m, _, _| m == 'otel.otlp_exporter.message.uncompressed_size' }
391+
metrics_reporter.expect(:record_value, nil) { |m, _, _| m == 'otel.otlp_exporter.message.compressed_size' }
392+
metrics_reporter.expect(:add_to_counter, nil) { |m, _, _| m == 'otel.otlp_exporter.failure' }
393+
exporter.export([OpenTelemetry::TestHelpers.create_span_data])
394+
end
395+
385396
it 'retries on timeout' do
386397
stub_request(:post, 'http://localhost:4318/v1/traces').to_timeout.then.to_return(status: 200)
387398
span_data = OpenTelemetry::TestHelpers.create_span_data

0 commit comments

Comments
 (0)