diff --git a/input/otlp/logs_test.go b/input/otlp/logs_test.go index 3e6ebfa2..8f9389da 100644 --- a/input/otlp/logs_test.go +++ b/input/otlp/logs_test.go @@ -624,6 +624,41 @@ func TestConsumerConsumeLogsDataStream(t *testing.T) { } } +func TestLogsInstrumentationLibrary(t *testing.T) { + logs := plog.NewLogs() + resourceLogs := logs.ResourceLogs().AppendEmpty() + resourceAttrs := logs.ResourceLogs().At(0).Resource().Attributes() + resourceAttrs.PutStr(semconv.AttributeTelemetrySDKLanguage, "java") + scopeLogs := resourceLogs.ScopeLogs().AppendEmpty() + timestamp := pcommon.NewTimestampFromTime(time.UnixMilli(946684800000)) + + resourceLogs.ScopeLogs().At(0).Scope().SetName("library-name") + resourceLogs.ScopeLogs().At(0).Scope().SetVersion("1.2.3") + + record1 := newLogRecord("") // no log body + record1.SetTimestamp(timestamp) + record1.CopyTo(scopeLogs.LogRecords().AppendEmpty()) + + var processed modelpb.Batch + var processor modelpb.ProcessBatchFunc = func(_ context.Context, batch *modelpb.Batch) error { + if processed != nil { + panic("already processes batch") + } + processed = batch.Clone() + return nil + } + consumer := otlp.NewConsumer(otlp.ConsumerConfig{ + Processor: processor, + Semaphore: semaphore.NewWeighted(100), + }) + result, err := consumer.ConsumeLogsWithResult(context.Background(), logs) + assert.NoError(t, err) + assert.Equal(t, otlp.ConsumeLogsResult{}, result) + assert.Len(t, processed, 1) + assert.Equal(t, "library-name", processed[0].Service.Framework.Name) + assert.Equal(t, "1.2.3", processed[0].Service.Framework.Version) +} + func TestConsumerConsumeOTelLogsWithTimestamp(t *testing.T) { logs := plog.NewLogs() resourceLogs := logs.ResourceLogs().AppendEmpty() diff --git a/input/otlp/metadata.go b/input/otlp/metadata.go index 4cc0da14..9d864880 100644 --- a/input/otlp/metadata.go +++ b/input/otlp/metadata.go @@ -467,6 +467,15 @@ func translateScopeMetadata(scope pcommon.InstrumentationScope, out *modelpb.APM } return true }) + + if name := scope.Name(); name != "" { + if out.Service == nil { + out.Service = modelpb.ServiceFromVTPool() + } + out.Service.Framework = modelpb.FrameworkFromVTPool() + out.Service.Framework.Name = name + out.Service.Framework.Version = scope.Version() + } } func cleanServiceName(name string) string { diff --git a/input/otlp/metrics_test.go b/input/otlp/metrics_test.go index c8cb9958..4eecef94 100644 --- a/input/otlp/metrics_test.go +++ b/input/otlp/metrics_test.go @@ -882,8 +882,9 @@ func TestConsumeMetricsWithOTelRemapper(t *testing.T) { expected: []*modelpb.APMEvent{ { Service: &modelpb.Service{ - Name: "unknown", - Language: &modelpb.Language{Name: "unknown"}, + Name: "unknown", + Language: &modelpb.Language{Name: "unknown"}, + Framework: &modelpb.Framework{Name: "otelcol/hostmetricsreceiver/load"}, }, Agent: &modelpb.Agent{Name: "otlp", Version: "unknown"}, Timestamp: modelpb.FromTime(ts), @@ -900,8 +901,9 @@ func TestConsumeMetricsWithOTelRemapper(t *testing.T) { }, { Service: &modelpb.Service{ - Name: "unknown", - Language: &modelpb.Language{Name: "unknown"}, + Name: "unknown", + Language: &modelpb.Language{Name: "unknown"}, + Framework: &modelpb.Framework{Name: "otelcol/hostmetricsreceiver/load"}, }, Agent: &modelpb.Agent{Name: "otlp", Version: "unknown"}, Timestamp: modelpb.FromTime(ts), @@ -955,8 +957,9 @@ func TestConsumeMetricsWithOTelRemapper(t *testing.T) { expected: []*modelpb.APMEvent{ { Service: &modelpb.Service{ - Name: "unknown", - Language: &modelpb.Language{Name: "unknown"}, + Name: "unknown", + Language: &modelpb.Language{Name: "unknown"}, + Framework: &modelpb.Framework{Name: "otelcol/hostmetricsreceiver/process"}, }, Agent: &modelpb.Agent{Name: "otlp", Version: "unknown"}, Timestamp: modelpb.FromTime(ts), @@ -979,8 +982,9 @@ func TestConsumeMetricsWithOTelRemapper(t *testing.T) { }, { Service: &modelpb.Service{ - Name: "unknown", - Language: &modelpb.Language{Name: "unknown"}, + Name: "unknown", + Language: &modelpb.Language{Name: "unknown"}, + Framework: &modelpb.Framework{Name: "otelcol/hostmetricsreceiver/process"}, }, Agent: &modelpb.Agent{Name: "otlp", Version: "unknown"}, Timestamp: modelpb.FromTime(ts), diff --git a/input/otlp/traces.go b/input/otlp/traces.go index 01d8c908..ee041c6f 100644 --- a/input/otlp/traces.go +++ b/input/otlp/traces.go @@ -577,15 +577,6 @@ func TranslateTransaction( event.Transaction.Result = spanStatusResult(spanStatus) } - if name := library.Name(); name != "" { - if event.Service == nil { - event.Service = modelpb.ServiceFromVTPool() - } - event.Service.Framework = modelpb.FrameworkFromVTPool() - event.Service.Framework.Name = name - event.Service.Framework.Version = library.Version() - } - // if outcome and result are still not assigned, assign success if event.Event.Outcome == outcomeUnknown { event.Event.Outcome = outcomeSuccess