Skip to content

Commit 82d28e4

Browse files
committed
fix(prometheus): Remove explicit timestamps from metric points
1 parent f200b2b commit 82d28e4

4 files changed

Lines changed: 12 additions & 20 deletions

File tree

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ Increment the:
1515

1616
## [Unreleased]
1717

18+
* [EXPORTER] Remove explicit timestamps from metric points exported by Prometheus
19+
[#3895](https://github.com/open-telemetry/opentelemetry-cpp/pull/3895)
20+
1821
* [TEST] Add multi-threaded metrics benchmarks for shared vs per-thread counter
1922
[#3865](https://github.com/open-telemetry/opentelemetry-cpp/pull/3865)
2023

exporters/prometheus/include/opentelemetry/exporters/prometheus/exporter_utils.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,6 @@ class PrometheusExporterUtils
153153
* Add a target_info metric to collect resource attributes
154154
*/
155155
static void SetTarget(const sdk::metrics::ResourceMetrics &data,
156-
std::chrono::nanoseconds time,
157156
const opentelemetry::sdk::instrumentationscope::InstrumentationScope *scope,
158157
std::vector<::prometheus::MetricFamily> *output);
159158

@@ -166,7 +165,6 @@ class PrometheusExporterUtils
166165
const opentelemetry::sdk::metrics::PointAttributes &labels,
167166
const opentelemetry::sdk::instrumentationscope::InstrumentationScope *scope,
168167
::prometheus::MetricType type,
169-
std::chrono::nanoseconds time,
170168
::prometheus::MetricFamily *metric_family,
171169
const opentelemetry::sdk::resource::Resource *resource);
172170

@@ -180,7 +178,6 @@ class PrometheusExporterUtils
180178
const std::vector<uint64_t> &counts,
181179
const opentelemetry::sdk::metrics::PointAttributes &labels,
182180
const opentelemetry::sdk::instrumentationscope::InstrumentationScope *scope,
183-
std::chrono::nanoseconds time,
184181
::prometheus::MetricFamily *metric_family,
185182
const opentelemetry::sdk::resource::Resource *resource);
186183

@@ -190,7 +187,6 @@ class PrometheusExporterUtils
190187
static void SetMetricBasic(
191188
::prometheus::ClientMetric &metric,
192189
const opentelemetry::sdk::metrics::PointAttributes &labels,
193-
std::chrono::nanoseconds time,
194190
const opentelemetry::sdk::instrumentationscope::InstrumentationScope *scope,
195191
const opentelemetry::sdk::resource::Resource *resource);
196192

exporters/prometheus/src/exporter_utils.cc

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,6 @@ std::vector<prometheus_client::MetricFamily> PrometheusExporterUtils::TranslateT
139139
if (populate_target_info && !data.scope_metric_data_.empty())
140140
{
141141
SetTarget(data,
142-
data.scope_metric_data_.begin()->metric_data_.begin()->end_ts.time_since_epoch(),
143142
without_otel_scope ? nullptr : (*data.scope_metric_data_.begin()).scope_, &output);
144143
}
145144

