From 75414e8c2f6b3b506b1a219bc83e9792e5d8f140 Mon Sep 17 00:00:00 2001 From: Xuyang Tao Date: Fri, 10 May 2024 00:22:09 +0000 Subject: [PATCH 1/7] inital code add custom stats prefix Signed-off-by: Xuyang Tao --- .../open_telemetry/v3/logs_service.proto | 5 ++ .../open_telemetry/grpc_access_log_impl.cc | 3 +- .../grpc_access_log_impl_test.cc | 50 +++++++++++++++++-- 3 files changed, 54 insertions(+), 4 deletions(-) diff --git a/api/envoy/extensions/access_loggers/open_telemetry/v3/logs_service.proto b/api/envoy/extensions/access_loggers/open_telemetry/v3/logs_service.proto index 8619fb3c6fa3..5a38912fb907 100644 --- a/api/envoy/extensions/access_loggers/open_telemetry/v3/logs_service.proto +++ b/api/envoy/extensions/access_loggers/open_telemetry/v3/logs_service.proto @@ -46,4 +46,9 @@ message OpenTelemetryAccessLogConfig { // See 'attributes' in the LogResource proto for more details. // Example: ``attributes { values { key: "user_agent" value { string_value: "%REQ(USER-AGENT)%" } } }``. opentelemetry.proto.common.v1.KeyValueList attributes = 3; + + // Optional prefix to use on OpenTelemetry access logger stats. If empty, the stats will be rooted at + // ``access_logs.open_telemetry_access_log.``. If non-empty, stats will be rooted at + // ``access_logs.open_telemetry_access_log..``. + string stat_prefix = 6; } diff --git a/source/extensions/access_loggers/open_telemetry/grpc_access_log_impl.cc b/source/extensions/access_loggers/open_telemetry/grpc_access_log_impl.cc index 044ea68ed78d..d6100a807b60 100644 --- a/source/extensions/access_loggers/open_telemetry/grpc_access_log_impl.cc +++ b/source/extensions/access_loggers/open_telemetry/grpc_access_log_impl.cc @@ -48,7 +48,8 @@ GrpcAccessLoggerImpl::GrpcAccessLoggerImpl( *Protobuf::DescriptorPool::generated_pool()->FindMethodByName( "opentelemetry.proto.collector.logs.v1.LogsService.Export"), GrpcCommon::optionalRetryPolicy(config.common_config()), genOTelCallbacksFactory())), - stats_({ALL_GRPC_ACCESS_LOGGER_STATS(POOL_COUNTER_PREFIX(scope, GRPC_LOG_STATS_PREFIX))}) { + stats_({ALL_GRPC_ACCESS_LOGGER_STATS( + POOL_COUNTER_PREFIX(scope, absl::StrCat(GRPC_LOG_STATS_PREFIX, config.stat_prefix())))}) { initMessageRoot(config, local_info); } diff --git a/test/extensions/access_loggers/open_telemetry/grpc_access_log_impl_test.cc b/test/extensions/access_loggers/open_telemetry/grpc_access_log_impl_test.cc index b4855299d744..e3241c82f3d0 100644 --- a/test/extensions/access_loggers/open_telemetry/grpc_access_log_impl_test.cc +++ b/test/extensions/access_loggers/open_telemetry/grpc_access_log_impl_test.cc @@ -90,9 +90,6 @@ class GrpcAccessLoggerImplTest : public testing::Test { config_.mutable_common_config()->mutable_buffer_size_bytes()->set_value(BUFFER_SIZE_BYTES); config_.mutable_common_config()->mutable_buffer_flush_interval()->set_nanos( std::chrono::duration_cast(FlushInterval).count()); - logger_ = - std::make_unique(Grpc::RawAsyncClientPtr{async_client_}, config_, - dispatcher_, local_info_, *stats_store_.rootScope()); } Grpc::MockAsyncClient* async_client_; @@ -103,9 +100,16 @@ class GrpcAccessLoggerImplTest : public testing::Test { std::unique_ptr logger_; GrpcAccessLoggerImplTestHelper grpc_access_logger_impl_test_helper_; envoy::extensions::access_loggers::open_telemetry::v3::OpenTelemetryAccessLogConfig config_; + + void setUpLogger() { + logger_ = + std::make_unique(Grpc::RawAsyncClientPtr{async_client_}, config_, + dispatcher_, local_info_, *stats_store_.rootScope()); + } }; TEST_F(GrpcAccessLoggerImplTest, Log) { + setUpLogger(); grpc_access_logger_impl_test_helper_.expectSentMessage(R"EOF( resource_logs: resource: @@ -144,6 +148,7 @@ TEST_F(GrpcAccessLoggerImplTest, Log) { } TEST_F(GrpcAccessLoggerImplTest, LogWithStats) { + setUpLogger(); std::string expected_message_yaml = R"EOF( resource_logs: resource: @@ -192,6 +197,45 @@ TEST_F(GrpcAccessLoggerImplTest, LogWithStats) { .get() .value(), 1); + EXPECT_EQ(stats_store_.findCounterByString("access_logs.open_telemetry_access_log.logs_written") + .value() + .get() + .value(), + 1); +} + +TEST_F(GrpcAccessLoggerImplTest, StatsWithCustomPrefix) { + *config_.mutable_stat_prefix() = "custom."; + setUpLogger(); + grpc_access_logger_impl_test_helper_.expectSentMessage(R"EOF( + resource_logs: + resource: + attributes: + - key: "log_name" + value: + string_value: "test_log_name" + - key: "zone_name" + value: + string_value: "zone_name" + - key: "cluster_name" + value: + string_value: "cluster_name" + - key: "node_name" + value: + string_value: "node_name" + scope_logs: + - log_records: + - severity_text: "test-severity-text" + )EOF"); + opentelemetry::proto::logs::v1::LogRecord entry; + entry.set_severity_text("test-severity-text"); + logger_->log(opentelemetry::proto::logs::v1::LogRecord(entry)); + EXPECT_EQ( + stats_store_.findCounterByString("access_logs.open_telemetry_access_log.custom.logs_written") + .value() + .get() + .value(), + 1); } class GrpcAccessLoggerCacheImplTest : public testing::Test { From a52cc9c59f09aee206c98ffd2638c50a54bc682e Mon Sep 17 00:00:00 2001 From: Xuyang Tao Date: Thu, 16 May 2024 20:55:27 +0000 Subject: [PATCH 2/7] format proto Signed-off-by: Xuyang Tao --- .../access_loggers/open_telemetry/v3/logs_service.proto | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/envoy/extensions/access_loggers/open_telemetry/v3/logs_service.proto b/api/envoy/extensions/access_loggers/open_telemetry/v3/logs_service.proto index 5a38912fb907..1f65aabbba10 100644 --- a/api/envoy/extensions/access_loggers/open_telemetry/v3/logs_service.proto +++ b/api/envoy/extensions/access_loggers/open_telemetry/v3/logs_service.proto @@ -22,7 +22,7 @@ option (udpa.annotations.file_status).package_version_status = ACTIVE; // populate `opentelemetry.proto.collector.v1.logs.ExportLogsServiceRequest.resource_logs `_. // In addition, the request start time is set in the dedicated field. // [#extension: envoy.access_loggers.open_telemetry] -// [#next-free-field: 6] +// [#next-free-field: 7] message OpenTelemetryAccessLogConfig { // [#comment:TODO(itamarkam): add 'filter_state_objects_to_log' to logs.] grpc.v3.CommonGrpcAccessLogConfig common_config = 1 [(validate.rules).message = {required: true}]; @@ -46,7 +46,7 @@ message OpenTelemetryAccessLogConfig { // See 'attributes' in the LogResource proto for more details. // Example: ``attributes { values { key: "user_agent" value { string_value: "%REQ(USER-AGENT)%" } } }``. opentelemetry.proto.common.v1.KeyValueList attributes = 3; - + // Optional prefix to use on OpenTelemetry access logger stats. If empty, the stats will be rooted at // ``access_logs.open_telemetry_access_log.``. If non-empty, stats will be rooted at // ``access_logs.open_telemetry_access_log..``. From c61efb096582b032b4cf681854901053aa4168da Mon Sep 17 00:00:00 2001 From: Xuyang Tao Date: Thu, 16 May 2024 21:00:25 +0000 Subject: [PATCH 3/7] remove duplicate test check Signed-off-by: Xuyang Tao --- .../open_telemetry/grpc_access_log_impl_test.cc | 5 ----- 1 file changed, 5 deletions(-) diff --git a/test/extensions/access_loggers/open_telemetry/grpc_access_log_impl_test.cc b/test/extensions/access_loggers/open_telemetry/grpc_access_log_impl_test.cc index e3241c82f3d0..e9b99bef9a5a 100644 --- a/test/extensions/access_loggers/open_telemetry/grpc_access_log_impl_test.cc +++ b/test/extensions/access_loggers/open_telemetry/grpc_access_log_impl_test.cc @@ -197,11 +197,6 @@ TEST_F(GrpcAccessLoggerImplTest, LogWithStats) { .get() .value(), 1); - EXPECT_EQ(stats_store_.findCounterByString("access_logs.open_telemetry_access_log.logs_written") - .value() - .get() - .value(), - 1); } TEST_F(GrpcAccessLoggerImplTest, StatsWithCustomPrefix) { From f7b1f66b03b3e51307e0201db34dcfd5b016a929 Mon Sep 17 00:00:00 2001 From: Xuyang Tao Date: Thu, 16 May 2024 21:01:43 +0000 Subject: [PATCH 4/7] reformat Signed-off-by: Xuyang Tao --- .../access_loggers/open_telemetry/v3/logs_service.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/envoy/extensions/access_loggers/open_telemetry/v3/logs_service.proto b/api/envoy/extensions/access_loggers/open_telemetry/v3/logs_service.proto index 1f65aabbba10..0e4e89cdb6ac 100644 --- a/api/envoy/extensions/access_loggers/open_telemetry/v3/logs_service.proto +++ b/api/envoy/extensions/access_loggers/open_telemetry/v3/logs_service.proto @@ -47,7 +47,7 @@ message OpenTelemetryAccessLogConfig { // Example: ``attributes { values { key: "user_agent" value { string_value: "%REQ(USER-AGENT)%" } } }``. opentelemetry.proto.common.v1.KeyValueList attributes = 3; - // Optional prefix to use on OpenTelemetry access logger stats. If empty, the stats will be rooted at + // Optional. Additional prefix to use on OpenTelemetry access logger stats. If empty, the stats will be rooted at // ``access_logs.open_telemetry_access_log.``. If non-empty, stats will be rooted at // ``access_logs.open_telemetry_access_log..``. string stat_prefix = 6; From 42d57bee6001f3588e2010ee10d53cc514bfa892 Mon Sep 17 00:00:00 2001 From: Xuyang Tao Date: Fri, 17 May 2024 18:08:49 +0000 Subject: [PATCH 5/7] fix releaselog Signed-off-by: Xuyang Tao --- changelogs/current.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/changelogs/current.yaml b/changelogs/current.yaml index 2a4d1c464585..9d5426f9da78 100644 --- a/changelogs/current.yaml +++ b/changelogs/current.yaml @@ -167,6 +167,11 @@ new_features: change: | Added support to healthcheck with ProxyProtocol in TCP Healthcheck by setting :ref:`health_check_config `. +- area: open_telemetry + change: | + added :ref:`stats_prefix + ` + configuration to support additional stats prefix. deprecated: - area: tracing From dd6b17a77fd96c0c346d7e1e0b668dd3df9ff20e Mon Sep 17 00:00:00 2001 From: Xuyang Tao Date: Fri, 17 May 2024 18:13:34 +0000 Subject: [PATCH 6/7] fix Signed-off-by: Xuyang Tao --- changelogs/current.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/changelogs/current.yaml b/changelogs/current.yaml index 9d5426f9da78..040005d2c833 100644 --- a/changelogs/current.yaml +++ b/changelogs/current.yaml @@ -169,9 +169,9 @@ new_features: :ref:`health_check_config `. - area: open_telemetry change: | - added :ref:`stats_prefix - ` - configuration to support additional stats prefix. + added :ref:`stat_prefix + ` + configuration to support additional stat prefix. deprecated: - area: tracing From 6ab908ba55569c77b5ac811d139e3eb55e1592e6 Mon Sep 17 00:00:00 2001 From: Xuyang Tao Date: Fri, 17 May 2024 18:20:04 +0000 Subject: [PATCH 7/7] fix Signed-off-by: Xuyang Tao --- changelogs/current.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changelogs/current.yaml b/changelogs/current.yaml index 040005d2c833..f51d1a26088b 100644 --- a/changelogs/current.yaml +++ b/changelogs/current.yaml @@ -171,7 +171,7 @@ new_features: change: | added :ref:`stat_prefix ` - configuration to support additional stat prefix. + configuration to support additional stat prefix for the OpenTelemetry logger. deprecated: - area: tracing