Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ Increment the:
* [SEMANTIC CONVENTIONS] Upgrade to semantic conventions 1.39.0
[#3813](https://github.com/open-telemetry/opentelemetry-cpp/pull/3813)

* [CONFIGURATION] File configuration - implement cardinality_limits
[#3820](https://github.com/open-telemetry/opentelemetry-cpp/pull/3820)

Breaking changes:

* [CONFIGURATION] File configuration - remove zipkin
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

#pragma once

#include <cstddef>

#include "opentelemetry/version.h"

OPENTELEMETRY_BEGIN_NAMESPACE
namespace sdk
{
namespace configuration
{

// YAML-SCHEMA: schema/meter_provider.yaml
// YAML-NODE: CardinalityLimits
class CardinalityLimitsConfiguration
{
public:
std::size_t default_limit;
// For all limits, 0 means unset, use default_limit
std::size_t counter;
std::size_t gauge;
std::size_t histogram;
std::size_t observable_counter;
std::size_t observable_gauge;
std::size_t observable_up_down_counter;
std::size_t up_down_counter;
};

} // namespace configuration
} // namespace sdk
OPENTELEMETRY_END_NAMESPACE
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#include "opentelemetry/sdk/configuration/batch_span_processor_configuration.h"
#include "opentelemetry/sdk/configuration/boolean_array_attribute_value_configuration.h"
#include "opentelemetry/sdk/configuration/boolean_attribute_value_configuration.h"
#include "opentelemetry/sdk/configuration/cardinality_limits_configuration.h"
#include "opentelemetry/sdk/configuration/configuration.h"
#include "opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h"
#include "opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h"
Expand Down Expand Up @@ -210,6 +211,9 @@ class ConfigurationParser
std::unique_ptr<MetricProducerConfiguration> ParseMetricProducerConfiguration(
const std::unique_ptr<DocumentNode> &node) const;

std::unique_ptr<CardinalityLimitsConfiguration> ParseCardinalityLimitsConfiguration(
const std::unique_ptr<DocumentNode> &node) const;

std::unique_ptr<PeriodicMetricReaderConfiguration> ParsePeriodicMetricReaderConfiguration(
const std::unique_ptr<DocumentNode> &node) const;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#include <memory>
#include <vector>

#include "opentelemetry/sdk/configuration/cardinality_limits_configuration.h"
#include "opentelemetry/sdk/configuration/metric_producer_configuration.h"
#include "opentelemetry/sdk/configuration/metric_reader_configuration.h"
#include "opentelemetry/sdk/configuration/metric_reader_configuration_visitor.h"
Expand All @@ -18,7 +19,7 @@ namespace sdk
namespace configuration
{

// YAML-SCHEMA: schema/meter_provider.json
// YAML-SCHEMA: schema/meter_provider.yaml
// YAML-NODE: PeriodicMetricReader
class PeriodicMetricReaderConfiguration : public MetricReaderConfiguration
{
Expand All @@ -32,6 +33,7 @@ class PeriodicMetricReaderConfiguration : public MetricReaderConfiguration
std::size_t timeout{0};
std::unique_ptr<PushMetricExporterConfiguration> exporter;
std::vector<std::unique_ptr<MetricProducerConfiguration>> producers;
std::unique_ptr<CardinalityLimitsConfiguration> cardinality_limits;
};

} // namespace configuration
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#include <memory>
#include <vector>

#include "opentelemetry/sdk/configuration/cardinality_limits_configuration.h"
#include "opentelemetry/sdk/configuration/metric_producer_configuration.h"
#include "opentelemetry/sdk/configuration/metric_reader_configuration.h"
#include "opentelemetry/sdk/configuration/metric_reader_configuration_visitor.h"
Expand All @@ -18,7 +19,7 @@ namespace sdk
namespace configuration
{

// YAML-SCHEMA: schema/meter_provider.json
// YAML-SCHEMA: schema/meter_provider.yaml
// YAML-NODE: PullMetricReader
class PullMetricReaderConfiguration : public MetricReaderConfiguration
{
Expand All @@ -30,7 +31,7 @@ class PullMetricReaderConfiguration : public MetricReaderConfiguration

std::unique_ptr<PullMetricExporterConfiguration> exporter;
std::vector<std::unique_ptr<MetricProducerConfiguration>> producers;
// FIXME: cardinality_limits
std::unique_ptr<CardinalityLimitsConfiguration> cardinality_limits;
};

} // namespace configuration
Expand Down
32 changes: 31 additions & 1 deletion sdk/src/configuration/configuration_parser.cc
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
#include "opentelemetry/sdk/configuration/batch_span_processor_configuration.h"
#include "opentelemetry/sdk/configuration/boolean_array_attribute_value_configuration.h"
#include "opentelemetry/sdk/configuration/boolean_attribute_value_configuration.h"
#include "opentelemetry/sdk/configuration/cardinality_limits_configuration.h"
#include "opentelemetry/sdk/configuration/configuration.h"
#include "opentelemetry/sdk/configuration/configuration_parser.h"
#include "opentelemetry/sdk/configuration/console_log_record_exporter_configuration.h"
Expand Down Expand Up @@ -1006,6 +1007,25 @@ std::unique_ptr<MetricProducerConfiguration> ConfigurationParser::ParseMetricPro
return model;
}

std::unique_ptr<CardinalityLimitsConfiguration>
ConfigurationParser::ParseCardinalityLimitsConfiguration(
const std::unique_ptr<DocumentNode> &node) const
{
auto model = std::make_unique<CardinalityLimitsConfiguration>();
std::unique_ptr<DocumentNode> child;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: unused child variable.


model->default_limit = node->GetInteger("default", 2000);
model->counter = node->GetInteger("counter", 0);
model->gauge = node->GetInteger("gauge", 0);
model->histogram = node->GetInteger("histogram", 0);
model->observable_counter = node->GetInteger("observable_counter", 0);
model->observable_gauge = node->GetInteger("observable_gauge", 0);
model->observable_up_down_counter = node->GetInteger("observable_up_down_counter", 0);
model->up_down_counter = node->GetInteger("up_down_counter", 0);

return model;
}

std::unique_ptr<PeriodicMetricReaderConfiguration>
ConfigurationParser::ParsePeriodicMetricReaderConfiguration(
const std::unique_ptr<DocumentNode> &node) const
Expand All @@ -1029,6 +1049,12 @@ ConfigurationParser::ParsePeriodicMetricReaderConfiguration(
}
}

