GoogleCloudPlatform / opentelemetry-operations-python

OpenTelemetry Python exporters for Google Cloud Monitoring and Trace
https://google-cloud-opentelemetry.readthedocs.io/en/stable/
Apache License 2.0
63 stars 45 forks source link

Unsupported metric data type ExponentialHistogram in opentelemetry-exporter-gcp-monitoring #357

Open matthieu-dujany-technis opened 1 week ago

matthieu-dujany-technis commented 1 week ago

Hello,

I am having issues exporting an opentelemetry histogram to Google Cloud with exponential bucketing.

I get the error "Unsupported metric data type ExponentialHistogram, ignoring it" which I believe comes from this code line 216.

I am using the following code:

from opentelemetry.exporter.cloud_monitoring import (
    CloudMonitoringMetricsExporter,
)
from opentelemetry.sdk.metrics import MeterProvider, Histogram
from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.metrics.view import View
import random
import time
from opentelemetry.sdk.metrics._internal.aggregation import (
    ExponentialBucketHistogramAggregation,
)

project_id = "my_project_id"

meter_provider = MeterProvider(
    metric_readers=[
        PeriodicExportingMetricReader(
            CloudMonitoringMetricsExporter(
                project_id=project_id,
            ),
            export_interval_millis=30000,
        )
    ],
    resource=Resource.create(
        {
            "service.name": "test-matthieu-opentelemetry",
        }
    ),
    views=[
        View(
            instrument_type=Histogram,
            aggregation=ExponentialBucketHistogramAggregation(),
        )
    ],
)

meter = meter_provider.get_meter("test-meter")
request_duration_seconds = meter.create_histogram("test_histogram")

while True:
    value = random.random()
    request_duration_seconds.record(value)
    time.sleep(10)

with the following packages on Python 3.10.12: opentelemetry-api==1.27.0 opentelemetry-exporter-gcp-monitoring==1.7.0a0 opentelemetry-resourcedetector-gcp==1.7.0a0 opentelemetry-sdk==1.27.0

If I remove the view part with the ExponentialBucketHistogramAggregation, the export then runs successfully but with the default explicit histogram bucketing boundaries defined here. I would like to be able to run it with the ExponentialBucketHistogramAggregation.

I have seen that is possible to do it in opentelemetry-operations-js with this example in the README.

Is there something that I am missing ? Or are exponential buckets not supported in opentelemetry-operations-python (as the error seems to indicate) ?

Thanks for the help,

aabmass commented 2 hours ago

Is there something that I am missing ? Or are exponential buckets not supported in opentelemetry-operations-python (as the error seems to indicate) ?

That's correct, its just not implemented yet. It should be pretty straightforward to add though, the logic can be copied from the Go or JS exporters where it is already implemented.

I'm going to mark this as up for grabs as I can't get to it right now. If you or anyone else wants to take a shot, let me know and I can assign it to you 🙂