diff --git a/google/cloud/internal/grpc_opentelemetry.cc b/google/cloud/internal/grpc_opentelemetry.cc index 34917c46791b2..f5f3ef0bec397 100644 --- a/google/cloud/internal/grpc_opentelemetry.cc +++ b/google/cloud/internal/grpc_opentelemetry.cc @@ -110,12 +110,17 @@ opentelemetry::nostd::shared_ptr MakeSpanGrpc( namespace sc = opentelemetry::semconv; opentelemetry::trace::StartSpanOptions options; options.kind = opentelemetry::trace::SpanKind::kClient; - return internal::MakeSpan( + // OpenTelemetry RPC semantic conventions specify that `rpc.method` should + // be the fully-qualified logical name (e.g. "/") and that + // `rpc.service` is deprecated in favor of it. + // https://opentelemetry.io/docs/specs/semconv/rpc/rpc-spans/ + auto fully_qualified_method = absl::StrCat(absl::string_view{service.data(), service.size()}, "/", - absl::string_view{method.data(), method.size()}), - {{sc::rpc::kRpcSystem, sc::rpc::RpcSystemValues::kGrpc}, - {sc::rpc::kRpcService, service}, - {sc::rpc::kRpcMethod, method}, + absl::string_view{method.data(), method.size()}); + return internal::MakeSpan( + fully_qualified_method, + {{sc::rpc::kRpcSystemName, sc::rpc::RpcSystemNameValues::kGrpc}, + {sc::rpc::kRpcMethod, fully_qualified_method}, {/*sc::kNetworkTransport=*/"network.transport", sc::network::NetworkTransportValues::kTcp}, {"grpc.version", grpc::Version()}}, diff --git a/google/cloud/internal/grpc_opentelemetry_test.cc b/google/cloud/internal/grpc_opentelemetry_test.cc index 2ad4667b69d0a..0719ea768a71c 100644 --- a/google/cloud/internal/grpc_opentelemetry_test.cc +++ b/google/cloud/internal/grpc_opentelemetry_test.cc @@ -68,11 +68,10 @@ TEST(OpenTelemetry, MakeSpanGrpc) { SpanHasInstrumentationScope(), SpanKindIsClient(), SpanNamed("google.cloud.foo.v1.Foo/GetBar"), SpanHasAttributes( - OTelAttribute(sc::rpc::kRpcSystem, - sc::rpc::RpcSystemValues::kGrpc), - OTelAttribute(sc::rpc::kRpcService, - "google.cloud.foo.v1.Foo"), - OTelAttribute(sc::rpc::kRpcMethod, "GetBar"), + OTelAttribute(sc::rpc::kRpcSystemName, + sc::rpc::RpcSystemNameValues::kGrpc), + OTelAttribute(sc::rpc::kRpcMethod, + "google.cloud.foo.v1.Foo/GetBar"), OTelAttribute( /*sc::kNetworkTransport=*/"network.transport", sc::network::NetworkTransportValues::kTcp),