@@ -151,7 +150,6 @@ std::vector<prometheus_client::MetricFamily> PrometheusExporterUtils::TranslateT
151150
auto unit = metric_data.instrument_descriptor.unit_;
152151
prometheus_client::MetricFamily metric_family;
153152
metric_family.help = metric_data.instrument_descriptor.description_;
154-
auto time = metric_data.end_ts.time_since_epoch();
155153
auto front = metric_data.point_data_attr_.front();
156154
auto kind = getAggregationType(front.point_data);
157155
bool is_monotonic = true;
@@ -185,7 +183,7 @@ std::vector<prometheus_client::MetricFamily> PrometheusExporterUtils::TranslateT
185183
sum = static_cast<double>(nostd::get<int64_t>(histogram_point_data.sum_));
186184
}
187185
SetData(std::vector<double>{sum, static_cast<double>(histogram_point_data.count_)},
188-
boundaries, counts, point_data_attr.attributes, scope, time, &metric_family,
186+
boundaries, counts, point_data_attr.attributes, scope, &metric_family,
189187
data.resource_);
190188
}
191189
else if (type == prometheus_client::MetricType::Gauge)
@@ -196,15 +194,15 @@ std::vector<prometheus_client::MetricFamily> PrometheusExporterUtils::TranslateT
196194
auto last_value_point_data =
197195
nostd::get<sdk::metrics::LastValuePointData>(point_data_attr.point_data);
198196
std::vector<metric_sdk::ValueType> values{last_value_point_data.value_};
199-
SetData(values, point_data_attr.attributes, scope, type, time, &metric_family,
197+
SetData(values, point_data_attr.attributes, scope, type, &metric_family,
200198
data.resource_);
201199
}
202200
else if (nostd::holds_alternative<sdk::metrics::SumPointData>(point_data_attr.point_data))
203201
{
204202
auto sum_point_data =
205203
nostd::get<sdk::metrics::SumPointData>(point_data_attr.point_data);
206204
std::vector<metric_sdk::ValueType> values{sum_point_data.value_};
207-
SetData(values, point_data_attr.attributes, scope, type, time, &metric_family,
205+
SetData(values, point_data_attr.attributes, scope, type, &metric_family,
208206
data.resource_);
209207
}
210208
else
@@ -221,7 +219,7 @@ std::vector<prometheus_client::MetricFamily> PrometheusExporterUtils::TranslateT
221219
auto sum_point_data =
222220
nostd::get<sdk::metrics::SumPointData>(point_data_attr.point_data);
223221
std::vector<metric_sdk::ValueType> values{sum_point_data.value_};
224-
SetData(values, point_data_attr.attributes, scope, type, time, &metric_family,
222+
SetData(values, point_data_attr.attributes, scope, type, &metric_family,
225223
data.resource_);
226224
}
227225
else
@@ -605,7 +603,6 @@ prometheus_client::MetricType PrometheusExporterUtils::TranslateType(
605603

606604
void PrometheusExporterUtils::SetTarget(
607605
const sdk::metrics::ResourceMetrics &data,
608-
std::chrono::nanoseconds time,
609606
const opentelemetry::sdk::instrumentationscope::InstrumentationScope *scope,
610607
std::vector<::prometheus::MetricFamily> *output)
611608
{
@@ -624,7 +621,7 @@ void PrometheusExporterUtils::SetTarget(
624621
metric.info.value = 1.0;
625622

626623
metric_sdk::PointAttributes empty_attributes;
627-
SetMetricBasic(metric, empty_attributes, time, scope, data.resource_);
624+
SetMetricBasic(metric, empty_attributes, scope, data.resource_);
628625

629626
for (auto &label : data.resource_->GetAttributes())
630627
{
@@ -645,13 +642,12 @@ void PrometheusExporterUtils::SetData(
645642
const metric_sdk::PointAttributes &labels,
646643
const opentelemetry::sdk::instrumentationscope::InstrumentationScope *scope,
647644
prometheus_client::MetricType type,
648-
std::chrono::nanoseconds time,
649645
prometheus_client::MetricFamily *metric_family,
650646
const opentelemetry::sdk::resource::Resource *resource)
651647
{
652648
metric_family->metric.emplace_back();
653649
prometheus_client::ClientMetric &metric = metric_family->metric.back();
654-
SetMetricBasic(metric, labels, time, scope, resource);
650+
SetMetricBasic(metric, labels, scope, resource);
655651
SetValue(values, type, &metric);
656652
}
657653

@@ -666,13 +662,12 @@ void PrometheusExporterUtils::SetData(
666662
const std::vector<uint64_t> &counts,
667663
const metric_sdk::PointAttributes &labels,
668664
const opentelemetry::sdk::instrumentationscope::InstrumentationScope *scope,
669-
std::chrono::nanoseconds time,
670665
prometheus_client::MetricFamily *metric_family,
671666
const opentelemetry::sdk::resource::Resource *resource)
672667
{
673668
metric_family->metric.emplace_back();
674669
prometheus_client::ClientMetric &metric = metric_family->metric.back();
675-
SetMetricBasic(metric, labels, time, scope, resource);
670+
SetMetricBasic(metric, labels, scope, resource);
676671
SetValue(values, boundaries, counts, &metric);
677672
}
678673

@@ -682,11 +677,9 @@ void PrometheusExporterUtils::SetData(
682677
void PrometheusExporterUtils::SetMetricBasic(
683678
prometheus_client::ClientMetric &metric,
684679
const metric_sdk::PointAttributes &labels,
685-
std::chrono::nanoseconds time,
686680
const opentelemetry::sdk::instrumentationscope::InstrumentationScope *scope,
687681
const opentelemetry::sdk::resource::Resource *resource)
688682
{
689-
metric.timestamp_ms = time.count() / 1000000;
690683
if (labels.empty() && nullptr == resource)
691684
{
692685
return;

exporters/prometheus/test/exporter_utils_test.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,10 @@ static void assert_basic(prometheus_client::MetricFamily &metric,
9090
ASSERT_EQ(metric.help, description); // description not changed
9191
ASSERT_EQ(metric.type, type); // type translated
9292

93+
// Prometheus metric data points should not have explicit timestamps
9394
for (const prometheus::ClientMetric &cm : metric.metric)
9495
{
95-
// end_ts is set as 1766662560000
96-
ASSERT_EQ(cm.timestamp_ms, 1766662560);
96+
ASSERT_EQ(cm.timestamp_ms, 0);
9797
}
9898

9999
auto metric_data = metric.metric[0];

0 commit comments

Comments
 (0)