child = node->GetChildNode("cardinality_limits");
if (child)
{
model->cardinality_limits = ParseCardinalityLimitsConfiguration(child);
}

return model;
}

Expand All @@ -1052,7 +1078,11 @@ ConfigurationParser::ParsePullMetricReaderConfiguration(
}
}

// FIXME: cardinality_limits
child = node->GetChildNode("cardinality_limits");
if (child)
{
model->cardinality_limits = ParseCardinalityLimitsConfiguration(child);
}

return model;
}
Expand Down
10 changes: 10 additions & 0 deletions sdk/src/configuration/sdk_builder.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1333,6 +1333,11 @@ std::unique_ptr<opentelemetry::sdk::metrics::MetricReader> SdkBuilder::CreatePer
OTEL_INTERNAL_LOG_WARN("metric producer not supported, ignoring");
}

if (model->cardinality_limits != nullptr)
{
OTEL_INTERNAL_LOG_WARN("cardinality limits not supported, ignoring");
}

sdk = opentelemetry::sdk::metrics::PeriodicExportingMetricReaderFactory::Create(
std::move(exporter_sdk), options);

Expand All @@ -1351,6 +1356,11 @@ std::unique_ptr<opentelemetry::sdk::metrics::MetricReader> SdkBuilder::CreatePul
OTEL_INTERNAL_LOG_WARN("metric producer not supported, ignoring");
}

if (model->cardinality_limits != nullptr)
{
OTEL_INTERNAL_LOG_WARN("cardinality limits not supported, ignoring");
}

return sdk;
}

Expand Down
67 changes: 67 additions & 0 deletions sdk/test/configuration/yaml_metrics_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#include <vector>

