Skip to content

Cannot export Histogram Metrics with OTLP #1864

@michael-cybrid

Description

@michael-cybrid

Description of the bug

OTLP metrics are broken for histograms.

Git commit 9c80c406d36afc730bb49240c8750bfeaa8a1078 added line return if metrics.data_points.empty? to def histogram_data_point(metrics) in exporter/otlp-metrics/lib/opentelemetry/exporter/otlp/metrics/metrics_exporter.rb.

This breaks the def encode(metrics_data) method in the same class, as metrics.map { |sd| as_otlp_metrics(sd) } results in an array containing nil when there are no datapoints.

We see the log line:

OpenTelemetry error: unexpected error in OTLP::MetricsExporter#encode - nil message not allowed here. - /Users/michael/.gem/ruby/3.3.8/gems/opentelemetry-exporter-otlp-metrics-0.5.0/lib/opentelemetry/exporter/otlp/metrics/metrics_exporter.rb:199:in `initialize''

Share details about your runtime

Ruby Version 3.3.8 with the following gems:
* opentelemetry-api (1.5.0)
* opentelemetry-common (0.22.0)
* opentelemetry-exporter-otlp (0.30.0)
* opentelemetry-exporter-otlp-metrics (0.5.0)
* opentelemetry-instrumentation-action_mailer (0.4.0)
* opentelemetry-instrumentation-action_pack (0.12.3)
* opentelemetry-instrumentation-action_view (0.9.0)
* opentelemetry-instrumentation-active_job (0.8.0)
* opentelemetry-instrumentation-active_record (0.9.0)
* opentelemetry-instrumentation-active_storage (0.1.1)
* opentelemetry-instrumentation-active_support (0.8.0)
* opentelemetry-instrumentation-base (0.23.0)
* opentelemetry-instrumentation-concurrent_ruby (0.22.0)
* opentelemetry-instrumentation-grape (0.3.0)
* opentelemetry-instrumentation-rack (0.26.0)
* opentelemetry-instrumentation-rails (0.36.0)
* opentelemetry-metrics-api (0.3.0)
* opentelemetry-metrics-sdk (0.7.2)
* opentelemetry-registry (0.4.0)
* opentelemetry-sdk (1.8.0)
* opentelemetry-semantic_conventions (1.11.0)

Share a simplified reproduction if possible

ENV["OTEL_METRIC_EXPORT_INTERVAL"] = "1000"
exporter = OpenTelemetry::Exporter::OTLP::Metrics::MetricsExporter.new
resource = OpenTelemetry::SDK::Resources::Resource.default
meter_provider = OpenTelemetry::SDK::Metrics::MeterProvider.new(resource:)
metrics_reader = OpenTelemetry::SDK::Metrics::Export::PeriodicMetricReader.new(exporter:)
meter_provider.add_metric_reader(metrics_reader)
histogram = meter_provider.meter('application').create_histogram("test.histogram")
histogram.record(0.123, attributes: { "key" => "value" })

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    Status

    To do

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions