opentelemetry-cpp icon indicating copy to clipboard operation
opentelemetry-cpp copied to clipboard

Custom bucket for instrument histogram not working

Open NingWang-1993 opened this issue 4 months ago • 5 comments

By refer to example code metrics_ostream.cc(https://github.com/open-telemetry/opentelemetry-cpp/blob/v1.11.0/examples/metrics_simple/metrics_ostream.cc) and foo_library.cc(https://github.com/open-telemetry/opentelemetry-cpp/blob/v1.11.0/examples/common/metrics_foo_library/foo_library.cc), my code just merge the two files into one file such as below(all the below code are copy and paste from above two files)

otel.cpp (warp by myself)

#include <memory>
#include <thread>

#include "opentelemetry/exporters/ostream/metric_exporter_factory.h"
#include "opentelemetry/metrics/provider.h"
#include "opentelemetry/sdk/metrics/aggregation/default_aggregation.h"
#include "opentelemetry/sdk/metrics/aggregation/histogram_aggregation.h"
#include "opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader_factory.h"
#include "opentelemetry/sdk/metrics/meter.h"
#include "opentelemetry/sdk/metrics/meter_provider.h"
#include "opentelemetry/sdk/metrics/meter_provider_factory.h"
#include "opentelemetry/sdk/metrics/push_metric_exporter.h"
#include "opentelemetry/sdk/metrics/view/instrument_selector_factory.h"
#include "opentelemetry/sdk/metrics/view/meter_selector_factory.h"
#include "opentelemetry/sdk/metrics/view/view_factory.h"
#include "opentelemetry/context/context.h"
#include "opentelemetry/nostd/shared_ptr.h"

namespace nostd = opentelemetry::nostd;
namespace metrics_sdk = opentelemetry::sdk::metrics;
namespace common = opentelemetry::common;

namespace metrics_api = opentelemetry::metrics;
namespace exportermetrics = opentelemetry::exporter::metrics;

namespace
{

    std::map<std::string, std::string> get_random_attr()
    {
        const std::vector<std::pair<std::string, std::string> > labels = {{"key1", "value1"},
                                                                          {"key2", "value2"},
                                                                          {"key3", "value3"},
                                                                          {"key4", "value4"},
                                                                          {"key5", "value5"}};
        return std::map<std::string, std::string>{labels[rand() % (labels.size() - 1)],
                                                  labels[rand() % (labels.size() - 1)]};
    }

    void InitMetrics(const std::string &name)
    {

        auto exporter = exportermetrics::OStreamMetricExporterFactory::Create();

        std::string version{"1.2.0"};
        std::string schema{"https://opentelemetry.io/schemas/1.2.0"};

        // Initialize and set the global MeterProvider
        metrics_sdk::PeriodicExportingMetricReaderOptions options;
        options.export_interval_millis = std::chrono::milliseconds(1000);
        options.export_timeout_millis = std::chrono::milliseconds(500);

        auto reader = metrics_sdk::PeriodicExportingMetricReaderFactory::Create(std::move(exporter), options);

        auto u_provider = metrics_sdk::MeterProviderFactory::Create();
        auto *p = static_cast<metrics_sdk::MeterProvider *>(u_provider.get());

        p->AddMetricReader(std::move(reader));

        /*metrics_exporter::PrometheusExporterOptions opts;
        if (!addr.empty())
        {
            opts.url = addr;
        }
        */
        // std::puts("PrometheusExporter example program running ...");

        // auto prometheus_exporter = metrics_exporter::PrometheusExporterFactory::Create(opts);
        //  auto exporter = exportermetrics::OStreamMetricExporterFactory::Create();

        // std::string version{"1.2.0"};
        // std::string schema{"https://opentelemetry.io/schemas/1.2.0"};

        // Initialize and set the global MeterProvider
        // metrics_sdk::PeriodicExportingMetricReaderOptions options;
        // options.export_interval_millis = std::chrono::milliseconds(1000);
        // options.export_timeout_millis = std::chrono::milliseconds(500);

        // auto reader =
        //    metrics_sdk::PeriodicExportingMetricReaderFactory::Create(std::move(exporter), options);

        // auto u_provider = metrics_sdk::MeterProviderFactory::Create();
        // auto *p = static_cast<metrics_sdk::MeterProvider *>(u_provider.get());

        // p->AddMetricReader(std::move(prometheus_exporter));

        // histogram view
        std::string histogram_name = name + "_histogram";
        std::string unit = "histogram-unit";

        auto histogram_instrument_selector = metrics_sdk::InstrumentSelectorFactory::Create(
            metrics_sdk::InstrumentType::kHistogram, histogram_name, unit);

        auto histogram_meter_selector = metrics_sdk::MeterSelectorFactory::Create(name, version, schema);

        auto histogram_aggregation_config = std::unique_ptr<metrics_sdk::HistogramAggregationConfig>(
            new metrics_sdk::HistogramAggregationConfig);

        histogram_aggregation_config->boundaries_ = std::vector<double>{
      0.0, 50.0, 100.0, 250.0, 500.0, 750.0, 1000.0, 2500.0, 5000.0, 10000.0, 20000.0};

        std::shared_ptr<metrics_sdk::AggregationConfig> aggregation_config(
            std::move(histogram_aggregation_config));

        auto histogram_view = metrics_sdk::ViewFactory::Create(
            name, "description", unit, metrics_sdk::AggregationType::kHistogram, aggregation_config);

        p->AddView(std::move(histogram_instrument_selector), std::move(histogram_meter_selector),
                   std::move(histogram_view));

        std::shared_ptr<opentelemetry::metrics::MeterProvider> provider(std::move(u_provider));
        metrics_api::Provider::SetMeterProvider(provider);
    }

    void CleanupMetrics()
    {
        std::shared_ptr<metrics_api::MeterProvider> none;
        metrics_api::Provider::SetMeterProvider(none);
    }
} // namespace

void histogram_example(const std::string &name)
{
    std::string histogram_name = name + "_histogram";
    auto provider = metrics_api::Provider::GetMeterProvider();
    nostd::shared_ptr<metrics_api::Meter> meter = provider->GetMeter(name, "1.2.0");
    auto histogram_counter = meter->CreateDoubleHistogram(histogram_name, "des", "histogram-unit");
    auto context = opentelemetry::context::Context{};
    for (uint32_t i = 0; i < 20; ++i)
    {
        double val = (rand() % 700) + 1.1;
        std::map<std::string, std::string> labels = get_random_attr();
        auto labelkv = opentelemetry::common::KeyValueIterableView<decltype(labels)>{labels};
        std::cout << "histogram val is " << val << std::endl;
        histogram_counter->Record(val, labelkv, context);
        std::this_thread::sleep_for(std::chrono::milliseconds(250));
    }
}

int main(int argc, char **argv)
{
    std::string name{"ostream_metric_example"};
    InitMetrics(name);
    histogram_example(name);
    CleanupMetrics();
    return 0;
}

The program output on my local box such as:

[Error] File: /home/developer/opentelemetry-cpp-git/sdk/include/opentelemetry/sdk/metrics/view/predicate.h:38 PatternPredicate::Match - failed. std::regex not fully supported for this compiler. histogram val is 184.1 histogram val is 216.1 histogram val is 487.1 histogram val is 522.1 { scope name : ostream_metric_example schema url : version : 1.2.0 start time : Tue Aug 26 03:02:59 2025 end time : Tue Aug 26 03:03:00 2025 instrument name : ostream_metric_example_histogram description : des unit : histogram-unit type : HistogramPointData count : 1 sum : 216.1 min : 216.1 max : 216.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, ] attributes : key2: value2 key4: value4 type : HistogramPointData count : 1 sum : 487.1 min : 487.1 max : 487.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, ] attributes : key1: value1 key2: value2 type : HistogramPointData count : 1 sum : 184.1 min : 184.1 max : 184.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, ] attributes : key2: value2 key3: value3 type : HistogramPointData count : 1 sum : 522.1 min : 522.1 max : 522.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, ] attributes : key3: value3 key4: value4 resources : service.name: unknown_service telemetry.sdk.language: cpp telemetry.sdk.name: opentelemetry telemetry.sdk.version: 1.11.0 } histogram val is 91.1 histogram val is 127.1 histogram val is 73.1 histogram val is 169.1 { scope name : ostream_metric_example schema url : version : 1.2.0 start time : Tue Aug 26 03:02:59 2025 end time : Tue Aug 26 03:03:01 2025 instrument name : ostream_metric_example_histogram description : des unit : histogram-unit type : HistogramPointData count : 1 sum : 487.1 min : 487.1 max : 487.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, ] attributes : key1: value1 key2: value2 type : HistogramPointData count : 1 sum : 522.1 min : 522.1 max : 522.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, ] attributes : key3: value3 key4: value4 type : HistogramPointData count : 1 sum : 184.1 min : 184.1 max : 184.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, ] attributes : key2: value2 key3: value3 type : HistogramPointData count : 1 sum : 91.1 min : 91.1 max : 91.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, ] attributes : key4: value4 type : HistogramPointData count : 1 sum : 127.1 min : 127.1 max : 127.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, ] attributes : key1: value1 key3: value3 type : HistogramPointData count : 1 sum : 73.1 min : 73.1 max : 73.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ] attributes : key1: value1 key4: value4 type : HistogramPointData count : 2 sum : 385.2 min : 169.1 max : 216.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, ] attributes : key2: value2 key4: value4 resources : service.name: unknown_service telemetry.sdk.language: cpp telemetry.sdk.name: opentelemetry telemetry.sdk.version: 1.11.0 } histogram val is 283.1 histogram val is 224.1 histogram val is 230.1 histogram val is 559.1 { scope name : ostream_metric_example schema url : version : 1.2.0 start time : Tue Aug 26 03:02:59 2025 end time : Tue Aug 26 03:03:02 2025 instrument name : ostream_metric_example_histogram description : des unit : histogram-unit type : HistogramPointData count : 1 sum : 73.1 min : 73.1 max : 73.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ] attributes : key1: value1 key4: value4 type : HistogramPointData count : 1 sum : 127.1 min : 127.1 max : 127.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, ] attributes : key1: value1 key3: value3 type : HistogramPointData count : 1 sum : 487.1 min : 487.1 max : 487.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, ] attributes : key1: value1 key2: value2 type : HistogramPointData count : 1 sum : 184.1 min : 184.1 max : 184.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, ] attributes : key2: value2 key3: value3 type : HistogramPointData count : 1 sum : 522.1 min : 522.1 max : 522.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, ] attributes : key3: value3 key4: value4 type : HistogramPointData count : 2 sum : 315.2 min : 91.1 max : 224.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, ] attributes : key4: value4 type : HistogramPointData count : 2 sum : 513.2 min : 230.1 max : 283.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, ] attributes : key3: value3 type : HistogramPointData count : 3 sum : 944.3 min : 169.1 max : 559.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, ] attributes : key2: value2 key4: value4 resources : service.name: unknown_service telemetry.sdk.language: cpp telemetry.sdk.name: opentelemetry telemetry.sdk.version: 1.11.0 } histogram val is 394.1 histogram val is 143.1 histogram val is 622.1 histogram val is 438.1 { scope name : ostream_metric_example schema url : version : 1.2.0 start time : Tue Aug 26 03:02:59 2025 end time : Tue Aug 26 03:03:03 2025 instrument name : ostream_metric_example_histogram description : des unit : histogram-unit type : HistogramPointData count : 3 sum : 944.3 min : 169.1 max : 559.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, ] attributes : key2: value2 key4: value4 type : HistogramPointData count : 2 sum : 513.2 min : 230.1 max : 283.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, ] attributes : key3: value3 type : HistogramPointData count : 2 sum : 315.2 min : 91.1 max : 224.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, ] attributes : key4: value4 type : HistogramPointData count : 1 sum : 522.1 min : 522.1 max : 522.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, ] attributes : key3: value3 key4: value4 type : HistogramPointData count : 1 sum : 184.1 min : 184.1 max : 184.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, ] attributes : key2: value2 key3: value3 type : HistogramPointData count : 1 sum : 487.1 min : 487.1 max : 487.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, ] attributes : key1: value1 key2: value2 type : HistogramPointData count : 2 sum : 565.2 min : 127.1 max : 438.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, ] attributes : key1: value1 key3: value3 type : HistogramPointData count : 1 sum : 143.1 min : 143.1 max : 143.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, ] attributes : key2: value2 type : HistogramPointData count : 3 sum : 1089.3 min : 73.1 max : 622.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, ] attributes : key1: value1 key4: value4 resources : service.name: unknown_service telemetry.sdk.language: cpp telemetry.sdk.name: opentelemetry telemetry.sdk.version: 1.11.0 } histogram val is 416.1 histogram val is 27.1 histogram val is 457.1 histogram val is 271.1 { scope name : ostream_metric_example schema url : version : 1.2.0 start time : Tue Aug 26 03:02:59 2025 end time : Tue Aug 26 03:03:04 2025 instrument name : ostream_metric_example_histogram description : des unit : histogram-unit type : HistogramPointData count : 1 sum : 143.1 min : 143.1 max : 143.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, ] attributes : key2: value2 type : HistogramPointData count : 2 sum : 565.2 min : 127.1 max : 438.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, ] attributes : key1: value1 key3: value3 type : HistogramPointData count : 2 sum : 513.2 min : 230.1 max : 283.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, ] attributes : key3: value3 type : HistogramPointData count : 3 sum : 944.3 min : 169.1 max : 559.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, ] attributes : key2: value2 key4: value4 type : HistogramPointData count : 4 sum : 1116.4 min : 27.1 max : 622.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, ] attributes : key1: value1 key4: value4 type : HistogramPointData count : 1 sum : 522.1 min : 522.1 max : 522.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, ] attributes : key3: value3 key4: value4 type : HistogramPointData count : 2 sum : 315.2 min : 91.1 max : 224.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, ] attributes : key4: value4 type : HistogramPointData count : 3 sum : 1057.3 min : 184.1 max : 457.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, ] attributes : key2: value2 key3: value3 type : HistogramPointData count : 2 sum : 758.2 min : 271.1 max : 487.1 buckets : [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] counts : [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, ] attributes : key1: value1 key2: value2 resources : service.name: unknown_service telemetry.sdk.language: cpp telemetry.sdk.name: opentelemetry telemetry.sdk.version: 1.11.0 }