#include "opentelemetry/sdk/configuration/base2_exponential_bucket_histogram_aggregation_configuration.h"
#include "opentelemetry/sdk/configuration/cardinality_limits_configuration.h"
#include "opentelemetry/sdk/configuration/configuration.h"
#include "opentelemetry/sdk/configuration/default_histogram_aggregation.h"
#include "opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h"
Expand Down Expand Up @@ -108,6 +109,8 @@ file_format: "1.0-metrics"
ASSERT_NE(periodic->exporter, nullptr);
auto *exporter = periodic->exporter.get();
ASSERT_NE(exporter, nullptr);
auto *cardinality_limits = periodic->cardinality_limits.get();
ASSERT_EQ(cardinality_limits, nullptr);
}

TEST(YamlMetrics, periodic_reader)
Expand All @@ -121,6 +124,15 @@ file_format: "1.0-metrics"
timeout: 15000
exporter:
console:
cardinality_limits:
default: 100
counter: 200
gauge: 300
histogram: 400
observable_counter: 500
observable_gauge: 600
observable_up_down_counter: 700
up_down_counter: 800
)";

auto config = DoParse(yaml);
Expand All @@ -137,6 +149,42 @@ file_format: "1.0-metrics"
ASSERT_NE(periodic->exporter, nullptr);
auto *exporter = periodic->exporter.get();
ASSERT_NE(exporter, nullptr);
auto *cardinality_limits = periodic->cardinality_limits.get();
ASSERT_NE(cardinality_limits, nullptr);
ASSERT_EQ(cardinality_limits->default_limit, 100);
ASSERT_EQ(cardinality_limits->counter, 200);
ASSERT_EQ(cardinality_limits->gauge, 300);
ASSERT_EQ(cardinality_limits->histogram, 400);
ASSERT_EQ(cardinality_limits->observable_counter, 500);
ASSERT_EQ(cardinality_limits->observable_gauge, 600);
ASSERT_EQ(cardinality_limits->observable_up_down_counter, 700);
ASSERT_EQ(cardinality_limits->up_down_counter, 800);
}

TEST(YamlMetrics, default_pull_reader)
{
std::string yaml = R"(
file_format: "1.0-metrics"
meter_provider:
readers:
- pull:
exporter:
prometheus/development:
)";

auto config = DoParse(yaml);
ASSERT_NE(config, nullptr);
ASSERT_NE(config->meter_provider, nullptr);
ASSERT_EQ(config->meter_provider->readers.size(), 1);
auto *reader = config->meter_provider->readers[0].get();
ASSERT_NE(reader, nullptr);
auto *pull =
reinterpret_cast<opentelemetry::sdk::configuration::PullMetricReaderConfiguration *>(reader);
ASSERT_NE(pull->exporter, nullptr);
auto *exporter = pull->exporter.get();
ASSERT_NE(exporter, nullptr);
auto *cardinality_limits = pull->cardinality_limits.get();
ASSERT_EQ(cardinality_limits, nullptr);
}

TEST(YamlMetrics, pull_reader)
Expand All @@ -148,6 +196,15 @@ file_format: "1.0-metrics"
- pull:
exporter:
prometheus/development:
cardinality_limits:
default: 100
counter: 200
gauge: 300
histogram: 400
observable_counter: 500
observable_gauge: 600
observable_up_down_counter: 700
up_down_counter: 800
)";

auto config = DoParse(yaml);
Expand All @@ -161,6 +218,16 @@ file_format: "1.0-metrics"
ASSERT_NE(pull->exporter, nullptr);
auto *exporter = pull->exporter.get();
ASSERT_NE(exporter, nullptr);
auto *cardinality_limits = pull->cardinality_limits.get();
ASSERT_NE(cardinality_limits, nullptr);
ASSERT_EQ(cardinality_limits->default_limit, 100);
ASSERT_EQ(cardinality_limits->counter, 200);
ASSERT_EQ(cardinality_limits->gauge, 300);
ASSERT_EQ(cardinality_limits->histogram, 400);
ASSERT_EQ(cardinality_limits->observable_counter, 500);
ASSERT_EQ(cardinality_limits->observable_gauge, 600);
ASSERT_EQ(cardinality_limits->observable_up_down_counter, 700);
ASSERT_EQ(cardinality_limits->up_down_counter, 800);
}

TEST(YamlMetrics, default_otlp_http)
Expand Down
Loading