From a0729bd779306a143a8381ba27cb4fae8f4a8334 Mon Sep 17 00:00:00 2001 From: Greg Kalapos Date: Fri, 28 Feb 2025 18:41:57 +0100 Subject: [PATCH] Add rpc.service for the destination.service.resource calculation --- enrichments/trace/internal/elastic/span.go | 3 +++ .../trace/internal/elastic/span_test.go | 27 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/enrichments/trace/internal/elastic/span.go b/enrichments/trace/internal/elastic/span.go index 4ac174d..f352adf 100644 --- a/enrichments/trace/internal/elastic/span.go +++ b/enrichments/trace/internal/elastic/span.go @@ -463,6 +463,9 @@ func (s *spanEnrichmentContext) setDestinationService(span ptrace.Span) { s.serverAddress, s.serverPort, // fallback ); res != "" { destnResource = res + } else { + // fallback to RPC service + destnResource = s.rpcService } } } diff --git a/enrichments/trace/internal/elastic/span_test.go b/enrichments/trace/internal/elastic/span_test.go index c818db0..591c1a0 100644 --- a/enrichments/trace/internal/elastic/span_test.go +++ b/enrichments/trace/internal/elastic/span_test.go @@ -938,6 +938,33 @@ func TestElasticSpanEnrich(t *testing.T) { elasticattr.SuccessCount: int64(1), }, }, + { + name: "rpc_span_with_only_rpc_sevice_attr", + input: func() ptrace.Span { + span := getElasticSpan() + span.SetName("testspan") + // rpc.service should be used as destination.service.resource + // if no other attributes are present. + span.Attributes().PutStr(semconv25.AttributeRPCService, "myService") + span.Attributes().PutStr(semconv25.AttributeRPCSystem, "grpc") + return span + }(), + config: config.Enabled().Span, + enrichedAttrs: map[string]any{ + elasticattr.TimestampUs: startTs.AsTime().UnixMicro(), + elasticattr.SpanName: "testspan", + elasticattr.ProcessorEvent: "span", + elasticattr.SpanRepresentativeCount: float64(1), + elasticattr.SpanType: "external", + elasticattr.SpanSubtype: "grpc", + elasticattr.SpanDurationUs: expectedDuration.Microseconds(), + elasticattr.EventOutcome: "success", + elasticattr.SuccessCount: int64(1), + elasticattr.ServiceTargetType: "grpc", + elasticattr.ServiceTargetName: "myService", + elasticattr.SpanDestinationServiceResource: "myService", + }, + }, } { t.Run(tc.name, func(t *testing.T) { expectedSpan := ptrace.NewSpan()