diff --git a/CHANGELOG.md b/CHANGELOG.md index a7788e32f2..49b11bdc3b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,9 @@ Increment the: ## [Unreleased] +* [EXPORTER] Remove explicit timestamps from metric points exported by Prometheus + [#3895](https://github.com/open-telemetry/opentelemetry-cpp/pull/3895) + * [TEST] Add multi-threaded metrics benchmarks for shared vs per-thread counter [#3865](https://github.com/open-telemetry/opentelemetry-cpp/pull/3865) diff --git a/exporters/prometheus/include/opentelemetry/exporters/prometheus/exporter_utils.h b/exporters/prometheus/include/opentelemetry/exporters/prometheus/exporter_utils.h index 496ec9bd34..5b80d1886e 100644 --- a/exporters/prometheus/include/opentelemetry/exporters/prometheus/exporter_utils.h +++ b/exporters/prometheus/include/opentelemetry/exporters/prometheus/exporter_utils.h @@ -153,7 +153,6 @@ class PrometheusExporterUtils * Add a target_info metric to collect resource attributes */ static void SetTarget(const sdk::metrics::ResourceMetrics &data, - std::chrono::nanoseconds time, const opentelemetry::sdk::instrumentationscope::InstrumentationScope *scope, std::vector<::prometheus::MetricFamily> *output); @@ -166,7 +165,6 @@ class PrometheusExporterUtils const opentelemetry::sdk::metrics::PointAttributes &labels, const opentelemetry::sdk::instrumentationscope::InstrumentationScope *scope, ::prometheus::MetricType type, - std::chrono::nanoseconds time, ::prometheus::MetricFamily *metric_family, const opentelemetry::sdk::resource::Resource *resource); @@ -180,7 +178,6 @@ class PrometheusExporterUtils const std::vector &counts, const opentelemetry::sdk::metrics::PointAttributes &labels, const opentelemetry::sdk::instrumentationscope::InstrumentationScope *scope, - std::chrono::nanoseconds time, ::prometheus::MetricFamily *metric_family, const opentelemetry::sdk::resource::Resource *resource); @@ -190,7 +187,6 @@ class PrometheusExporterUtils static void SetMetricBasic( ::prometheus::ClientMetric &metric, const opentelemetry::sdk::metrics::PointAttributes &labels, - std::chrono::nanoseconds time, const opentelemetry::sdk::instrumentationscope::InstrumentationScope *scope, const opentelemetry::sdk::resource::Resource *resource); diff --git a/exporters/prometheus/src/exporter_utils.cc b/exporters/prometheus/src/exporter_utils.cc index 7055e0d86c..97d7150aed 100644 --- a/exporters/prometheus/src/exporter_utils.cc +++ b/exporters/prometheus/src/exporter_utils.cc @@ -5,7 +5,6 @@ #include #include #include -#include #include #include #include @@ -19,7 +18,6 @@ #include #include -#include "opentelemetry/common/timestamp.h" #include "opentelemetry/exporters/prometheus/exporter_utils.h" #include "opentelemetry/nostd/variant.h" #include "opentelemetry/sdk/common/attribute_utils.h" @@ -138,9 +136,8 @@ std::vector PrometheusExporterUtils::TranslateT // Append target_info as the first metric if (populate_target_info && !data.scope_metric_data_.empty()) { - SetTarget(data, - data.scope_metric_data_.begin()->metric_data_.begin()->end_ts.time_since_epoch(), - without_otel_scope ? nullptr : (*data.scope_metric_data_.begin()).scope_, &output); + SetTarget(data, without_otel_scope ? nullptr : (*data.scope_metric_data_.begin()).scope_, + &output); } for (const auto &instrumentation_info : data.scope_metric_data_) @@ -151,7 +148,6 @@ std::vector PrometheusExporterUtils::TranslateT auto unit = metric_data.instrument_descriptor.unit_; prometheus_client::MetricFamily metric_family; metric_family.help = metric_data.instrument_descriptor.description_; - auto time = metric_data.end_ts.time_since_epoch(); auto front = metric_data.point_data_attr_.front(); auto kind = getAggregationType(front.point_data); bool is_monotonic = true; @@ -185,7 +181,7 @@ std::vector PrometheusExporterUtils::TranslateT sum = static_cast(nostd::get(histogram_point_data.sum_)); } SetData(std::vector{sum, static_cast(histogram_point_data.count_)}, - boundaries, counts, point_data_attr.attributes, scope, time, &metric_family, + boundaries, counts, point_data_attr.attributes, scope, &metric_family, data.resource_); } else if (type == prometheus_client::MetricType::Gauge) @@ -196,7 +192,7 @@ std::vector PrometheusExporterUtils::TranslateT auto last_value_point_data = nostd::get(point_data_attr.point_data); std::vector values{last_value_point_data.value_}; - SetData(values, point_data_attr.attributes, scope, type, time, &metric_family, + SetData(values, point_data_attr.attributes, scope, type, &metric_family, data.resource_); } else if (nostd::holds_alternative(point_data_attr.point_data)) @@ -204,7 +200,7 @@ std::vector PrometheusExporterUtils::TranslateT auto sum_point_data = nostd::get(point_data_attr.point_data); std::vector values{sum_point_data.value_}; - SetData(values, point_data_attr.attributes, scope, type, time, &metric_family, + SetData(values, point_data_attr.attributes, scope, type, &metric_family, data.resource_); } else @@ -221,7 +217,7 @@ std::vector PrometheusExporterUtils::TranslateT auto sum_point_data = nostd::get(point_data_attr.point_data); std::vector values{sum_point_data.value_}; - SetData(values, point_data_attr.attributes, scope, type, time, &metric_family, + SetData(values, point_data_attr.attributes, scope, type, &metric_family, data.resource_); } else @@ -605,7 +601,6 @@ prometheus_client::MetricType PrometheusExporterUtils::TranslateType( void PrometheusExporterUtils::SetTarget( const sdk::metrics::ResourceMetrics &data, - std::chrono::nanoseconds time, const opentelemetry::sdk::instrumentationscope::InstrumentationScope *scope, std::vector<::prometheus::MetricFamily> *output) { @@ -624,7 +619,7 @@ void PrometheusExporterUtils::SetTarget( metric.info.value = 1.0; metric_sdk::PointAttributes empty_attributes; - SetMetricBasic(metric, empty_attributes, time, scope, data.resource_); + SetMetricBasic(metric, empty_attributes, scope, data.resource_); for (auto &label : data.resource_->GetAttributes()) { @@ -645,13 +640,12 @@ void PrometheusExporterUtils::SetData( const metric_sdk::PointAttributes &labels, const opentelemetry::sdk::instrumentationscope::InstrumentationScope *scope, prometheus_client::MetricType type, - std::chrono::nanoseconds time, prometheus_client::MetricFamily *metric_family, const opentelemetry::sdk::resource::Resource *resource) { metric_family->metric.emplace_back(); prometheus_client::ClientMetric &metric = metric_family->metric.back(); - SetMetricBasic(metric, labels, time, scope, resource); + SetMetricBasic(metric, labels, scope, resource); SetValue(values, type, &metric); } @@ -666,13 +660,12 @@ void PrometheusExporterUtils::SetData( const std::vector &counts, const metric_sdk::PointAttributes &labels, const opentelemetry::sdk::instrumentationscope::InstrumentationScope *scope, - std::chrono::nanoseconds time, prometheus_client::MetricFamily *metric_family, const opentelemetry::sdk::resource::Resource *resource) { metric_family->metric.emplace_back(); prometheus_client::ClientMetric &metric = metric_family->metric.back(); - SetMetricBasic(metric, labels, time, scope, resource); + SetMetricBasic(metric, labels, scope, resource); SetValue(values, boundaries, counts, &metric); } @@ -682,11 +675,9 @@ void PrometheusExporterUtils::SetData( void PrometheusExporterUtils::SetMetricBasic( prometheus_client::ClientMetric &metric, const metric_sdk::PointAttributes &labels, - std::chrono::nanoseconds time, const opentelemetry::sdk::instrumentationscope::InstrumentationScope *scope, const opentelemetry::sdk::resource::Resource *resource) { - metric.timestamp_ms = time.count() / 1000000; if (labels.empty() && nullptr == resource) { return; diff --git a/exporters/prometheus/test/prometheus_test_helper.h b/exporters/prometheus/test/prometheus_test_helper.h index 1bf1f17657..852bd6a405 100644 --- a/exporters/prometheus/test/prometheus_test_helper.h +++ b/exporters/prometheus/test/prometheus_test_helper.h @@ -23,6 +23,10 @@ struct TestDataPoints Resource resource = Resource::Create(ResourceAttributes{}); nostd::unique_ptr instrumentation_scope = InstrumentationScope::Create("library_name", "1.2.0"); + opentelemetry::common::SystemTimestamp start_ts = + opentelemetry::common::SystemTimestamp{std::chrono::microseconds{1766662500000}}; + opentelemetry::common::SystemTimestamp end_ts = + opentelemetry::common::SystemTimestamp{std::chrono::microseconds{1766662560000}}; /** * Helper function to create ResourceMetrics @@ -39,8 +43,7 @@ struct TestDataPoints metric_sdk::InstrumentDescriptor{"library_name", "description", "unit", metric_sdk::InstrumentType::kCounter, metric_sdk::InstrumentValueType::kDouble}, - metric_sdk::AggregationTemporality::kDelta, opentelemetry::common::SystemTimestamp{}, - opentelemetry::common::SystemTimestamp{}, + metric_sdk::AggregationTemporality::kDelta, start_ts, end_ts, std::vector{ {metric_sdk::PointAttributes{{"a1", "b1"}}, sum_point_data}, {metric_sdk::PointAttributes{{"a2", "b2"}}, sum_point_data2}}}; @@ -67,13 +70,13 @@ struct TestDataPoints metric_sdk::InstrumentDescriptor{"library_name", "description", "unit", metric_sdk::InstrumentType::kHistogram, metric_sdk::InstrumentValueType::kDouble}, - metric_sdk::AggregationTemporality::kDelta, opentelemetry::common::SystemTimestamp{}, - opentelemetry::common::SystemTimestamp{}, + metric_sdk::AggregationTemporality::kDelta, start_ts, end_ts, std::vector{ {metric_sdk::PointAttributes{{"a1", "b1"}}, histogram_point_data}, {metric_sdk::PointAttributes{{"a2", "b2"}}, histogram_point_data2}}}; data.scope_metric_data_ = std::vector{ {instrumentation_scope.get(), std::vector{metric_data}}}; + return data; } @@ -93,8 +96,7 @@ struct TestDataPoints metric_sdk::InstrumentDescriptor{"library_name", "description", "unit", metric_sdk::InstrumentType::kCounter, metric_sdk::InstrumentValueType::kDouble}, - metric_sdk::AggregationTemporality::kDelta, opentelemetry::common::SystemTimestamp{}, - opentelemetry::common::SystemTimestamp{}, + metric_sdk::AggregationTemporality::kDelta, start_ts, end_ts, std::vector{ {metric_sdk::PointAttributes{{"a1", "b1"}}, last_value_point_data}, {metric_sdk::PointAttributes{{"a2", "b2"}}, last_value_point_data2}}}; @@ -113,8 +115,7 @@ struct TestDataPoints metric_sdk::InstrumentDescriptor{"library_name", "description", "unit", metric_sdk::InstrumentType::kCounter, metric_sdk::InstrumentValueType::kDouble}, - metric_sdk::AggregationTemporality::kDelta, opentelemetry::common::SystemTimestamp{}, - opentelemetry::common::SystemTimestamp{}, + metric_sdk::AggregationTemporality::kDelta, start_ts, end_ts, std::vector{ {metric_sdk::PointAttributes{{"a1", "b1"}}, drop_point_data}, {metric_sdk::PointAttributes{{"a2", "b2"}}, drop_point_data2}}};