From 36533d228f088dad6e72dd2f41ea86b2897f8120 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Sun, 27 Jul 2025 13:49:09 +0200 Subject: [PATCH 1/2] [CONFIGURATION] File configuration - prometheus exporter builder --- .../exporters/prometheus/exporter_options.h | 4 ++ .../prometheus/prometheus_pull_builder.h | 36 ++++++++++++++ exporters/prometheus/src/exporter_options.cc | 2 + .../prometheus/src/prometheus_pull_builder.cc | 49 +++++++++++++++++++ 4 files changed, 91 insertions(+) create mode 100644 exporters/prometheus/include/opentelemetry/exporters/prometheus/prometheus_pull_builder.h create mode 100644 exporters/prometheus/src/prometheus_pull_builder.cc diff --git a/exporters/prometheus/include/opentelemetry/exporters/prometheus/exporter_options.h b/exporters/prometheus/include/opentelemetry/exporters/prometheus/exporter_options.h index da9d124029..9d41d268e8 100644 --- a/exporters/prometheus/include/opentelemetry/exporters/prometheus/exporter_options.h +++ b/exporters/prometheus/include/opentelemetry/exporters/prometheus/exporter_options.h @@ -18,8 +18,12 @@ namespace metrics */ struct PrometheusExporterOptions { + // Lookup environment variables PrometheusExporterOptions(); + // No defaults + PrometheusExporterOptions(void *); + // The endpoint the Prometheus backend can collect metrics from std::string url; diff --git a/exporters/prometheus/include/opentelemetry/exporters/prometheus/prometheus_pull_builder.h b/exporters/prometheus/include/opentelemetry/exporters/prometheus/prometheus_pull_builder.h new file mode 100644 index 0000000000..6a96e5e55f --- /dev/null +++ b/exporters/prometheus/include/opentelemetry/exporters/prometheus/prometheus_pull_builder.h @@ -0,0 +1,36 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_builder.h" +#include "opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/registry.h" +#include "opentelemetry/sdk/metrics/metric_reader.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace exporter +{ +namespace metrics +{ + +class OPENTELEMETRY_EXPORT PrometheusPullBuilder + : public opentelemetry::sdk::configuration::PrometheusPullMetricExporterBuilder +{ +public: + static void Register(opentelemetry::sdk::configuration::Registry *registry); + + PrometheusPullBuilder() = default; + ~PrometheusPullBuilder() override = default; + + std::unique_ptr Build( + const opentelemetry::sdk::configuration::PrometheusPullMetricExporterConfiguration *model) + const override; +}; + +} // namespace metrics +} // namespace exporter +OPENTELEMETRY_END_NAMESPACE diff --git a/exporters/prometheus/src/exporter_options.cc b/exporters/prometheus/src/exporter_options.cc index 2ac24b635d..122baf5198 100644 --- a/exporters/prometheus/src/exporter_options.cc +++ b/exporters/prometheus/src/exporter_options.cc @@ -77,6 +77,8 @@ PrometheusExporterOptions::PrometheusExporterOptions() without_type_suffix(GetPrometheusWithoutTypeSuffix()) {} +PrometheusExporterOptions::PrometheusExporterOptions(void *) : url("") {} + } // namespace metrics } // namespace exporter OPENTELEMETRY_END_NAMESPACE diff --git a/exporters/prometheus/src/prometheus_pull_builder.cc b/exporters/prometheus/src/prometheus_pull_builder.cc new file mode 100644 index 0000000000..18cf814051 --- /dev/null +++ b/exporters/prometheus/src/prometheus_pull_builder.cc @@ -0,0 +1,49 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include +#include +#include + +#include "opentelemetry/exporters/prometheus/exporter_factory.h" +#include "opentelemetry/exporters/prometheus/exporter_options.h" +#include "opentelemetry/exporters/prometheus/prometheus_pull_builder.h" +#include "opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_builder.h" +#include "opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h" +#include "opentelemetry/sdk/configuration/registry.h" +#include "opentelemetry/sdk/metrics/metric_reader.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace exporter +{ +namespace metrics +{ + +void PrometheusPullBuilder::Register(opentelemetry::sdk::configuration::Registry *registry) +{ + auto builder = std::make_unique(); + registry->SetPrometheusPullMetricExporterBuilder(std::move(builder)); +} + +std::unique_ptr PrometheusPullBuilder::Build( + const opentelemetry::sdk::configuration::PrometheusPullMetricExporterConfiguration *model) const +{ + opentelemetry::exporter::metrics::PrometheusExporterOptions options(nullptr); + + std::string url(model->host); + url.append(":"); + url.append(std::to_string(model->port)); + + options.url = url; + options.populate_target_info = true; + options.without_otel_scope = model->without_scope_info; + options.without_units = model->without_units; + options.without_type_suffix = model->without_type_suffix; + + return PrometheusExporterFactory::Create(options); +} + +} // namespace metrics +} // namespace exporter +OPENTELEMETRY_END_NAMESPACE From 8dc2b28b962eaf94c77ee266c1a4a560484c3dd1 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Mon, 28 Jul 2025 00:32:10 +0200 Subject: [PATCH 2/2] Refresh code from PR #2518, to fix review comments. --- .../exporters/prometheus/prometheus_pull_builder.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/exporters/prometheus/include/opentelemetry/exporters/prometheus/prometheus_pull_builder.h b/exporters/prometheus/include/opentelemetry/exporters/prometheus/prometheus_pull_builder.h index 6a96e5e55f..621643b08f 100644 --- a/exporters/prometheus/include/opentelemetry/exporters/prometheus/prometheus_pull_builder.h +++ b/exporters/prometheus/include/opentelemetry/exporters/prometheus/prometheus_pull_builder.h @@ -23,9 +23,6 @@ class OPENTELEMETRY_EXPORT PrometheusPullBuilder public: static void Register(opentelemetry::sdk::configuration::Registry *registry); - PrometheusPullBuilder() = default; - ~PrometheusPullBuilder() override = default; - std::unique_ptr Build( const opentelemetry::sdk::configuration::PrometheusPullMetricExporterConfiguration *model) const override;