[CSM] Update labels (#34412)
Changes -
* Remove `csm.remote_workload_pod_name` and
`csm.remote_workload_container_name`.
* Add `csm.remote_workload_name`, the value for which is sent through
MetadataExchange, from the `CSM_WORKLOAD_NAME` env var. (Note that this
is not added in local labels.)
* Add a local `csm.canonical_service` (@markdroth, please verify the key
that we want here) that is read from `CSM_CANONICAL_SERVICE_NAME` env
var, and we continue to send it over via MetadataExchange
diff --git a/src/cpp/ext/csm/metadata_exchange.cc b/src/cpp/ext/csm/metadata_exchange.cc
index 8329d2b..567de4b 100644
--- a/src/cpp/ext/csm/metadata_exchange.cc
+++ b/src/cpp/ext/csm/metadata_exchange.cc
@@ -59,9 +59,7 @@
// The keys that will be used in the Metadata Exchange between local and remote.
constexpr absl::string_view kMetadataExchangeTypeKey = "type";
-constexpr absl::string_view kMetadataExchangePodNameKey = "pod_name";
-constexpr absl::string_view kMetadataExchangeContainerNameKey =
- "container_name";
+constexpr absl::string_view kMetadataExchangeWorkloadNameKey = "workload_name";
constexpr absl::string_view kMetadataExchangeNamespaceNameKey =
"namespace_name";
constexpr absl::string_view kMetadataExchangeClusterNameKey = "cluster_name";
@@ -70,13 +68,13 @@
constexpr absl::string_view kMetadataExchangeCanonicalServiceKey =
"canonical_service";
// The keys that will be used for the local attributes when recording metrics.
+constexpr absl::string_view kCanonicalServiceAttribute =
+ "csm.workload_canonical_service";
constexpr absl::string_view kMeshIdAttribute = "csm.mesh_id";
// The keys that will be used for the peer attributes when recording metrics.
constexpr absl::string_view kPeerTypeAttribute = "csm.remote_workload_type";
-constexpr absl::string_view kPeerPodNameAttribute =
- "csm.remote_workload_pod_name";
-constexpr absl::string_view kPeerContainerNameAttribute =
- "csm.remote_workload_container_name";
+constexpr absl::string_view kPeerWorkloadNameAttribute =
+ "csm.remote_workload_name";
constexpr absl::string_view kPeerNamespaceNameAttribute =
"csm.remote_workload_namespace_name";
constexpr absl::string_view kPeerClusterNameAttribute =
@@ -270,10 +268,9 @@
google_protobuf_Struct* struct_pb = nullptr;
};
- static constexpr std::array<GkeAttribute, 7> kGkeAttributeList = {
- GkeAttribute{kPeerPodNameAttribute, kMetadataExchangePodNameKey},
- GkeAttribute{kPeerContainerNameAttribute,
- kMetadataExchangeContainerNameKey},
+ static constexpr std::array<GkeAttribute, 6> kGkeAttributeList = {
+ GkeAttribute{kPeerWorkloadNameAttribute,
+ kMetadataExchangeWorkloadNameKey},
GkeAttribute{kPeerNamespaceNameAttribute,
kMetadataExchangeNamespaceNameKey},
GkeAttribute{kPeerClusterNameAttribute, kMetadataExchangeClusterNameKey},
@@ -311,7 +308,7 @@
uint32_t pos_ = 0;
};
-constexpr std::array<MeshLabelsIterable::GkeAttribute, 7>
+constexpr std::array<MeshLabelsIterable::GkeAttribute, 6>
MeshLabelsIterable::kGkeAttributeList;
} // namespace
@@ -348,11 +345,8 @@
// Assume kubernetes for now
absl::string_view type_value = GetStringValueFromAttributeMap(
map, opentelemetry::sdk::resource::SemanticConventions::kCloudPlatform);
- absl::string_view pod_name_value = GetStringValueFromAttributeMap(
- map, opentelemetry::sdk::resource::SemanticConventions::kK8sPodName);
- absl::string_view container_name_value = GetStringValueFromAttributeMap(
- map,
- opentelemetry::sdk::resource::SemanticConventions::kK8sContainerName);
+ std::string workload_name_value =
+ grpc_core::GetEnv("CSM_WORKLOAD_NAME").value_or("unknown");
absl::string_view namespace_value = GetStringValueFromAttributeMap(
map,
opentelemetry::sdk::resource::SemanticConventions::kK8sNamespaceName);
@@ -369,16 +363,14 @@
absl::string_view project_id_value = GetStringValueFromAttributeMap(
map, opentelemetry::sdk::resource::SemanticConventions::kCloudAccountId);
std::string canonical_service_value =
- grpc_core::GetEnv("GSM_CANONICAL_SERVICE_NAME").value_or("unknown");
+ grpc_core::GetEnv("CSM_CANONICAL_SERVICE_NAME").value_or("unknown");
// Create metadata to be sent over wire.
AddStringKeyValueToStructProto(metadata, kMetadataExchangeTypeKey, type_value,
arena.ptr());
// Only handle GKE for now
if (type_value == kGkeType) {
- AddStringKeyValueToStructProto(metadata, kMetadataExchangePodNameKey,
- pod_name_value, arena.ptr());
- AddStringKeyValueToStructProto(metadata, kMetadataExchangeContainerNameKey,
- container_name_value, arena.ptr());
+ AddStringKeyValueToStructProto(metadata, kMetadataExchangeWorkloadNameKey,
+ workload_name_value, arena.ptr());
AddStringKeyValueToStructProto(metadata, kMetadataExchangeNamespaceNameKey,
namespace_value, arena.ptr());
AddStringKeyValueToStructProto(metadata, kMetadataExchangeClusterNameKey,
@@ -399,6 +391,8 @@
absl::Base64Escape(absl::string_view(output, output_length)));
// Fill up local labels map. The rest we get from the detected Resource and
// from the peer.
+ local_labels_.emplace_back(kCanonicalServiceAttribute,
+ canonical_service_value);
local_labels_.emplace_back(kMeshIdAttribute, GetMeshId());
}
diff --git a/test/cpp/ext/csm/metadata_exchange_test.cc b/test/cpp/ext/csm/metadata_exchange_test.cc
index 7f3a6ac..7e202b5 100644
--- a/test/cpp/ext/csm/metadata_exchange_test.cc
+++ b/test/cpp/ext/csm/metadata_exchange_test.cc
@@ -150,18 +150,18 @@
const std::map<std::string,
opentelemetry::sdk::common::OwnedAttributeValue>&
attributes) {
+ EXPECT_EQ(
+ absl::get<std::string>(attributes.at("csm.workload_canonical_service")),
+ "canonical_service");
EXPECT_EQ(absl::get<std::string>(attributes.at("csm.mesh_id")), "mesh-id");
switch (GetParam().type()) {
case TestScenario::ResourceType::kGke:
EXPECT_EQ(
absl::get<std::string>(attributes.at("csm.remote_workload_type")),
"gcp_kubernetes_engine");
- EXPECT_EQ(absl::get<std::string>(
- attributes.at("csm.remote_workload_pod_name")),
- "pod");
- EXPECT_EQ(absl::get<std::string>(
- attributes.at("csm.remote_workload_container_name")),
- "container");
+ EXPECT_EQ(
+ absl::get<std::string>(attributes.at("csm.remote_workload_name")),
+ "workload");
EXPECT_EQ(absl::get<std::string>(
attributes.at("csm.remote_workload_namespace_name")),
"namespace");
@@ -307,6 +307,7 @@
int main(int argc, char** argv) {
grpc::testing::TestEnvironment env(&argc, argv);
::testing::InitGoogleTest(&argc, argv);
- grpc_core::SetEnv("GSM_CANONICAL_SERVICE_NAME", "canonical_service");
+ grpc_core::SetEnv("CSM_WORKLOAD_NAME", "workload");
+ grpc_core::SetEnv("CSM_CANONICAL_SERVICE_NAME", "canonical_service");
return RUN_ALL_TESTS();
}