The buckets is the default explicit aggregation buckets [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, ] instead of the custom bucket { 0.0, 50.0, 100.0, 250.0, 500.0, 750.0, 1000.0, 2500.0, 5000.0, 10000.0, 20000.0}, counter also is caculated based on the default explicit aggregation buckets instead of the custom bucket{ 0.0, 50.0, 100.0, 250.0, 500.0, 750.0, 1000.0, 2500.0, 5000.0, 10000.0, 20000.0};

As for our project, we need use custom buckets for histogram instrument type. Above otel.cpp is for testing purpose.

Could you help me on why the example code from opentelmetry-cpp v1.11.0 not working for custom buckets of histogram?

NingWang-1993 avatar Aug 26 '25 04:08 NingWang-1993

See if the unit-test helps, as it does validate the custom buckets - https://github.com/open-telemetry/opentelemetry-cpp/blob/dfa7118d1a6596c7586666b92ce0eae6117e273f/sdk/test/metrics/histogram_test.cc#L91

lalitb avatar Aug 26 '25 04:08 lalitb

Thanks @lalitb

have run above histogram_test.cc on my local box, it is not able to run DoubleCustomBuckets as my gcc version is 4.9.3.

In this case, OPENTELEMETRY_HAVE_WORKING_REGEX is equal to 0, so won't run DoubleCustomBuckets.

#if OPENTELEMETRY_HAVE_WORKING_REGEX
TEST(Histogram, DoubleCustomBuckets)

my understanding is that in this case(gcc version 4.9.3) and opentelmetry-cpp(v1.11.0), we can't use custom buckets.

Please let me know if my understanding is correct or not.

juanxiuxu avatar Aug 26 '25 14:08 juanxiuxu

my understanding is that in this case(gcc version 4.9.3) and opentelmetry-cpp(v1.11.0), we can't use custom buckets.

Your understanding is correct. Not sure if we need to provide fix for the gcc version with partial support for regex. Something to discuss in the community meeting.

lalitb avatar Sep 02 '25 17:09 lalitb

To investigate, long turn support for platform / compiler not supporting REGEX.

marcalff avatar Sep 08 '25 20:09 marcalff

This issue was marked as stale due to lack of activity.

github-actions[bot] avatar Nov 08 '25 02:11 github-actions[bot]