diff --git a/exporter/otlp-metrics/lib/opentelemetry/exporter/otlp/metrics/metrics_exporter.rb b/exporter/otlp-metrics/lib/opentelemetry/exporter/otlp/metrics/metrics_exporter.rb index eacf0b3dc..9a7cb4a8d 100644 --- a/exporter/otlp-metrics/lib/opentelemetry/exporter/otlp/metrics/metrics_exporter.rb +++ b/exporter/otlp-metrics/lib/opentelemetry/exporter/otlp/metrics/metrics_exporter.rb @@ -82,10 +82,21 @@ def pull export(collect) end + def report_result(result_code, metrics) + if result_code == SUCCESS + OpenTelemetry.logger.debug('Successfully exported metrics') + else + OpenTelemetry.handle_error(exception: OpenTelemetry::SDK::Metrics::Export::ExportError.new('Unable to export metrics')) + OpenTelemetry.logger.error("Result code: #{result_code}") + end + end + # metrics Array[MetricData] def export(metrics, timeout: nil) @mutex.synchronize do - send_bytes(encode(metrics), timeout: timeout) + result = send_bytes(encode(metrics), timeout: timeout) + report_result(result, metrics) + result end end diff --git a/exporter/otlp-metrics/test/opentelemetry/exporter/otlp/metrics/metrics_exporter_test.rb b/exporter/otlp-metrics/test/opentelemetry/exporter/otlp/metrics/metrics_exporter_test.rb index 24f1eed06..f9984aa0f 100644 --- a/exporter/otlp-metrics/test/opentelemetry/exporter/otlp/metrics/metrics_exporter_test.rb +++ b/exporter/otlp-metrics/test/opentelemetry/exporter/otlp/metrics/metrics_exporter_test.rb @@ -437,6 +437,38 @@ _(result).must_equal(METRICS_SUCCESS) end + it 'logs successful export at debug level' do + log_stream = StringIO.new + logger = OpenTelemetry.logger + OpenTelemetry.logger = ::Logger.new(log_stream) + OpenTelemetry.logger.level = ::Logger::DEBUG + + stub_request(:post, 'http://localhost:4318/v1/metrics').to_return(status: 200) + + metrics_data = create_metrics_data + result = exporter.export([metrics_data]) + _(log_stream.string).must_match(/DEBUG -- : Successfully exported metrics/) + _(result).must_equal(METRICS_SUCCESS) + ensure + OpenTelemetry.logger = logger + end + + it 'logs failure to export at error level' do + log_stream = StringIO.new + logger = OpenTelemetry.logger + OpenTelemetry.logger = ::Logger.new(log_stream) + + stub_request(:post, 'http://localhost:4318/v1/metrics').to_return(status: 500) + + metrics_data = create_metrics_data + result = exporter.export([metrics_data]) + _(log_stream.string).must_match(/ERROR -- : OpenTelemetry error: Unable to export metrics/) + _(log_stream.string).must_match(/ERROR -- : Result code: 1/) + _(result).must_equal(METRICS_FAILURE) + ensure + OpenTelemetry.logger = logger + end + it 'handles encoding errors with poise and grace' do log_stream = StringIO.new logger = OpenTelemetry.logger