Skip to content
Merged
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 @@ -48,6 +48,9 @@ Increment the:
* [CONFIGURATION] File configuration - implement distribution
[#3833](https://github.com/open-telemetry/opentelemetry-cpp/pull/3833)

* [CONFIGURATION] File configuration - exemplar filter
[#3837](https://github.com/open-telemetry/opentelemetry-cpp/pull/3837)

Breaking changes:

* [CONFIGURATION] File configuration - remove zipkin
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
#include "opentelemetry/sdk/configuration/double_array_attribute_value_configuration.h"
#include "opentelemetry/sdk/configuration/double_attribute_value_configuration.h"
#include "opentelemetry/sdk/configuration/drop_aggregation_configuration.h"
#include "opentelemetry/sdk/configuration/exemplar_filter.h"
#include "opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h"
#include "opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h"
#include "opentelemetry/sdk/configuration/extension_log_record_processor_configuration.h"
Expand Down Expand Up @@ -227,6 +228,9 @@ class ConfigurationParser
InstrumentType ParseInstrumentType(const std::unique_ptr<DocumentNode> &node,
const std::string &name) const;

ExemplarFilter ParseExemplarFilter(const std::unique_ptr<DocumentNode> &node,
const std::string &name) const;

std::unique_ptr<ViewSelectorConfiguration> ParseViewSelectorConfiguration(
const std::unique_ptr<DocumentNode> &node) const;

Expand Down
27 changes: 27 additions & 0 deletions sdk/include/opentelemetry/sdk/configuration/exemplar_filter.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

#pragma once

#include <cstdint>

#include "opentelemetry/version.h"

OPENTELEMETRY_BEGIN_NAMESPACE
namespace sdk
{
namespace configuration
{

// YAML-SCHEMA: schema/meter_provider.yaml
// YAML-NODE: ExemplarFilter
enum class ExemplarFilter : std::uint8_t
{
always_on,
always_off,
trace_based
};

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

#include "opentelemetry/sdk/configuration/exemplar_filter.h"
#include "opentelemetry/sdk/configuration/metric_reader_configuration.h"
#include "opentelemetry/sdk/configuration/view_configuration.h"
#include "opentelemetry/version.h"
Expand All @@ -16,14 +17,14 @@ namespace sdk
namespace configuration
{

// YAML-SCHEMA: schema/meter_provider.json
// YAML-SCHEMA: schema/meter_provider.yaml
// YAML-NODE: MeterProvider
class MeterProviderConfiguration
{
public:
std::vector<std::unique_ptr<MetricReaderConfiguration>> readers;
std::vector<std::unique_ptr<ViewConfiguration>> views;
// FIXME: exemplar_filter
ExemplarFilter exemplar_filter = ExemplarFilter::trace_based;
// FIXME: meter_configurator
};

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 @@ -38,6 +38,7 @@
#include "opentelemetry/sdk/configuration/double_array_attribute_value_configuration.h"
#include "opentelemetry/sdk/configuration/double_attribute_value_configuration.h"
#include "opentelemetry/sdk/configuration/drop_aggregation_configuration.h"
#include "opentelemetry/sdk/configuration/exemplar_filter.h"
#include "opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h"
#include "opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h"
#include "opentelemetry/sdk/configuration/extension_log_record_processor_configuration.h"
Expand Down Expand Up @@ -1171,6 +1172,34 @@ InstrumentType ConfigurationParser::ParseInstrumentType(const std::unique_ptr<Do
throw InvalidSchemaException(node->Location(), message);
}

ExemplarFilter ConfigurationParser::ParseExemplarFilter(const std::unique_ptr<DocumentNode> &node,
const std::string &name) const
{
if (name == "")
{
return ExemplarFilter::trace_based;
}

if (name == "always_on")
{
return ExemplarFilter::always_on;
}

if (name == "always_off")
{
return ExemplarFilter::always_off;
}

if (name == "trace_based")
{
return ExemplarFilter::trace_based;
}

std::string message("Illegal exemplar filter: ");
message.append(name);
throw InvalidSchemaException(node->Location(), message);
}

std::unique_ptr<ViewSelectorConfiguration> ConfigurationParser::ParseViewSelectorConfiguration(
const std::unique_ptr<DocumentNode> &node) const
{
Expand Down Expand Up @@ -1384,7 +1413,8 @@ std::unique_ptr<MeterProviderConfiguration> ConfigurationParser::ParseMeterProvi
}
}

// FIXME: exemplar_filter
std::string exemplar_filter = node->GetString("exemplar_filter", "trace_based");
model->exemplar_filter = ParseExemplarFilter(node, exemplar_filter);

// FIXME: meter_configurator/development

Expand Down
43 changes: 43 additions & 0 deletions sdk/src/configuration/sdk_builder.cc
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@
#include "opentelemetry/sdk/logs/processor.h"
#include "opentelemetry/sdk/logs/simple_log_record_processor_factory.h"
#include "opentelemetry/sdk/metrics/aggregation/aggregation_config.h"
#include "opentelemetry/sdk/metrics/exemplar/filter_type.h"
#include "opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader_factory.h"
#include "opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader_options.h"
#include "opentelemetry/sdk/metrics/instruments.h"
Expand Down Expand Up @@ -155,6 +156,10 @@
#include "opentelemetry/sdk/trace/tracer_provider_factory.h"
#include "opentelemetry/version.h"

#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW
# include "opentelemetry/sdk/configuration/exemplar_filter.h"
#endif

OPENTELEMETRY_BEGIN_NAMESPACE
namespace sdk
{
Expand Down Expand Up @@ -1149,6 +1154,33 @@ static opentelemetry::sdk::metrics::InstrumentType ConvertInstrumentType(
return sdk;
}

#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW

static opentelemetry::sdk::metrics::ExemplarFilterType ConvertExemplarFilter(
enum opentelemetry::sdk::configuration::ExemplarFilter config)
{
opentelemetry::sdk::metrics::ExemplarFilterType sdk{
opentelemetry::sdk::metrics::ExemplarFilterType::kTraceBased};

switch (config)
{
case opentelemetry::sdk::configuration::ExemplarFilter::always_on:
sdk = opentelemetry::sdk::metrics::ExemplarFilterType::kAlwaysOn;
break;
case opentelemetry::sdk::configuration::ExemplarFilter::always_off:
sdk = opentelemetry::sdk::metrics::ExemplarFilterType::kAlwaysOff;
break;
case opentelemetry::sdk::configuration::ExemplarFilter::trace_based:
sdk = opentelemetry::sdk::metrics::ExemplarFilterType::kTraceBased;
break;
default:
break;
}

return sdk;
}
#endif /* ENABLE_METRICS_EXEMPLAR_PREVIEW */

std::unique_ptr<opentelemetry::sdk::metrics::PushMetricExporter>
SdkBuilder::CreateOtlpHttpPushMetricExporter(
const opentelemetry::sdk::configuration::OtlpHttpPushMetricExporterConfiguration *model) const
Expand Down Expand Up @@ -1500,6 +1532,17 @@ std::unique_ptr<opentelemetry::sdk::metrics::MeterProvider> SdkBuilder::CreateMe
meter_context->AddMetricReader(metric_reader);
}

#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW
auto sdk_exemplar_filter = ConvertExemplarFilter(model->exemplar_filter);
meter_context->SetExemplarFilter(sdk_exemplar_filter);
#else
/* Do not spam with warnings if disabled anyway. */
if (model->exemplar_filter != ExemplarFilter::always_off)
{
OTEL_INTERNAL_LOG_WARN("ENABLE_METRICS_EXEMPLAR_PREVIEW not set, ignoring exemplar filter");
}
#endif /* ENABLE_METRICS_EXEMPLAR_PREVIEW */

sdk = opentelemetry::sdk::metrics::MeterProviderFactory::Create(std::move(meter_context));

return sdk;
Expand Down
12 changes: 12 additions & 0 deletions sdk/test/configuration/yaml_metrics_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#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/exemplar_filter.h"
#include "opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h"
#include "opentelemetry/sdk/configuration/grpc_tls_configuration.h"
#include "opentelemetry/sdk/configuration/headers_configuration.h"
Expand Down Expand Up @@ -98,6 +99,8 @@ file_format: "1.0-metrics"
auto config = DoParse(yaml);
ASSERT_NE(config, nullptr);
ASSERT_NE(config->meter_provider, nullptr);
ASSERT_EQ(config->meter_provider->exemplar_filter,
opentelemetry::sdk::configuration::ExemplarFilter::trace_based);
ASSERT_EQ(config->meter_provider->readers.size(), 1);
auto *reader = config->meter_provider->readers[0].get();
ASSERT_NE(reader, nullptr);
Expand Down Expand Up @@ -133,11 +136,14 @@ file_format: "1.0-metrics"
observable_gauge: 600
observable_up_down_counter: 700
up_down_counter: 800
exemplar_filter: always_on
)";

auto config = DoParse(yaml);
ASSERT_NE(config, nullptr);
ASSERT_NE(config->meter_provider, nullptr);
ASSERT_EQ(config->meter_provider->exemplar_filter,
opentelemetry::sdk::configuration::ExemplarFilter::always_on);
ASSERT_EQ(config->meter_provider->readers.size(), 1);
auto *reader = config->meter_provider->readers[0].get();
ASSERT_NE(reader, nullptr);
Expand Down Expand Up @@ -170,11 +176,14 @@ file_format: "1.0-metrics"
- pull:
exporter:
prometheus/development:
exemplar_filter: always_off
)";

auto config = DoParse(yaml);
ASSERT_NE(config, nullptr);
ASSERT_NE(config->meter_provider, nullptr);
ASSERT_EQ(config->meter_provider->exemplar_filter,
opentelemetry::sdk::configuration::ExemplarFilter::always_off);
ASSERT_EQ(config->meter_provider->readers.size(), 1);
auto *reader = config->meter_provider->readers[0].get();
ASSERT_NE(reader, nullptr);
Expand Down Expand Up @@ -205,11 +214,14 @@ file_format: "1.0-metrics"
observable_gauge: 600
observable_up_down_counter: 700
up_down_counter: 800
exemplar_filter: trace_based
)";

auto config = DoParse(yaml);
ASSERT_NE(config, nullptr);
ASSERT_NE(config->meter_provider, nullptr);
ASSERT_EQ(config->meter_provider->exemplar_filter,
opentelemetry::sdk::configuration::ExemplarFilter::trace_based);
ASSERT_EQ(config->meter_provider->readers.size(), 1);
auto *reader = config->meter_provider->readers[0].get();
ASSERT_NE(reader, nullptr);
Expand Down
Loading