mirror of https://github.com/grpc/grpc.git
[OTel] Remove global fallback for meter provider (#34190)
Based on updates at https://github.com/grpc/proposal/pull/380 <!-- If you know who should review your pull request, please assign it to that person, otherwise the pull request would get assigned randomly. If your pull request is for a specific language, please add the appropriate lang label. -->
This commit is contained in:
parent
81db191c2b
commit
f5e02f6c62
|
|
@ -26,7 +26,6 @@
|
||||||
|
|
||||||
#include "opentelemetry/metrics/meter.h"
|
#include "opentelemetry/metrics/meter.h"
|
||||||
#include "opentelemetry/metrics/meter_provider.h"
|
#include "opentelemetry/metrics/meter_provider.h"
|
||||||
#include "opentelemetry/metrics/provider.h"
|
|
||||||
#include "opentelemetry/nostd/shared_ptr.h"
|
#include "opentelemetry/nostd/shared_ptr.h"
|
||||||
#include "opentelemetry/nostd/unique_ptr.h"
|
#include "opentelemetry/nostd/unique_ptr.h"
|
||||||
|
|
||||||
|
|
@ -118,13 +117,12 @@ OpenTelemetryPluginBuilder& OpenTelemetryPluginBuilder::DisableMetrics(
|
||||||
void OpenTelemetryPluginBuilder::BuildAndRegisterGlobal() {
|
void OpenTelemetryPluginBuilder::BuildAndRegisterGlobal() {
|
||||||
opentelemetry::nostd::shared_ptr<opentelemetry::metrics::MeterProvider>
|
opentelemetry::nostd::shared_ptr<opentelemetry::metrics::MeterProvider>
|
||||||
meter_provider = meter_provider_;
|
meter_provider = meter_provider_;
|
||||||
if (meter_provider == nullptr) {
|
|
||||||
meter_provider = opentelemetry::metrics::Provider::GetMeterProvider();
|
|
||||||
}
|
|
||||||
auto meter = meter_provider->GetMeter("grpc");
|
|
||||||
delete g_otel_plugin_state_;
|
delete g_otel_plugin_state_;
|
||||||
g_otel_plugin_state_ = new struct OTelPluginState;
|
g_otel_plugin_state_ = new struct OTelPluginState;
|
||||||
g_otel_plugin_state_->meter_provider = std::move(meter_provider);
|
if (meter_provider == nullptr) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
auto meter = meter_provider->GetMeter("grpc");
|
||||||
if (metrics_.contains(OTelClientAttemptStartedInstrumentName())) {
|
if (metrics_.contains(OTelClientAttemptStartedInstrumentName())) {
|
||||||
g_otel_plugin_state_->client.attempt.started = meter->CreateUInt64Counter(
|
g_otel_plugin_state_->client.attempt.started = meter->CreateUInt64Counter(
|
||||||
std::string(OTelClientAttemptStartedInstrumentName()));
|
std::string(OTelClientAttemptStartedInstrumentName()));
|
||||||
|
|
@ -166,6 +164,7 @@ void OpenTelemetryPluginBuilder::BuildAndRegisterGlobal() {
|
||||||
meter->CreateUInt64Histogram(std::string(
|
meter->CreateUInt64Histogram(std::string(
|
||||||
OTelServerCallRcvdTotalCompressedMessageSizeInstrumentName()));
|
OTelServerCallRcvdTotalCompressedMessageSizeInstrumentName()));
|
||||||
}
|
}
|
||||||
|
g_otel_plugin_state_->meter_provider = std::move(meter_provider);
|
||||||
grpc_core::ServerCallTracerFactory::RegisterGlobal(
|
grpc_core::ServerCallTracerFactory::RegisterGlobal(
|
||||||
new grpc::internal::OpenTelemetryServerCallTracerFactory);
|
new grpc::internal::OpenTelemetryServerCallTracerFactory);
|
||||||
grpc_core::CoreConfiguration::RegisterBuilder(
|
grpc_core::CoreConfiguration::RegisterBuilder(
|
||||||
|
|
|
||||||
|
|
@ -64,23 +64,18 @@ class OTelPluginEnd2EndTest : public ::testing::Test {
|
||||||
protected:
|
protected:
|
||||||
using ::testing::Test::SetUp;
|
using ::testing::Test::SetUp;
|
||||||
void SetUp(const absl::flat_hash_set<absl::string_view>& metric_names,
|
void SetUp(const absl::flat_hash_set<absl::string_view>& metric_names,
|
||||||
bool global_meter_provider = false) {
|
bool test_no_meter_provider = false) {
|
||||||
// We are resetting the MeterProvider and OpenTelemetry plugin at the start
|
// We are resetting the MeterProvider and OpenTelemetry plugin at the start
|
||||||
// of each test to avoid test results from one test carrying over to another
|
// of each test to avoid test results from one test carrying over to another
|
||||||
// test. (Some measurements can get arbitrarily delayed.)
|
// test. (Some measurements can get arbitrarily delayed.)
|
||||||
|
grpc_core::CoreConfiguration::Reset();
|
||||||
|
grpc::internal::OpenTelemetryPluginBuilder ot_builder;
|
||||||
|
ot_builder.EnableMetrics(metric_names);
|
||||||
|
if (!test_no_meter_provider) {
|
||||||
auto meter_provider =
|
auto meter_provider =
|
||||||
std::make_shared<opentelemetry::sdk::metrics::MeterProvider>();
|
std::make_shared<opentelemetry::sdk::metrics::MeterProvider>();
|
||||||
reader_.reset(new grpc::testing::MockMetricReader);
|
reader_.reset(new grpc::testing::MockMetricReader);
|
||||||
meter_provider->AddMetricReader(reader_);
|
meter_provider->AddMetricReader(reader_);
|
||||||
grpc_core::CoreConfiguration::Reset();
|
|
||||||
grpc::internal::OpenTelemetryPluginBuilder ot_builder;
|
|
||||||
ot_builder.EnableMetrics(metric_names);
|
|
||||||
if (global_meter_provider) {
|
|
||||||
opentelemetry::metrics::Provider::SetMeterProvider(
|
|
||||||
opentelemetry::nostd::shared_ptr<
|
|
||||||
opentelemetry::metrics::MeterProvider>(
|
|
||||||
std::move(meter_provider)));
|
|
||||||
} else {
|
|
||||||
ot_builder.SetMeterProvider(std::move(meter_provider));
|
ot_builder.SetMeterProvider(std::move(meter_provider));
|
||||||
}
|
}
|
||||||
ot_builder.BuildAndRegisterGlobal();
|
ot_builder.BuildAndRegisterGlobal();
|
||||||
|
|
@ -395,23 +390,11 @@ TEST_F(OTelPluginEnd2EndTest, ServerCallRcvdTotalCompressedMessageSize) {
|
||||||
EXPECT_EQ(*status_value, "OK");
|
EXPECT_EQ(*status_value, "OK");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make sure that things work with the global meter provider as well
|
// Make sure that no meter provider results in normal operations.
|
||||||
TEST_F(OTelPluginEnd2EndTest, UseGlobalMeterProvider) {
|
TEST_F(OTelPluginEnd2EndTest, NoMeterProviderRegistered) {
|
||||||
SetUp({grpc::internal::OTelClientAttemptStartedInstrumentName()});
|
SetUp({grpc::internal::OTelClientAttemptStartedInstrumentName()},
|
||||||
|
/*test_no_meter_provider=*/true);
|
||||||
SendRPC();
|
SendRPC();
|
||||||
const char* kMetricName = "grpc.client.attempt.started";
|
|
||||||
auto data = ReadCurrentMetricsData(
|
|
||||||
[&](const absl::flat_hash_map<
|
|
||||||
std::string,
|
|
||||||
std::vector<opentelemetry::sdk::metrics::PointDataAttributes>>&
|
|
||||||
data) { return !data.contains(kMetricName); });
|
|
||||||
ASSERT_EQ(data[kMetricName].size(), 1);
|
|
||||||
auto point_data = absl::get_if<opentelemetry::sdk::metrics::SumPointData>(
|
|
||||||
&data[kMetricName][0].point_data);
|
|
||||||
ASSERT_NE(point_data, nullptr);
|
|
||||||
auto client_started_value = absl::get_if<int64_t>(&point_data->value_);
|
|
||||||
ASSERT_NE(client_started_value, nullptr);
|
|
||||||
ASSERT_EQ(*client_started_value, 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue