Skip to content
Open
Show file tree
Hide file tree
Changes from all 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 @@ -33,6 +33,9 @@ Increment the:
* [CONFIGURATION] File configuration - prometheus without_target_info
[#3818](https://github.com/open-telemetry/opentelemetry-cpp/pull/3818)

* [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
31 changes: 30 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 @@ -1005,6 +1006,24 @@ 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>();

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 @@ -1028,6 +1047,12 @@ ConfigurationParser::ParsePeriodicMetricReaderConfiguration(
}
}

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

return model;
}

Expand All @@ -1051,7 +1076,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