Skip to content

Commit

Permalink
Add otel_scope_name and otel_scope_version labels to the prometheus e…
Browse files Browse the repository at this point in the history
…xporter
  • Loading branch information
dashpole committed Sep 1, 2023
1 parent f52ec6c commit 232617f
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 11 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ Increment the:

## [Unreleased]

* [EXPORTER] Add otel_scope_name and otel_scope_version labels to the prometheus exporter.
[#2293](https://github.com/open-telemetry/opentelemetry-cpp/pull/2293)

## [1.11.0] 2023-08-21

* [BUILD] Fix more cases for symbol name for 32-bit win32 DLL build
Expand Down
32 changes: 24 additions & 8 deletions exporters/prometheus/src/exporter_utils.cc
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ std::vector<prometheus_client::MetricFamily> PrometheusExporterUtils::TranslateT
sum = nostd::get<int64_t>(histogram_point_data.sum_);
}
SetData(std::vector<double>{sum, (double)histogram_point_data.count_}, boundaries, counts,
point_data_attr.attributes, time, &metric_family);
point_data_attr.attributes, instrumentation_info.scope_, time, &metric_family);
}
else if (type == prometheus_client::MetricType::Gauge)
{
Expand All @@ -82,14 +82,14 @@ std::vector<prometheus_client::MetricFamily> PrometheusExporterUtils::TranslateT
auto last_value_point_data =
nostd::get<sdk::metrics::LastValuePointData>(point_data_attr.point_data);
std::vector<metric_sdk::ValueType> values{last_value_point_data.value_};
SetData(values, point_data_attr.attributes, type, time, &metric_family);
SetData(values, point_data_attr.attributes, instrumentation_info.scope_, type, time, &metric_family);
}
else if (nostd::holds_alternative<sdk::metrics::SumPointData>(point_data_attr.point_data))
{
auto sum_point_data =
nostd::get<sdk::metrics::SumPointData>(point_data_attr.point_data);
std::vector<metric_sdk::ValueType> values{sum_point_data.value_};
SetData(values, point_data_attr.attributes, type, time, &metric_family);
SetData(values, point_data_attr.attributes, instrumentation_info.scope_, type, time, &metric_family);
}
else
{
Expand All @@ -105,7 +105,7 @@ std::vector<prometheus_client::MetricFamily> PrometheusExporterUtils::TranslateT
auto sum_point_data =
nostd::get<sdk::metrics::SumPointData>(point_data_attr.point_data);
std::vector<metric_sdk::ValueType> values{sum_point_data.value_};
SetData(values, point_data_attr.attributes, type, time, &metric_family);
SetData(values, point_data_attr.attributes, instrumentation_info.scope_, type, time, &metric_family);
}
else
{
Expand Down Expand Up @@ -228,12 +228,13 @@ template <typename T>
void PrometheusExporterUtils::SetData(std::vector<T> values,
const metric_sdk::PointAttributes &labels,
prometheus_client::MetricType type,
opentelemetry::sdk::instrumentationscope::InstrumentationScope scope,
std::chrono::nanoseconds time,
prometheus_client::MetricFamily *metric_family)
{
metric_family->metric.emplace_back();
prometheus_client::ClientMetric &metric = metric_family->metric.back();
SetMetricBasic(metric, time, labels);
SetMetricBasic(metric, time, labels, scope);
SetValue(values, type, &metric);
}

Expand All @@ -246,12 +247,13 @@ void PrometheusExporterUtils::SetData(std::vector<T> values,
const std::vector<double> &boundaries,
const std::vector<uint64_t> &counts,
const metric_sdk::PointAttributes &labels,
opentelemetry::sdk::instrumentationscope::InstrumentationScope scope,
std::chrono::nanoseconds time,
prometheus_client::MetricFamily *metric_family)
{
metric_family->metric.emplace_back();
prometheus_client::ClientMetric &metric = metric_family->metric.back();
SetMetricBasic(metric, time, labels);
SetMetricBasic(metric, time, labels, scope);
SetValue(values, boundaries, counts, &metric);
}

Expand All @@ -260,11 +262,11 @@ void PrometheusExporterUtils::SetData(std::vector<T> values,
*/
void PrometheusExporterUtils::SetMetricBasic(prometheus_client::ClientMetric &metric,
std::chrono::nanoseconds time,
const metric_sdk::PointAttributes &labels)
const metric_sdk::PointAttributes &labels,
opentelemetry::sdk::instrumentationscope::InstrumentationScope scope)
{
metric.timestamp_ms = time.count() / 1000000;

// auto label_pairs = ParseLabel(labels);
if (!labels.empty())
{
metric.label.resize(labels.size());
Expand All @@ -276,6 +278,20 @@ void PrometheusExporterUtils::SetMetricBasic(prometheus_client::ClientMetric &me
metric.label[i++].value = AttributeValueToString(label.second);
}
}
auto scope_name = scope.GetName();
if (!scope_name.empty())
{
metric.label.resize(metric.label.size() + 1);
metric.label[i].name = "otel_scope_name";
metric.label[i++].value = scope_name;
}
auto scope_version = scope.GetVersion();
if (!scope_version.empty())
{
metric.label.resize(metric.label.size() + 1);
metric.label[i].name = "otel_scope_version";
metric.label[i++].value = scope_version;
}
}

std::string PrometheusExporterUtils::AttributeValueToString(
Expand Down
6 changes: 3 additions & 3 deletions exporters/prometheus/test/exporter_utils_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ TEST(PrometheusExporterUtils, TranslateToPrometheusIntegerCounter)

auto metric1 = translated[0];
std::vector<int> vals = {10};
assert_basic(metric1, "library_name", "description", prometheus_client::MetricType::Counter, 1,
assert_basic(metric1, "library_name", "description", prometheus_client::MetricType::Counter, 3,
vals);
}

Expand All @@ -127,7 +127,7 @@ TEST(PrometheusExporterUtils, TranslateToPrometheusIntegerLastValue)

auto metric1 = translated[0];
std::vector<int> vals = {10};
assert_basic(metric1, "library_name", "description", prometheus_client::MetricType::Gauge, 1,
assert_basic(metric1, "library_name", "description", prometheus_client::MetricType::Gauge, 3,
vals);
}

Expand All @@ -140,7 +140,7 @@ TEST(PrometheusExporterUtils, TranslateToPrometheusHistogramNormal)

auto metric = translated[0];
std::vector<double> vals = {3, 900.5, 4};
assert_basic(metric, "library_name", "description", prometheus_client::MetricType::Histogram, 1,
assert_basic(metric, "library_name", "description", prometheus_client::MetricType::Histogram, 3,
vals);
assert_histogram(metric, std::list<double>{10.1, 20.2, 30.2}, {200, 300, 400, 500});
}
Expand Down

0 comments on commit 232617f

Please sign in to comment.