From 07e395be0019e6512d23f90e86828e5cb3bec636 Mon Sep 17 00:00:00 2001 From: Pablo Baeyens Date: Wed, 20 Dec 2023 15:06:36 +0100 Subject: [PATCH 1/3] [pkg/otlp/attributes] Add attributes.Translator --- .../mx-psi_attributes-translator-add.yaml | 16 +++++ LICENSE-3rdparty.csv | 66 +++++++++++++++-- pkg/inframetadata/go.mod | 17 ++++- pkg/inframetadata/go.sum | 44 +++++++++--- pkg/otlp/attributes/go.mod | 20 +++++- pkg/otlp/attributes/go.sum | 44 +++++++++++- pkg/otlp/attributes/source.go | 1 + pkg/otlp/attributes/translator.go | 71 +++++++++++++++++++ .../translator_test.go} | 50 ++++++------- pkg/otlp/logs/go.sum | 2 + pkg/otlp/metrics/go.mod | 6 +- pkg/otlp/metrics/go.sum | 5 -- pkg/otlp/metrics/metrics_translator.go | 48 +++++-------- pkg/otlp/metrics/statspayload.go | 2 +- 14 files changed, 302 insertions(+), 90 deletions(-) create mode 100755 .chloggen/mx-psi_attributes-translator-add.yaml create mode 100644 pkg/otlp/attributes/translator.go rename pkg/otlp/{metrics/source_test.go => attributes/translator_test.go} (63%) diff --git a/.chloggen/mx-psi_attributes-translator-add.yaml b/.chloggen/mx-psi_attributes-translator-add.yaml new file mode 100755 index 00000000..dd50eada --- /dev/null +++ b/.chloggen/mx-psi_attributes-translator-add.yaml @@ -0,0 +1,16 @@ +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: deprecation + +# The name of the component (e.g. pkg/quantile) +component: pkg/otlp/attributes + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Deprecate SourceFromAttrs in favor of attributes.Translator + +# The PR related to this change +issues: [231] + +# (Optional) One or more lines of additional information to render under the primary note. +# These lines will be padded with 2 spaces and then inserted directly into the document. +# Use pipe (|) for multiline entries. +subtext: diff --git a/LICENSE-3rdparty.csv b/LICENSE-3rdparty.csv index f7793951..24bc75d4 100644 --- a/LICENSE-3rdparty.csv +++ b/LICENSE-3rdparty.csv @@ -31,6 +31,9 @@ pkg/quantile,google.golang.org/protobuf/reflect/protoreflect,BSD-3-Clause,Copyri pkg/quantile,google.golang.org/protobuf/reflect/protoregistry,BSD-3-Clause,Copyright (c) 2018 The Go Authors. All rights reserved pkg/quantile,google.golang.org/protobuf/runtime/protoiface,BSD-3-Clause,Copyright (c) 2018 The Go Authors. All rights reserved pkg/quantile,google.golang.org/protobuf/runtime/protoimpl,BSD-3-Clause,Copyright (c) 2018 The Go Authors. All rights reserved +pkg/otlp/attributes,github.com/go-logr/logr,Apache-2.0,Copyright 2019 The logr Authors. +pkg/otlp/attributes,github.com/go-logr/logr/funcr,Apache-2.0,Copyright 2019 The logr Authors. +pkg/otlp/attributes,github.com/go-logr/stdr,Apache-2.0,Copyright 2019 The logr Authors. pkg/otlp/attributes,github.com/gogo/protobuf/gogoproto,BSD-3-Clause,"Copyright (c) 2013, The GoGo Authors. All rights reserved | Copyright 2010 The Go Authors. All rights reserved | Sendgrid, Inc | Vastech SA (PTY) LTD | Walter Schulze | Anton Povarov | Brian Goff | Clayton Coleman | Denis Smirnov | DongYun Kang | Dwayne Schultz | Georg Apitz | Gustav Paul | Johan Brandhorst | John Shahid | John Tuley | Laurent | Patrick Lee | Peter Edge | Roger Johansson | Sam Nguyen | Sergio Arbeo | Stephen J Day | Tamir Duberstein | Todd Eisenberger | Tormod Erevik Lea | Vyacheslav Kim | Walter Schulze " pkg/otlp/attributes,github.com/gogo/protobuf/proto,BSD-3-Clause,"Copyright (c) 2013, The GoGo Authors. All rights reserved | Copyright 2010 The Go Authors. All rights reserved | Sendgrid, Inc | Vastech SA (PTY) LTD | Walter Schulze | Anton Povarov | Brian Goff | Clayton Coleman | Denis Smirnov | DongYun Kang | Dwayne Schultz | Georg Apitz | Gustav Paul | Johan Brandhorst | John Shahid | John Tuley | Laurent | Patrick Lee | Peter Edge | Roger Johansson | Sam Nguyen | Sergio Arbeo | Stephen J Day | Tamir Duberstein | Todd Eisenberger | Tormod Erevik Lea | Vyacheslav Kim | Walter Schulze " pkg/otlp/attributes,github.com/gogo/protobuf/protoc-gen-gogo/descriptor,BSD-3-Clause,"Copyright (c) 2013, The GoGo Authors. All rights reserved | Copyright 2010 The Go Authors. All rights reserved | Sendgrid, Inc | Vastech SA (PTY) LTD | Walter Schulze | Anton Povarov | Brian Goff | Clayton Coleman | Denis Smirnov | DongYun Kang | Dwayne Schultz | Georg Apitz | Gustav Paul | Johan Brandhorst | John Shahid | John Tuley | Laurent | Patrick Lee | Peter Edge | Roger Johansson | Sam Nguyen | Sergio Arbeo | Stephen J Day | Tamir Duberstein | Todd Eisenberger | Tormod Erevik Lea | Vyacheslav Kim | Walter Schulze " @@ -40,6 +43,18 @@ pkg/otlp/attributes,github.com/golang/protobuf/ptypes,BSD-3-Clause,Copyright 201 pkg/otlp/attributes,github.com/golang/protobuf/ptypes/any,BSD-3-Clause,Copyright 2010 The Go Authors. All rights reserved pkg/otlp/attributes,github.com/golang/protobuf/ptypes/duration,BSD-3-Clause,Copyright 2010 The Go Authors. All rights reserved pkg/otlp/attributes,github.com/golang/protobuf/ptypes/timestamp,BSD-3-Clause,Copyright 2010 The Go Authors. All rights reserved +pkg/otlp/attributes,github.com/hashicorp/go-version,MPL-2.0,"copyright doctrines of fair use, fair dealing, or other equivalents" +pkg/otlp/attributes,github.com/knadh/koanf/maps,MIT,"Copyright (c) 2019, Kailash Nadh. https://github.com/knadh" +pkg/otlp/attributes,github.com/knadh/koanf/providers/confmap,MIT,"Copyright (c) 2019, Kailash Nadh. https://github.com/knadh" +pkg/otlp/attributes,github.com/knadh/koanf/v2,MIT,"Copyright (c) 2019, Kailash Nadh. https://github.com/knadh" +pkg/otlp/attributes,github.com/mitchellh/copystructure,MIT,Copyright (c) 2014 Mitchell Hashimoto +pkg/otlp/attributes,github.com/mitchellh/mapstructure,MIT,Copyright (c) 2013 Mitchell Hashimoto +pkg/otlp/attributes,github.com/mitchellh/reflectwalk,MIT,Copyright (c) 2013 Mitchell Hashimoto +pkg/otlp/attributes,go.opentelemetry.io/collector/component,Apache-2.0,Copyright The OpenTelemetry Authors +pkg/otlp/attributes,go.opentelemetry.io/collector/config/configtelemetry,Apache-2.0,Copyright The OpenTelemetry Authors +pkg/otlp/attributes,go.opentelemetry.io/collector/confmap,Apache-2.0,Copyright The OpenTelemetry Authors +pkg/otlp/attributes,go.opentelemetry.io/collector/confmap/internal/mapstructure,Apache-2.0,Copyright The OpenTelemetry Authors +pkg/otlp/attributes,go.opentelemetry.io/collector/featuregate,Apache-2.0,Copyright The OpenTelemetry Authors pkg/otlp/attributes,go.opentelemetry.io/collector/pdata/internal,Apache-2.0,Copyright The OpenTelemetry Authors pkg/otlp/attributes,go.opentelemetry.io/collector/pdata/internal/data,Apache-2.0,Copyright The OpenTelemetry Authors pkg/otlp/attributes,go.opentelemetry.io/collector/pdata/internal/data/protogen/collector/logs/v1,Apache-2.0,Copyright The OpenTelemetry Authors @@ -52,7 +67,29 @@ pkg/otlp/attributes,go.opentelemetry.io/collector/pdata/internal/data/protogen/r pkg/otlp/attributes,go.opentelemetry.io/collector/pdata/internal/data/protogen/trace/v1,Apache-2.0,Copyright The OpenTelemetry Authors pkg/otlp/attributes,go.opentelemetry.io/collector/pdata/pcommon,Apache-2.0,Copyright The OpenTelemetry Authors pkg/otlp/attributes,go.opentelemetry.io/collector/semconv/v1.6.1,Apache-2.0,Copyright The OpenTelemetry Authors +pkg/otlp/attributes,go.opentelemetry.io/otel/attribute,Apache-2.0,Copyright The OpenTelemetry Authors +pkg/otlp/attributes,go.opentelemetry.io/otel/baggage,Apache-2.0,Copyright The OpenTelemetry Authors +pkg/otlp/attributes,go.opentelemetry.io/otel/codes,Apache-2.0,Copyright The OpenTelemetry Authors +pkg/otlp/attributes,go.opentelemetry.io/otel/internal,Apache-2.0,Copyright The OpenTelemetry Authors +pkg/otlp/attributes,go.opentelemetry.io/otel/internal/attribute,Apache-2.0,Copyright The OpenTelemetry Authors +pkg/otlp/attributes,go.opentelemetry.io/otel/internal/baggage,Apache-2.0,Copyright The OpenTelemetry Authors +pkg/otlp/attributes,go.opentelemetry.io/otel/metric,Apache-2.0,Copyright The OpenTelemetry Authors +pkg/otlp/attributes,go.opentelemetry.io/otel/metric/embedded,Apache-2.0,Copyright The OpenTelemetry Authors +pkg/otlp/attributes,go.opentelemetry.io/otel/metric/noop,Apache-2.0,Copyright The OpenTelemetry Authors +pkg/otlp/attributes,go.opentelemetry.io/otel/propagation,Apache-2.0,Copyright The OpenTelemetry Authors +pkg/otlp/attributes,go.opentelemetry.io/otel/trace,Apache-2.0,Copyright The OpenTelemetry Authors +pkg/otlp/attributes,go.opentelemetry.io/otel/trace/embedded,Apache-2.0,Copyright The OpenTelemetry Authors +pkg/otlp/attributes,go.opentelemetry.io/otel/trace/noop,Apache-2.0,Copyright The OpenTelemetry Authors pkg/otlp/attributes,go.uber.org/multierr,MIT,"Copyright (c) 2017-2021 Uber Technologies, Inc" +pkg/otlp/attributes,go.uber.org/zap,MIT,"Copyright (c) 2016-2017 Uber Technologies, Inc" +pkg/otlp/attributes,go.uber.org/zap/buffer,MIT,"Copyright (c) 2016-2017 Uber Technologies, Inc" +pkg/otlp/attributes,go.uber.org/zap/internal,MIT,"Copyright (c) 2016-2017 Uber Technologies, Inc" +pkg/otlp/attributes,go.uber.org/zap/internal/bufferpool,MIT,"Copyright (c) 2016-2017 Uber Technologies, Inc" +pkg/otlp/attributes,go.uber.org/zap/internal/color,MIT,"Copyright (c) 2016-2017 Uber Technologies, Inc" +pkg/otlp/attributes,go.uber.org/zap/internal/exit,MIT,"Copyright (c) 2016-2017 Uber Technologies, Inc" +pkg/otlp/attributes,go.uber.org/zap/internal/pool,MIT,"Copyright (c) 2016-2017 Uber Technologies, Inc" +pkg/otlp/attributes,go.uber.org/zap/internal/stacktrace,MIT,"Copyright (c) 2016-2017 Uber Technologies, Inc" +pkg/otlp/attributes,go.uber.org/zap/zapcore,MIT,"Copyright (c) 2016-2017 Uber Technologies, Inc" pkg/otlp/attributes,golang.org/x/net/http/httpguts,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved pkg/otlp/attributes,golang.org/x/net/http2,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved pkg/otlp/attributes,golang.org/x/net/http2/hpack,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved @@ -161,9 +198,6 @@ pkg/otlp/metrics,github.com/DataDog/sketches-go/ddsketch/pb/sketchpb,Apache-2.0, pkg/otlp/metrics,github.com/DataDog/sketches-go/ddsketch/stat,Apache-2.0,"Copyright 2021 DataDog, Inc | Copyright 2021 Datadog, Inc" pkg/otlp/metrics,github.com/DataDog/sketches-go/ddsketch/store,Apache-2.0,"Copyright 2021 DataDog, Inc | Copyright 2021 Datadog, Inc" pkg/otlp/metrics,github.com/dustin/go-humanize,MIT,Copyright (c) 2005-2008 Dustin Sallings -pkg/otlp/metrics,github.com/go-logr/logr,Apache-2.0,Copyright 2019 The logr Authors. -pkg/otlp/metrics,github.com/go-logr/logr/funcr,Apache-2.0,Copyright 2019 The logr Authors. -pkg/otlp/metrics,github.com/go-logr/stdr,Apache-2.0,Copyright 2019 The logr Authors. pkg/otlp/metrics,github.com/gogo/protobuf/gogoproto,BSD-3-Clause,"Copyright (c) 2013, The GoGo Authors. All rights reserved | Copyright 2010 The Go Authors. All rights reserved | Sendgrid, Inc | Vastech SA (PTY) LTD | Walter Schulze | Anton Povarov | Brian Goff | Clayton Coleman | Denis Smirnov | DongYun Kang | Dwayne Schultz | Georg Apitz | Gustav Paul | Johan Brandhorst | John Shahid | John Tuley | Laurent | Patrick Lee | Peter Edge | Roger Johansson | Sam Nguyen | Sergio Arbeo | Stephen J Day | Tamir Duberstein | Todd Eisenberger | Tormod Erevik Lea | Vyacheslav Kim | Walter Schulze " pkg/otlp/metrics,github.com/gogo/protobuf/jsonpb,BSD-3-Clause,"Copyright (c) 2013, The GoGo Authors. All rights reserved | Copyright 2010 The Go Authors. All rights reserved | Sendgrid, Inc | Vastech SA (PTY) LTD | Walter Schulze | Anton Povarov | Brian Goff | Clayton Coleman | Denis Smirnov | DongYun Kang | Dwayne Schultz | Georg Apitz | Gustav Paul | Johan Brandhorst | John Shahid | John Tuley | Laurent | Patrick Lee | Peter Edge | Roger Johansson | Sam Nguyen | Sergio Arbeo | Stephen J Day | Tamir Duberstein | Todd Eisenberger | Tormod Erevik Lea | Vyacheslav Kim | Walter Schulze " pkg/otlp/metrics,github.com/gogo/protobuf/proto,BSD-3-Clause,"Copyright (c) 2013, The GoGo Authors. All rights reserved | Copyright 2010 The Go Authors. All rights reserved | Sendgrid, Inc | Vastech SA (PTY) LTD | Walter Schulze | Anton Povarov | Brian Goff | Clayton Coleman | Denis Smirnov | DongYun Kang | Dwayne Schultz | Georg Apitz | Gustav Paul | Johan Brandhorst | John Shahid | John Tuley | Laurent | Patrick Lee | Peter Edge | Roger Johansson | Sam Nguyen | Sergio Arbeo | Stephen J Day | Tamir Duberstein | Todd Eisenberger | Tormod Erevik Lea | Vyacheslav Kim | Walter Schulze " @@ -210,15 +244,12 @@ pkg/otlp/metrics,go.opentelemetry.io/collector/pdata/pcommon,Apache-2.0,Copyrigh pkg/otlp/metrics,go.opentelemetry.io/collector/pdata/pmetric,Apache-2.0,Copyright The OpenTelemetry Authors pkg/otlp/metrics,go.opentelemetry.io/collector/semconv/v1.6.1,Apache-2.0,Copyright The OpenTelemetry Authors pkg/otlp/metrics,go.opentelemetry.io/otel/attribute,Apache-2.0,Copyright The OpenTelemetry Authors -pkg/otlp/metrics,go.opentelemetry.io/otel/baggage,Apache-2.0,Copyright The OpenTelemetry Authors pkg/otlp/metrics,go.opentelemetry.io/otel/codes,Apache-2.0,Copyright The OpenTelemetry Authors pkg/otlp/metrics,go.opentelemetry.io/otel/internal,Apache-2.0,Copyright The OpenTelemetry Authors pkg/otlp/metrics,go.opentelemetry.io/otel/internal/attribute,Apache-2.0,Copyright The OpenTelemetry Authors -pkg/otlp/metrics,go.opentelemetry.io/otel/internal/baggage,Apache-2.0,Copyright The OpenTelemetry Authors pkg/otlp/metrics,go.opentelemetry.io/otel/metric,Apache-2.0,Copyright The OpenTelemetry Authors pkg/otlp/metrics,go.opentelemetry.io/otel/metric/embedded,Apache-2.0,Copyright The OpenTelemetry Authors pkg/otlp/metrics,go.opentelemetry.io/otel/metric/noop,Apache-2.0,Copyright The OpenTelemetry Authors -pkg/otlp/metrics,go.opentelemetry.io/otel/propagation,Apache-2.0,Copyright The OpenTelemetry Authors pkg/otlp/metrics,go.opentelemetry.io/otel/trace,Apache-2.0,Copyright The OpenTelemetry Authors pkg/otlp/metrics,go.opentelemetry.io/otel/trace/embedded,Apache-2.0,Copyright The OpenTelemetry Authors pkg/otlp/metrics,go.opentelemetry.io/otel/trace/noop,Apache-2.0,Copyright The OpenTelemetry Authors @@ -345,12 +376,24 @@ pkg/inframetadata,github.com/golang/protobuf/ptypes,BSD-3-Clause,Copyright 2010 pkg/inframetadata,github.com/golang/protobuf/ptypes/any,BSD-3-Clause,Copyright 2010 The Go Authors. All rights reserved pkg/inframetadata,github.com/golang/protobuf/ptypes/duration,BSD-3-Clause,Copyright 2010 The Go Authors. All rights reserved pkg/inframetadata,github.com/golang/protobuf/ptypes/timestamp,BSD-3-Clause,Copyright 2010 The Go Authors. All rights reserved +pkg/inframetadata,github.com/hashicorp/go-version,MPL-2.0,"copyright doctrines of fair use, fair dealing, or other equivalents" pkg/inframetadata,github.com/json-iterator/go,MIT,Copyright (c) 2016 json-iterator +pkg/inframetadata,github.com/knadh/koanf/maps,MIT,"Copyright (c) 2019, Kailash Nadh. https://github.com/knadh" +pkg/inframetadata,github.com/knadh/koanf/providers/confmap,MIT,"Copyright (c) 2019, Kailash Nadh. https://github.com/knadh" +pkg/inframetadata,github.com/knadh/koanf/v2,MIT,"Copyright (c) 2019, Kailash Nadh. https://github.com/knadh" +pkg/inframetadata,github.com/mitchellh/copystructure,MIT,Copyright (c) 2014 Mitchell Hashimoto +pkg/inframetadata,github.com/mitchellh/mapstructure,MIT,Copyright (c) 2013 Mitchell Hashimoto +pkg/inframetadata,github.com/mitchellh/reflectwalk,MIT,Copyright (c) 2013 Mitchell Hashimoto pkg/inframetadata,github.com/modern-go/concurrent,Apache-2.0,Copyright (c) 2018 Tao Wen pkg/inframetadata,github.com/modern-go/reflect2,Apache-2.0,Copyright (c) 2018 Tao Wen pkg/inframetadata,github.com/pmezard/go-difflib/difflib,BSD-3-Clause,"Copyright (c) 2013, Patrick Mezard" pkg/inframetadata,github.com/stretchr/testify/assert,MIT,"Copyright (c) 2012-2020 Mat Ryer, Tyler Bunnell and contributors" pkg/inframetadata,github.com/stretchr/testify/require,MIT,"Copyright (c) 2012-2020 Mat Ryer, Tyler Bunnell and contributors" +pkg/inframetadata,go.opentelemetry.io/collector/component,Apache-2.0,Copyright The OpenTelemetry Authors +pkg/inframetadata,go.opentelemetry.io/collector/config/configtelemetry,Apache-2.0,Copyright The OpenTelemetry Authors +pkg/inframetadata,go.opentelemetry.io/collector/confmap,Apache-2.0,Copyright The OpenTelemetry Authors +pkg/inframetadata,go.opentelemetry.io/collector/confmap/internal/mapstructure,Apache-2.0,Copyright The OpenTelemetry Authors +pkg/inframetadata,go.opentelemetry.io/collector/featuregate,Apache-2.0,Copyright The OpenTelemetry Authors pkg/inframetadata,go.opentelemetry.io/collector/pdata/internal,Apache-2.0,Copyright The OpenTelemetry Authors pkg/inframetadata,go.opentelemetry.io/collector/pdata/internal/data,Apache-2.0,Copyright The OpenTelemetry Authors pkg/inframetadata,go.opentelemetry.io/collector/pdata/internal/data/protogen/collector/logs/v1,Apache-2.0,Copyright The OpenTelemetry Authors @@ -367,7 +410,14 @@ pkg/inframetadata,go.opentelemetry.io/collector/pdata/pcommon,Apache-2.0,Copyrig pkg/inframetadata,go.opentelemetry.io/collector/pdata/pmetric,Apache-2.0,Copyright The OpenTelemetry Authors pkg/inframetadata,go.opentelemetry.io/collector/semconv/v1.18.0,Apache-2.0,Copyright The OpenTelemetry Authors pkg/inframetadata,go.opentelemetry.io/collector/semconv/v1.6.1,Apache-2.0,Copyright The OpenTelemetry Authors -pkg/inframetadata,go.uber.org/atomic,MIT,"Copyright (c) 2016 Uber Technologies, Inc" +pkg/inframetadata,go.opentelemetry.io/otel/attribute,Apache-2.0,Copyright The OpenTelemetry Authors +pkg/inframetadata,go.opentelemetry.io/otel/codes,Apache-2.0,Copyright The OpenTelemetry Authors +pkg/inframetadata,go.opentelemetry.io/otel/internal,Apache-2.0,Copyright The OpenTelemetry Authors +pkg/inframetadata,go.opentelemetry.io/otel/internal/attribute,Apache-2.0,Copyright The OpenTelemetry Authors +pkg/inframetadata,go.opentelemetry.io/otel/metric,Apache-2.0,Copyright The OpenTelemetry Authors +pkg/inframetadata,go.opentelemetry.io/otel/metric/embedded,Apache-2.0,Copyright The OpenTelemetry Authors +pkg/inframetadata,go.opentelemetry.io/otel/trace,Apache-2.0,Copyright The OpenTelemetry Authors +pkg/inframetadata,go.opentelemetry.io/otel/trace/embedded,Apache-2.0,Copyright The OpenTelemetry Authors pkg/inframetadata,go.uber.org/multierr,MIT,"Copyright (c) 2017-2021 Uber Technologies, Inc" pkg/inframetadata,go.uber.org/zap,MIT,"Copyright (c) 2016-2017 Uber Technologies, Inc" pkg/inframetadata,go.uber.org/zap/buffer,MIT,"Copyright (c) 2016-2017 Uber Technologies, Inc" @@ -375,6 +425,8 @@ pkg/inframetadata,go.uber.org/zap/internal,MIT,"Copyright (c) 2016-2017 Uber Tec pkg/inframetadata,go.uber.org/zap/internal/bufferpool,MIT,"Copyright (c) 2016-2017 Uber Technologies, Inc" pkg/inframetadata,go.uber.org/zap/internal/color,MIT,"Copyright (c) 2016-2017 Uber Technologies, Inc" pkg/inframetadata,go.uber.org/zap/internal/exit,MIT,"Copyright (c) 2016-2017 Uber Technologies, Inc" +pkg/inframetadata,go.uber.org/zap/internal/pool,MIT,"Copyright (c) 2016-2017 Uber Technologies, Inc" +pkg/inframetadata,go.uber.org/zap/internal/stacktrace,MIT,"Copyright (c) 2016-2017 Uber Technologies, Inc" pkg/inframetadata,go.uber.org/zap/zapcore,MIT,"Copyright (c) 2016-2017 Uber Technologies, Inc" pkg/inframetadata,golang.org/x/net/http/httpguts,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved pkg/inframetadata,golang.org/x/net/http2,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved diff --git a/pkg/inframetadata/go.mod b/pkg/inframetadata/go.mod index 1bb2523a..99d85939 100644 --- a/pkg/inframetadata/go.mod +++ b/pkg/inframetadata/go.mod @@ -8,18 +8,31 @@ require ( go.opentelemetry.io/collector/pdata v1.0.0 go.opentelemetry.io/collector/semconv v0.91.0 go.uber.org/multierr v1.11.0 - go.uber.org/zap v1.24.0 + go.uber.org/zap v1.26.0 ) require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/protobuf v1.5.3 // indirect + github.com/hashicorp/go-version v1.6.0 // indirect github.com/json-iterator/go v1.1.12 // indirect + github.com/knadh/koanf/maps v0.1.1 // indirect + github.com/knadh/koanf/providers/confmap v0.1.0 // indirect + github.com/knadh/koanf/v2 v2.0.1 // indirect + github.com/mitchellh/copystructure v1.2.0 // indirect + github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect + github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - go.uber.org/atomic v1.7.0 // indirect + go.opentelemetry.io/collector/component v0.91.0 // indirect + go.opentelemetry.io/collector/config/configtelemetry v0.91.0 // indirect + go.opentelemetry.io/collector/confmap v0.91.0 // indirect + go.opentelemetry.io/collector/featuregate v1.0.0 // indirect + go.opentelemetry.io/otel v1.21.0 // indirect + go.opentelemetry.io/otel/metric v1.21.0 // indirect + go.opentelemetry.io/otel/trace v1.21.0 // indirect golang.org/x/net v0.18.0 // indirect golang.org/x/sys v0.14.0 // indirect golang.org/x/text v0.14.0 // indirect diff --git a/pkg/inframetadata/go.sum b/pkg/inframetadata/go.sum index 6cb52b3f..7b9821b0 100644 --- a/pkg/inframetadata/go.sum +++ b/pkg/inframetadata/go.sum @@ -1,27 +1,41 @@ -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= +github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NIs= +github.com/knadh/koanf/maps v0.1.1/go.mod h1:npD/QZY3V6ghQDdcQzl1W4ICNVTkohC8E73eI2xW4yI= +github.com/knadh/koanf/providers/confmap v0.1.0 h1:gOkxhHkemwG4LezxxN8DMOFopOPghxRVp7JbIvdvqzU= +github.com/knadh/koanf/providers/confmap v0.1.0/go.mod h1:2uLhxQzJnyHKfxG927awZC7+fyHFdQkd697K4MdLnIU= +github.com/knadh/koanf/v2 v2.0.1 h1:1dYGITt1I23x8cfx8ZnldtezdyaZtfAuRtIFOiRzK7g= +github.com/knadh/koanf/v2 v2.0.1/go.mod h1:ZeiIlIDXTE7w1lMT6UVcNiRAS2/rCeLn/GdLNvY1Dus= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= +github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= +github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY= +github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= +github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= @@ -31,17 +45,31 @@ github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcU github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.opentelemetry.io/collector/component v0.91.0 h1:aBT1i2zGyfh9PalYJLfXVvQp+osHyalwyDFselI1CtA= +go.opentelemetry.io/collector/component v0.91.0/go.mod h1:2KBHvjNFdU7oOjsObQeC4Ta2Ef607OISU5obznW00fw= +go.opentelemetry.io/collector/config/configtelemetry v0.91.0 h1:mEwvqrYfwUJ7LwYfpcF9M8z7LHFoYaKhEPhnERD/88E= +go.opentelemetry.io/collector/config/configtelemetry v0.91.0/go.mod h1:+LAXM5WFMW/UbTlAuSs6L/W72WC+q8TBJt/6z39FPOU= +go.opentelemetry.io/collector/confmap v0.91.0 h1:7U2MT+u74oEzq/WWrpXSLKB7nX5jPNC4drwtQdYfwKk= +go.opentelemetry.io/collector/confmap v0.91.0/go.mod h1:uxV+fZ85kG31oovL6Cl3fAMQ3RRPwUvfAbbA9WT1Yhk= +go.opentelemetry.io/collector/featuregate v1.0.0 h1:5MGqe2v5zxaoo73BUOvUTunftX5J8RGrbFsC2Ha7N3g= +go.opentelemetry.io/collector/featuregate v1.0.0/go.mod h1:xGbRuw+GbutRtVVSEy3YR2yuOlEyiUMhN2M9DJljgqY= go.opentelemetry.io/collector/pdata v1.0.0 h1:ECP2jnLztewsHmL1opL8BeMtWVc7/oSlKNhfY9jP8ec= go.opentelemetry.io/collector/pdata v1.0.0/go.mod h1:TsDFgs4JLNG7t6x9D8kGswXUz4mme+MyNChHx8zSF6k= go.opentelemetry.io/collector/semconv v0.91.0 h1:TRd+yDDfKQl+aNtS24wmEbJp1/QE/xAFV9SB5zWGxpE= go.opentelemetry.io/collector/semconv v0.91.0/go.mod h1:j/8THcqVxFna1FpvA2zYIsUperEtOaRaqoLYIN4doWw= -go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= +go.opentelemetry.io/otel v1.21.0 h1:hzLeKBZEL7Okw2mGzZ0cc4k/A7Fta0uoPgaJCr8fsFc= +go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo= +go.opentelemetry.io/otel/metric v1.21.0 h1:tlYWfeo+Bocx5kLEloTjbcDwBuELRrIFxwdQ36PlJu4= +go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM= +go.opentelemetry.io/otel/sdk v1.21.0 h1:FTt8qirL1EysG6sTQRZ5TokkU8d0ugCj8htOgThZXQ8= +go.opentelemetry.io/otel/sdk/metric v1.21.0 h1:smhI5oD714d6jHE6Tie36fPx4WDFIg+Y6RfAY4ICcR0= +go.opentelemetry.io/otel/trace v1.21.0 h1:WD9i5gzvoUPuXIXH24ZNBudiarZDKuekPqi/E8fpfLc= +go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ= +go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= -go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= +go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= +go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= diff --git a/pkg/otlp/attributes/go.mod b/pkg/otlp/attributes/go.mod index e97aa251..9f73334f 100644 --- a/pkg/otlp/attributes/go.mod +++ b/pkg/otlp/attributes/go.mod @@ -4,17 +4,35 @@ go 1.20 require ( github.com/stretchr/testify v1.8.4 + go.opentelemetry.io/collector/component v0.91.0 go.opentelemetry.io/collector/pdata v1.0.0 go.opentelemetry.io/collector/semconv v0.91.0 + go.opentelemetry.io/otel v1.21.0 + go.opentelemetry.io/otel/metric v1.21.0 + go.opentelemetry.io/otel/sdk/metric v1.21.0 ) require ( github.com/davecgh/go-spew v1.1.1 // indirect + github.com/go-logr/logr v1.3.0 // indirect + github.com/go-logr/stdr v1.2.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/protobuf v1.5.3 // indirect - github.com/kr/text v0.2.0 // indirect + github.com/hashicorp/go-version v1.6.0 // indirect + github.com/knadh/koanf/maps v0.1.1 // indirect + github.com/knadh/koanf/providers/confmap v0.1.0 // indirect + github.com/knadh/koanf/v2 v2.0.1 // indirect + github.com/mitchellh/copystructure v1.2.0 // indirect + github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect + github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect + go.opentelemetry.io/collector/config/configtelemetry v0.91.0 // indirect + go.opentelemetry.io/collector/confmap v0.91.0 // indirect + go.opentelemetry.io/collector/featuregate v1.0.0 // indirect + go.opentelemetry.io/otel/sdk v1.21.0 // indirect + go.opentelemetry.io/otel/trace v1.21.0 // indirect go.uber.org/multierr v1.11.0 // indirect + go.uber.org/zap v1.26.0 // indirect golang.org/x/net v0.18.0 // indirect golang.org/x/sys v0.14.0 // indirect golang.org/x/text v0.14.0 // indirect diff --git a/pkg/otlp/attributes/go.sum b/pkg/otlp/attributes/go.sum index 4bf295e0..f8fc17bc 100644 --- a/pkg/otlp/attributes/go.sum +++ b/pkg/otlp/attributes/go.sum @@ -1,18 +1,35 @@ -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= +github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= +github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NIs= +github.com/knadh/koanf/maps v0.1.1/go.mod h1:npD/QZY3V6ghQDdcQzl1W4ICNVTkohC8E73eI2xW4yI= +github.com/knadh/koanf/providers/confmap v0.1.0 h1:gOkxhHkemwG4LezxxN8DMOFopOPghxRVp7JbIvdvqzU= +github.com/knadh/koanf/providers/confmap v0.1.0/go.mod h1:2uLhxQzJnyHKfxG927awZC7+fyHFdQkd697K4MdLnIU= +github.com/knadh/koanf/v2 v2.0.1 h1:1dYGITt1I23x8cfx8ZnldtezdyaZtfAuRtIFOiRzK7g= +github.com/knadh/koanf/v2 v2.0.1/go.mod h1:ZeiIlIDXTE7w1lMT6UVcNiRAS2/rCeLn/GdLNvY1Dus= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= +github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= +github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY= +github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= +github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= @@ -20,12 +37,33 @@ github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcU github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.opentelemetry.io/collector/component v0.91.0 h1:aBT1i2zGyfh9PalYJLfXVvQp+osHyalwyDFselI1CtA= +go.opentelemetry.io/collector/component v0.91.0/go.mod h1:2KBHvjNFdU7oOjsObQeC4Ta2Ef607OISU5obznW00fw= +go.opentelemetry.io/collector/config/configtelemetry v0.91.0 h1:mEwvqrYfwUJ7LwYfpcF9M8z7LHFoYaKhEPhnERD/88E= +go.opentelemetry.io/collector/config/configtelemetry v0.91.0/go.mod h1:+LAXM5WFMW/UbTlAuSs6L/W72WC+q8TBJt/6z39FPOU= +go.opentelemetry.io/collector/confmap v0.91.0 h1:7U2MT+u74oEzq/WWrpXSLKB7nX5jPNC4drwtQdYfwKk= +go.opentelemetry.io/collector/confmap v0.91.0/go.mod h1:uxV+fZ85kG31oovL6Cl3fAMQ3RRPwUvfAbbA9WT1Yhk= +go.opentelemetry.io/collector/featuregate v1.0.0 h1:5MGqe2v5zxaoo73BUOvUTunftX5J8RGrbFsC2Ha7N3g= +go.opentelemetry.io/collector/featuregate v1.0.0/go.mod h1:xGbRuw+GbutRtVVSEy3YR2yuOlEyiUMhN2M9DJljgqY= go.opentelemetry.io/collector/pdata v1.0.0 h1:ECP2jnLztewsHmL1opL8BeMtWVc7/oSlKNhfY9jP8ec= go.opentelemetry.io/collector/pdata v1.0.0/go.mod h1:TsDFgs4JLNG7t6x9D8kGswXUz4mme+MyNChHx8zSF6k= go.opentelemetry.io/collector/semconv v0.91.0 h1:TRd+yDDfKQl+aNtS24wmEbJp1/QE/xAFV9SB5zWGxpE= go.opentelemetry.io/collector/semconv v0.91.0/go.mod h1:j/8THcqVxFna1FpvA2zYIsUperEtOaRaqoLYIN4doWw= +go.opentelemetry.io/otel v1.21.0 h1:hzLeKBZEL7Okw2mGzZ0cc4k/A7Fta0uoPgaJCr8fsFc= +go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo= +go.opentelemetry.io/otel/metric v1.21.0 h1:tlYWfeo+Bocx5kLEloTjbcDwBuELRrIFxwdQ36PlJu4= +go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM= +go.opentelemetry.io/otel/sdk v1.21.0 h1:FTt8qirL1EysG6sTQRZ5TokkU8d0ugCj8htOgThZXQ8= +go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E= +go.opentelemetry.io/otel/sdk/metric v1.21.0 h1:smhI5oD714d6jHE6Tie36fPx4WDFIg+Y6RfAY4ICcR0= +go.opentelemetry.io/otel/sdk/metric v1.21.0/go.mod h1:FJ8RAsoPGv/wYMgBdUJXOm+6pzFY3YdljnXtv1SBE8Q= +go.opentelemetry.io/otel/trace v1.21.0 h1:WD9i5gzvoUPuXIXH24ZNBudiarZDKuekPqi/E8fpfLc= +go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ= +go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= +go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= diff --git a/pkg/otlp/attributes/source.go b/pkg/otlp/attributes/source.go index 4c1d7fd4..abba0808 100644 --- a/pkg/otlp/attributes/source.go +++ b/pkg/otlp/attributes/source.go @@ -144,6 +144,7 @@ func unsanitizedHostnameFromAttributes(attrs pcommon.Map) (string, bool) { } // SourceFromAttrs gets a telemetry signal source from its attributes. +// Deprecated: Use Translator.ResourceToSource or Translator.AttributesToSource instead. func SourceFromAttrs(attrs pcommon.Map) (source.Source, bool) { if launchType, ok := attrs.Get(conventions.AttributeAWSECSLaunchtype); ok && launchType.Str() == conventions.AttributeAWSECSLaunchtypeFargate { if taskARN, ok := attrs.Get(conventions.AttributeAWSECSTaskARN); ok { diff --git a/pkg/otlp/attributes/translator.go b/pkg/otlp/attributes/translator.go new file mode 100644 index 00000000..cea1fc4c --- /dev/null +++ b/pkg/otlp/attributes/translator.go @@ -0,0 +1,71 @@ +// Copyright OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package attributes + +import ( + "context" + "fmt" + + "go.opentelemetry.io/collector/component" + "go.opentelemetry.io/collector/pdata/pcommon" + "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/metric" + + "github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes/source" +) + +const missingSourceMetricName string = "datadog.otlp_translator.resources.missing_source" + +// Translator of attributes. +type Translator struct { + missingSources metric.Int64Counter +} + +// NewTranslator returns a new attributes translator. +func NewTranslator(set component.TelemetrySettings) (*Translator, error) { + meter := set.MeterProvider.Meter("github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes") + missingSources, err := meter.Int64Counter( + missingSourceMetricName, + metric.WithDescription("OTLP resources that are missing a source (e.g. hostname)"), + metric.WithUnit("{resource}"), + ) + if err != nil { + return nil, fmt.Errorf("failed to build missing source counter: %w", err) + } + + return &Translator{ + missingSources: missingSources, + }, nil +} + +// ResourceToSource gets a telemetry signal source from its resource attributes. +func (p *Translator) ResourceToSource(ctx context.Context, res pcommon.Resource, set attribute.Set) (source.Source, bool) { + src, ok := SourceFromAttrs(res.Attributes()) + if !ok { + p.missingSources.Add(ctx, 1, metric.WithAttributeSet(set)) + } + + return src, ok +} + +// AttributesToSource gets a telemetry signal source from a set of attributes. +// As opposed to ResourceToSource, this does not keep track of failed requests. +// +// NOTE: This method SHOULD NOT generally be used: it is only used in the logs implementation +// because of a fallback logic that will be removed. The attributes detected are resource attributes, +// not attributes from a telemetry signal. +func (p *Translator) AttributesToSource(_ context.Context, attrs pcommon.Map) (source.Source, bool) { + return SourceFromAttrs(attrs) +} diff --git a/pkg/otlp/metrics/source_test.go b/pkg/otlp/attributes/translator_test.go similarity index 63% rename from pkg/otlp/metrics/source_test.go rename to pkg/otlp/attributes/translator_test.go index 4e2f2402..980d780d 100644 --- a/pkg/otlp/metrics/source_test.go +++ b/pkg/otlp/attributes/translator_test.go @@ -3,7 +3,7 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2022-present Datadog, Inc. -package metrics +package attributes import ( "context" @@ -12,6 +12,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "go.opentelemetry.io/collector/component/componenttest" + "go.opentelemetry.io/collector/pdata/pcommon" + "go.opentelemetry.io/otel/attribute" sdkmetric "go.opentelemetry.io/otel/sdk/metric" "go.opentelemetry.io/otel/sdk/metric/metricdata" ) @@ -53,32 +55,26 @@ func AssertHasSumMetric[N int64 | float64](t *testing.T, rm *metricdata.Resource } func TestInternalTelemetryMetrics(t *testing.T) { - tests := []struct { - name string - otlpfile string - ddogfile string - expectedNumMissing int64 - }{ - { - name: "simple", - otlpfile: "testdata/otlpdata/source/simple.json", - ddogfile: "testdata/datadogdata/source/simple.json", - expectedNumMissing: 1, - }, - } + set := componenttest.NewNopTelemetrySettings() + reader := sdkmetric.NewManualReader(sdkmetric.WithTemporalitySelector(deltaSelector)) + set.MeterProvider = sdkmetric.NewMeterProvider(sdkmetric.WithReader(reader)) + translator, err := NewTranslator(set) + require.NoError(t, err) - for _, testinstance := range tests { - t.Run(testinstance.name, func(t *testing.T) { - set := componenttest.NewNopTelemetrySettings() - reader := sdkmetric.NewManualReader(sdkmetric.WithTemporalitySelector(deltaSelector)) - set.MeterProvider = sdkmetric.NewMeterProvider(sdkmetric.WithReader(reader)) - translator, err := NewTranslator(set) - require.NoError(t, err) - AssertTranslatorMap(t, translator, testinstance.otlpfile, testinstance.ddogfile) + resWithHostname := pcommon.NewResource() + resWithHostname.Attributes().FromRaw(map[string]any{ + "datadog.host.name": "testhost", + }) - rm := &metricdata.ResourceMetrics{} - assert.NoError(t, reader.Collect(context.Background(), rm)) - AssertHasSumMetric[int64](t, rm, missingSourceMetricName, testinstance.expectedNumMissing) - }) - } + resWithoutHostname := pcommon.NewResource() + + attributeSet := attribute.NewSet(attribute.String("signal", "test")) + + _, _ = translator.ResourceToSource(context.Background(), resWithHostname, attributeSet) + _, _ = translator.ResourceToSource(context.Background(), resWithoutHostname, attributeSet) + _, _ = translator.ResourceToSource(context.Background(), resWithoutHostname, attributeSet) + + rm := &metricdata.ResourceMetrics{} + assert.NoError(t, reader.Collect(context.Background(), rm)) + AssertHasSumMetric[int64](t, rm, missingSourceMetricName, 2) } diff --git a/pkg/otlp/logs/go.sum b/pkg/otlp/logs/go.sum index 11affd30..a7827c38 100644 --- a/pkg/otlp/logs/go.sum +++ b/pkg/otlp/logs/go.sum @@ -66,6 +66,8 @@ go.opentelemetry.io/otel v1.21.0 h1:hzLeKBZEL7Okw2mGzZ0cc4k/A7Fta0uoPgaJCr8fsFc= go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo= go.opentelemetry.io/otel/metric v1.21.0 h1:tlYWfeo+Bocx5kLEloTjbcDwBuELRrIFxwdQ36PlJu4= go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM= +go.opentelemetry.io/otel/sdk v1.21.0 h1:FTt8qirL1EysG6sTQRZ5TokkU8d0ugCj8htOgThZXQ8= +go.opentelemetry.io/otel/sdk/metric v1.21.0 h1:smhI5oD714d6jHE6Tie36fPx4WDFIg+Y6RfAY4ICcR0= go.opentelemetry.io/otel/trace v1.21.0 h1:WD9i5gzvoUPuXIXH24ZNBudiarZDKuekPqi/E8fpfLc= go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ= go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= diff --git a/pkg/otlp/metrics/go.mod b/pkg/otlp/metrics/go.mod index b28a63bd..f5b831a7 100644 --- a/pkg/otlp/metrics/go.mod +++ b/pkg/otlp/metrics/go.mod @@ -15,8 +15,6 @@ require ( go.opentelemetry.io/collector/component v0.91.0 go.opentelemetry.io/collector/pdata v1.0.0 go.opentelemetry.io/otel v1.21.0 - go.opentelemetry.io/otel/metric v1.21.0 - go.opentelemetry.io/otel/sdk/metric v1.21.0 go.uber.org/zap v1.26.0 golang.org/x/exp v0.0.0-20230321023759-10a507213a29 google.golang.org/protobuf v1.31.0 @@ -25,8 +23,6 @@ require ( require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/dustin/go-humanize v1.0.1 // indirect - github.com/go-logr/logr v1.3.0 // indirect - github.com/go-logr/stdr v1.2.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/hashicorp/go-version v1.6.0 // indirect github.com/json-iterator/go v1.1.12 // indirect @@ -45,7 +41,7 @@ require ( go.opentelemetry.io/collector/confmap v0.91.0 // indirect go.opentelemetry.io/collector/featuregate v1.0.0 // indirect go.opentelemetry.io/collector/semconv v0.91.0 // indirect - go.opentelemetry.io/otel/sdk v1.21.0 // indirect + go.opentelemetry.io/otel/metric v1.21.0 // indirect go.opentelemetry.io/otel/trace v1.21.0 // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/net v0.18.0 // indirect diff --git a/pkg/otlp/metrics/go.sum b/pkg/otlp/metrics/go.sum index 9d6509cd..824658c7 100644 --- a/pkg/otlp/metrics/go.sum +++ b/pkg/otlp/metrics/go.sum @@ -7,11 +7,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= -github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= -github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= -github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= @@ -85,9 +82,7 @@ go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znn go.opentelemetry.io/otel/metric v1.21.0 h1:tlYWfeo+Bocx5kLEloTjbcDwBuELRrIFxwdQ36PlJu4= go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM= go.opentelemetry.io/otel/sdk v1.21.0 h1:FTt8qirL1EysG6sTQRZ5TokkU8d0ugCj8htOgThZXQ8= -go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E= go.opentelemetry.io/otel/sdk/metric v1.21.0 h1:smhI5oD714d6jHE6Tie36fPx4WDFIg+Y6RfAY4ICcR0= -go.opentelemetry.io/otel/sdk/metric v1.21.0/go.mod h1:FJ8RAsoPGv/wYMgBdUJXOm+6pzFY3YdljnXtv1SBE8Q= go.opentelemetry.io/otel/trace v1.21.0 h1:WD9i5gzvoUPuXIXH24ZNBudiarZDKuekPqi/E8fpfLc= go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ= go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= diff --git a/pkg/otlp/metrics/metrics_translator.go b/pkg/otlp/metrics/metrics_translator.go index 11e99903..4a1a2545 100644 --- a/pkg/otlp/metrics/metrics_translator.go +++ b/pkg/otlp/metrics/metrics_translator.go @@ -30,7 +30,6 @@ import ( "go.opentelemetry.io/collector/pdata/pcommon" "go.opentelemetry.io/collector/pdata/pmetric" "go.opentelemetry.io/otel/attribute" - otelmetric "go.opentelemetry.io/otel/metric" "go.uber.org/zap" "golang.org/x/exp/slices" @@ -41,9 +40,6 @@ import ( const ( metricName string = "metric name" errNoBucketsNoSumCount string = "no buckets mode and no send count sum are incompatible" - - meterName string = "github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes" - missingSourceMetricName string = "datadog.otlp_translator.resources.missing_source" ) var ( @@ -58,16 +54,12 @@ func (*noSourceProvider) Source(context.Context) (source.Source, error) { return source.Source{Kind: source.HostnameKind, Identifier: ""}, nil } -type instruments struct { - missingSources otelmetric.Int64Counter -} - // Translator is a metrics translator. type Translator struct { - prevPts *ttlCache - logger *zap.Logger - instruments instruments - cfg translatorConfig + prevPts *ttlCache + logger *zap.Logger + attributesTranslator *attributes.Translator + cfg translatorConfig } // Metadata specifies information about the outcome of the MapMetrics call. @@ -102,21 +94,18 @@ func NewTranslator(set component.TelemetrySettings, options ...TranslatorOption) } cache := newTTLCache(cfg.sweepInterval, cfg.deltaTTL) - meter := set.MeterProvider.Meter(meterName) - missingSources, err := meter.Int64Counter( - missingSourceMetricName, - otelmetric.WithDescription("OTLP resources that are missing a source (e.g. hostname)"), - otelmetric.WithUnit("{resource}"), - ) + + // TODO: Pass as argument instead. + attributesTranslator, err := attributes.NewTranslator(set) if err != nil { - return nil, fmt.Errorf("failed to build missing source counter: %w", err) + return nil, fmt.Errorf("failed to build attributes translator: %w", err) } return &Translator{ - prevPts: cache, - logger: set.Logger.With(zap.String("component", "metrics translator")), - instruments: instruments{missingSources: missingSources}, - cfg: cfg, + prevPts: cache, + logger: set.Logger.With(zap.String("component", "metrics translator")), + attributesTranslator: attributesTranslator, + cfg: cfg, }, nil } @@ -549,16 +538,16 @@ func (t *Translator) mapSummaryMetrics( } } -func (t *Translator) source(ctx context.Context, m pcommon.Map) (source.Source, bool, error) { - src, hasSource := attributes.SourceFromAttrs(m) +func (t *Translator) source(ctx context.Context, res pcommon.Resource) (source.Source, error) { + src, hasSource := t.attributesTranslator.ResourceToSource(ctx, res, signalTypeSet) if !hasSource { var err error src, err = t.cfg.fallbackSourceProvider.Source(ctx) if err != nil { - return source.Source{}, false, fmt.Errorf("failed to get fallback source: %w", err) + return source.Source{}, fmt.Errorf("failed to get fallback source: %w", err) } } - return src, hasSource, nil + return src, nil } // extractLanguageTag appends a new language tag to languageTags if a new language tag is found from the given name @@ -679,13 +668,10 @@ func (t *Translator) MapMetrics(ctx context.Context, md pmetric.Metrics, consume consumer.ConsumeAPMStats(sp) continue } - src, hasSource, err := t.source(ctx, rm.Resource().Attributes()) + src, err := t.source(ctx, rm.Resource()) if err != nil { return metadata, err } - if !hasSource { - t.instruments.missingSources.Add(ctx, 1, otelmetric.WithAttributeSet(signalTypeSet)) - } var host string switch src.Kind { diff --git a/pkg/otlp/metrics/statspayload.go b/pkg/otlp/metrics/statspayload.go index fe91e707..0ae556fa 100644 --- a/pkg/otlp/metrics/statspayload.go +++ b/pkg/otlp/metrics/statspayload.go @@ -331,7 +331,7 @@ func (t *Translator) statsPayloadFromMetrics(rmx pmetric.ResourceMetrics) (*pb.C hostname := getStr(attr, statsKeyHostname) tags := strings.Split(getStr(attr, statsKeyTags), ",") if hostname == UnsetHostnamePlaceholder { - src, _, err := t.source(context.Background(), attr) + src, err := t.source(context.Background(), rmx.Resource()) if err != nil { return &pb.ClientStatsPayload{}, err } From bffb6c34bbae6d717afb6e5629680dc98bdaa37b Mon Sep 17 00:00:00 2001 From: Pablo Baeyens Date: Wed, 20 Dec 2023 15:25:01 +0100 Subject: [PATCH 2/3] [pkg/otlp/metrics] Pass attributes.Translator explicitly to metrics.Translator --- .chloggen/mx-psi_metrics-translator-pass.yaml | 16 +++++++++++++ pkg/otlp/metrics/histograms_test.go | 13 +++++++---- pkg/otlp/metrics/metrics_translator.go | 8 +------ .../metrics_translator_benchmark_test.go | 9 +------- pkg/otlp/metrics/metrics_translator_test.go | 23 +++++++------------ pkg/otlp/metrics/mixed_metrics_test.go | 5 +++- pkg/otlp/metrics/summary_test.go | 6 +---- pkg/otlp/metrics/testhelper_test.go | 14 +++++++++-- 8 files changed, 52 insertions(+), 42 deletions(-) create mode 100755 .chloggen/mx-psi_metrics-translator-pass.yaml diff --git a/.chloggen/mx-psi_metrics-translator-pass.yaml b/.chloggen/mx-psi_metrics-translator-pass.yaml new file mode 100755 index 00000000..a4ea9fa0 --- /dev/null +++ b/.chloggen/mx-psi_metrics-translator-pass.yaml @@ -0,0 +1,16 @@ +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: breaking + +# The name of the component (e.g. pkg/quantile) +component: pkg/otlp/metrics + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Pass `attributes.Translator` explicitly to `metrics.Translator` + +# The PR related to this change +issues: [231] + +# (Optional) One or more lines of additional information to render under the primary note. +# These lines will be padded with 2 spaces and then inserted directly into the document. +# Use pipe (|) for multiline entries. +subtext: diff --git a/pkg/otlp/metrics/histograms_test.go b/pkg/otlp/metrics/histograms_test.go index 5e17fd65..baf74503 100644 --- a/pkg/otlp/metrics/histograms_test.go +++ b/pkg/otlp/metrics/histograms_test.go @@ -8,6 +8,7 @@ package metrics import ( "testing" + "github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "go.opentelemetry.io/collector/component/componenttest" @@ -86,7 +87,10 @@ func TestDeltaHistogramTranslatorOptions(t *testing.T) { for _, testinstance := range tests { t.Run(testinstance.name, func(t *testing.T) { - translator, err := NewTranslator(componenttest.NewNopTelemetrySettings(), testinstance.options...) + set := componenttest.NewNopTelemetrySettings() + attributesTranslator, err := attributes.NewTranslator(set) + require.NoError(t, err) + translator, err := NewTranslator(set, attributesTranslator, testinstance.options...) if testinstance.err != "" { assert.EqualError(t, err, testinstance.err) return @@ -151,8 +155,7 @@ func TestCumulativeHistogramTranslatorOptions(t *testing.T) { for _, testinstance := range tests { t.Run(testinstance.name, func(t *testing.T) { - translator, err := NewTranslator(componenttest.NewNopTelemetrySettings(), testinstance.options...) - require.NoError(t, err) + translator := NewTestTranslator(t, testinstance.options...) AssertTranslatorMap(t, translator, testinstance.otlpfile, testinstance.ddogfile) }) } @@ -276,7 +279,9 @@ func TestExponentialHistogramTranslatorOptions(t *testing.T) { set := componenttest.NewNopTelemetrySettings() core, observed := observer.New(zapcore.DebugLevel) set.Logger = zap.New(core) - translator, err := NewTranslator(set, testinstance.options...) + attributesTranslator, err := attributes.NewTranslator(set) + require.NoError(t, err) + translator, err := NewTranslator(set, attributesTranslator, testinstance.options...) require.NoError(t, err) AssertTranslatorMap(t, translator, testinstance.otlpfile, testinstance.ddogfile) assert.Equal(t, testinstance.expectedUnknownMetricType, observed.FilterMessage("Unknown or unsupported metric type").Len()) diff --git a/pkg/otlp/metrics/metrics_translator.go b/pkg/otlp/metrics/metrics_translator.go index 4a1a2545..bbd9e513 100644 --- a/pkg/otlp/metrics/metrics_translator.go +++ b/pkg/otlp/metrics/metrics_translator.go @@ -69,7 +69,7 @@ type Metadata struct { } // NewTranslator creates a new translator with given options. -func NewTranslator(set component.TelemetrySettings, options ...TranslatorOption) (*Translator, error) { +func NewTranslator(set component.TelemetrySettings, attributesTranslator *attributes.Translator, options ...TranslatorOption) (*Translator, error) { cfg := translatorConfig{ HistMode: HistogramModeDistributions, SendHistogramAggregations: false, @@ -95,12 +95,6 @@ func NewTranslator(set component.TelemetrySettings, options ...TranslatorOption) cache := newTTLCache(cfg.sweepInterval, cfg.deltaTTL) - // TODO: Pass as argument instead. - attributesTranslator, err := attributes.NewTranslator(set) - if err != nil { - return nil, fmt.Errorf("failed to build attributes translator: %w", err) - } - return &Translator{ prevPts: cache, logger: set.Logger.With(zap.String("component", "metrics translator")), diff --git a/pkg/otlp/metrics/metrics_translator_benchmark_test.go b/pkg/otlp/metrics/metrics_translator_benchmark_test.go index e07f6ae1..7aded3d4 100644 --- a/pkg/otlp/metrics/metrics_translator_benchmark_test.go +++ b/pkg/otlp/metrics/metrics_translator_benchmark_test.go @@ -21,7 +21,6 @@ import ( "testing" "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" "go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/pdata/pmetric" "go.uber.org/zap" @@ -55,13 +54,7 @@ func newBenchmarkTranslator(b *testing.B, logger *zap.Logger, opts ...Translator set := componenttest.NewNopTelemetrySettings() set.Logger = logger - tr, err := NewTranslator( - set, - options..., - ) - - require.NoError(b, err) - return tr + return NewTestTranslator(b, options...) } // createBenchmarkGaugeMetrics creates n Gauge data points. diff --git a/pkg/otlp/metrics/metrics_translator_test.go b/pkg/otlp/metrics/metrics_translator_test.go index 26af89c5..694b30f2 100644 --- a/pkg/otlp/metrics/metrics_translator_test.go +++ b/pkg/otlp/metrics/metrics_translator_test.go @@ -21,6 +21,7 @@ import ( "time" pb "github.com/DataDog/datadog-agent/pkg/proto/pbgo/trace" + "github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes" "github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes/source" "github.com/DataDog/opentelemetry-mapping-go/pkg/quantile" "github.com/DataDog/opentelemetry-mapping-go/pkg/quantile/summary" @@ -109,8 +110,12 @@ func newTranslatorWithStatsChannel(t *testing.T, logger *zap.Logger, ch chan []b set := componenttest.NewNopTelemetrySettings() set.Logger = logger + + attributesTranslator, err := attributes.NewTranslator(set) + require.NoError(t, err) tr, err := NewTranslator( set, + attributesTranslator, options..., ) @@ -439,11 +444,7 @@ func TestMapRuntimeMetricsHasMapping(t *testing.T) { func TestMapRuntimeMetricsHasMappingCollector(t *testing.T) { ctx := context.Background() - tr, err := NewTranslator( - componenttest.NewNopTelemetrySettings(), - WithRemapping(), - ) - require.NoError(t, err) + tr := NewTestTranslator(t, WithRemapping()) consumer := &mockFullConsumer{} exampleDims = newDims("process.runtime.go.goroutines") exampleOtelDims := newDims("otel.process.runtime.go.goroutines") @@ -492,11 +493,7 @@ func TestMapSumRuntimeMetricWithAttributesHasMapping(t *testing.T) { func TestMapSumRuntimeMetricWithAttributesHasMappingCollector(t *testing.T) { ctx := context.Background() - tr, err := NewTranslator( - componenttest.NewNopTelemetrySettings(), - WithRemapping(), - ) - require.NoError(t, err) + tr := NewTestTranslator(t, WithRemapping()) consumer := &mockFullConsumer{} attributes := []runtimeMetricAttribute{{ key: "generation", @@ -740,11 +737,7 @@ func TestMapRuntimeMetricsNoMapping(t *testing.T) { func TestMapSystemMetrics(t *testing.T) { ctx := context.Background() - tr, err := NewTranslator( - componenttest.NewNopTelemetrySettings(), - WithRemapping(), - ) - require.NoError(t, err) + tr := NewTestTranslator(t, WithRemapping()) consumer := &mockFullConsumer{} rmt, err := tr.MapMetrics(ctx, createTestMetricWithAttributes("system.filesystem.utilization", pmetric.MetricTypeGauge, nil, 1), consumer) if err != nil { diff --git a/pkg/otlp/metrics/mixed_metrics_test.go b/pkg/otlp/metrics/mixed_metrics_test.go index 669b6ad1..66335441 100644 --- a/pkg/otlp/metrics/mixed_metrics_test.go +++ b/pkg/otlp/metrics/mixed_metrics_test.go @@ -8,6 +8,7 @@ package metrics import ( "testing" + "github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "go.opentelemetry.io/collector/component/componenttest" @@ -141,7 +142,9 @@ func TestMapMetrics(t *testing.T) { set := componenttest.NewNopTelemetrySettings() core, observed := observer.New(zapcore.DebugLevel) set.Logger = zap.New(core) - translator, err := NewTranslator(set, testinstance.options...) + attributesTranslator, err := attributes.NewTranslator(set) + require.NoError(t, err) + translator, err := NewTranslator(set, attributesTranslator, testinstance.options...) require.NoError(t, err) AssertTranslatorMap(t, translator, testinstance.otlpfile, testinstance.ddogfile) assert.Equal(t, testinstance.expectedUnknownMetricType, observed.FilterMessage("Unknown or unsupported metric type").Len()) diff --git a/pkg/otlp/metrics/summary_test.go b/pkg/otlp/metrics/summary_test.go index 21ff2679..8e72cca7 100644 --- a/pkg/otlp/metrics/summary_test.go +++ b/pkg/otlp/metrics/summary_test.go @@ -7,9 +7,6 @@ package metrics import ( "testing" - - "github.com/stretchr/testify/require" - "go.opentelemetry.io/collector/component/componenttest" ) func TestSummaryMetrics(t *testing.T) { @@ -56,8 +53,7 @@ func TestSummaryMetrics(t *testing.T) { for _, testinstance := range tests { t.Run(testinstance.name, func(t *testing.T) { - translator, err := NewTranslator(componenttest.NewNopTelemetrySettings(), testinstance.options...) - require.NoError(t, err) + translator := NewTestTranslator(t, testinstance.options...) AssertTranslatorMap(t, translator, testinstance.otlpfile, testinstance.ddogfile) }) } diff --git a/pkg/otlp/metrics/testhelper_test.go b/pkg/otlp/metrics/testhelper_test.go index 0ec7311c..9c4e7786 100644 --- a/pkg/otlp/metrics/testhelper_test.go +++ b/pkg/otlp/metrics/testhelper_test.go @@ -15,6 +15,7 @@ import ( "testing" pb "github.com/DataDog/datadog-agent/pkg/proto/pbgo/trace" + "github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes" "github.com/DataDog/opentelemetry-mapping-go/pkg/quantile" "github.com/DataDog/opentelemetry-mapping-go/pkg/quantile/summary" "github.com/stretchr/testify/assert" @@ -23,6 +24,16 @@ import ( "go.opentelemetry.io/collector/pdata/pmetric" ) +func NewTestTranslator(t testing.TB, options ...TranslatorOption) *Translator { + t.Helper() + set := componenttest.NewNopTelemetrySettings() + attributesTranslator, err := attributes.NewTranslator(set) + require.NoError(t, err) + translator, err := NewTranslator(set, attributesTranslator, options...) + require.NoError(t, err) + return translator +} + // TestMetrics is the struct used for serializing Datadog metrics for generating testdata. // It contains sketches (distributions) and timeseries (all other types). // This structure is not meant to be used directly; use AssertTranslatorMap instead. @@ -225,8 +236,7 @@ func TestAssertTranslatorMapFailure(t *testing.T) { // Compare OTLP file with incorrect output ddogfile := "testdata/datadogdata/histogram/simple-delta_nobuckets-cs.json" - translator, err := NewTranslator(componenttest.NewNopTelemetrySettings(), WithHistogramMode(HistogramModeDistributions)) - require.NoError(t, err) + translator := NewTestTranslator(t, WithHistogramMode(HistogramModeDistributions)) mockTesting := &testingTMock{t} assert.False(t, AssertTranslatorMap(mockTesting, translator, otlpfile, ddogfile), "AssertTranslatorMap should have failed but did not") actualFile := ddogfile + ".actual" From 3e3146bac864ad565058cb070d856b73744d0f11 Mon Sep 17 00:00:00 2001 From: Pablo Baeyens Date: Wed, 20 Dec 2023 17:02:17 +0100 Subject: [PATCH 3/3] [pkg/otlp/logs] Refactor to use attributes.Translator --- .chloggen/mx-psi_logs-translator.yaml | 16 ++++++++ pkg/otlp/logs/go.mod | 2 +- pkg/otlp/logs/transform.go | 12 ++++-- pkg/otlp/logs/transform_test.go | 58 ++++++++++++++++++--------- pkg/otlp/logs/translator.go | 56 ++++++++++++++++++++++---- 5 files changed, 112 insertions(+), 32 deletions(-) create mode 100755 .chloggen/mx-psi_logs-translator.yaml diff --git a/.chloggen/mx-psi_logs-translator.yaml b/.chloggen/mx-psi_logs-translator.yaml new file mode 100755 index 00000000..1955b5a5 --- /dev/null +++ b/.chloggen/mx-psi_logs-translator.yaml @@ -0,0 +1,16 @@ +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: breaking + +# The name of the component (e.g. pkg/quantile) +component: pkg/otlp/logs + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Pass `attributes.Translator` explicitly to `logs.Translator` + +# The PR related to this change +issues: [231] + +# (Optional) One or more lines of additional information to render under the primary note. +# These lines will be padded with 2 spaces and then inserted directly into the document. +# Use pipe (|) for multiline entries. +subtext: diff --git a/pkg/otlp/logs/go.mod b/pkg/otlp/logs/go.mod index 2c88bd9b..4194ff4a 100644 --- a/pkg/otlp/logs/go.mod +++ b/pkg/otlp/logs/go.mod @@ -9,6 +9,7 @@ require ( go.opentelemetry.io/collector/component v0.91.0 go.opentelemetry.io/collector/pdata v1.0.0 go.opentelemetry.io/collector/semconv v0.91.0 + go.opentelemetry.io/otel v1.21.0 go.uber.org/zap v1.26.0 ) @@ -31,7 +32,6 @@ require ( go.opentelemetry.io/collector/config/configtelemetry v0.91.0 // indirect go.opentelemetry.io/collector/confmap v0.91.0 // indirect go.opentelemetry.io/collector/featuregate v1.0.0 // indirect - go.opentelemetry.io/otel v1.21.0 // indirect go.opentelemetry.io/otel/metric v1.21.0 // indirect go.opentelemetry.io/otel/trace v1.21.0 // indirect go.uber.org/multierr v1.11.0 // indirect diff --git a/pkg/otlp/logs/transform.go b/pkg/otlp/logs/transform.go index 1c4ab47d..d82405f8 100644 --- a/pkg/otlp/logs/transform.go +++ b/pkg/otlp/logs/transform.go @@ -64,6 +64,10 @@ const ( // Deprecated: use Translator instead. func Transform(lr plog.LogRecord, res pcommon.Resource, logger *zap.Logger) datadogV2.HTTPLogItem { host, service := extractHostNameAndServiceName(res.Attributes(), lr.Attributes()) + return transform(lr, host, service, res, logger) +} + +func transform(lr plog.LogRecord, host, service string, res pcommon.Resource, logger *zap.Logger) datadogV2.HTTPLogItem { l := datadogV2.HTTPLogItem{ AdditionalProperties: make(map[string]string), } @@ -198,8 +202,8 @@ func extractHostNameAndServiceName(resourceAttrs pcommon.Map, logAttrs pcommon.M if src, ok := attributes.SourceFromAttrs(resourceAttrs); ok && src.Kind == source.HostnameKind { host = src.Identifier } - // hostName is blank from resource - // we need to derive from log attributes + // HACK: Check for host in log record attributes if not present in resource attributes. + // This is not aligned with the specification and will be removed in the future. if host == "" { if src, ok := attributes.SourceFromAttrs(logAttrs); ok && src.Kind == source.HostnameKind { host = src.Identifier @@ -208,8 +212,8 @@ func extractHostNameAndServiceName(resourceAttrs pcommon.Map, logAttrs pcommon.M if s, ok := resourceAttrs.Get(conventions.AttributeServiceName); ok { service = s.AsString() } - // serviceName is blank from resource - // we need to derive from log attributes + // HACK: Check for service in log record attributes if not present in resource attributes. + // This is not aligned with the specification and will be removed in the future. if service == "" { if s, ok := logAttrs.Get(conventions.AttributeServiceName); ok { service = s.AsString() diff --git a/pkg/otlp/logs/transform_test.go b/pkg/otlp/logs/transform_test.go index 751aaea2..68a16226 100644 --- a/pkg/otlp/logs/transform_test.go +++ b/pkg/otlp/logs/transform_test.go @@ -15,20 +15,23 @@ package logs import ( + "context" "fmt" "testing" "github.com/DataDog/datadog-api-client-go/v2/api/datadog" "github.com/DataDog/datadog-api-client-go/v2/api/datadogV2" + "github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/pdata/pcommon" "go.opentelemetry.io/collector/pdata/plog" conventions "go.opentelemetry.io/collector/semconv/v1.6.1" "go.uber.org/zap/zaptest" ) -func TestTransform(t *testing.T) { - testLogger := zaptest.NewLogger(t) +func TestTranslator(t *testing.T) { traceID := [16]byte{0x08, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x0, 0x0, 0x0, 0x0, 0x0a} var spanID [8]byte copy(spanID[:], traceID[8:]) @@ -57,7 +60,7 @@ func TestTransform(t *testing.T) { res: pcommon.NewResource(), }, want: datadogV2.HTTPLogItem{ - Ddtags: datadog.PtrString(""), + Ddtags: datadog.PtrString("otel_source:test"), Message: *datadog.PtrString(""), AdditionalProperties: map[string]string{ "app": "test", @@ -83,7 +86,7 @@ func TestTransform(t *testing.T) { }(), }, want: datadogV2.HTTPLogItem{ - Ddtags: datadog.PtrString("service:otlp_col"), + Ddtags: datadog.PtrString("service:otlp_col,otel_source:test"), Message: *datadog.PtrString(""), Service: datadog.PtrString("otlp_col"), AdditionalProperties: map[string]string{ @@ -112,7 +115,7 @@ func TestTransform(t *testing.T) { }(), }, want: datadogV2.HTTPLogItem{ - Ddtags: datadog.PtrString("service:otlp_col,foo:bar"), + Ddtags: datadog.PtrString("service:otlp_col,foo:bar,otel_source:test"), Message: *datadog.PtrString(""), Service: datadog.PtrString("otlp_col"), AdditionalProperties: map[string]string{ @@ -140,7 +143,7 @@ func TestTransform(t *testing.T) { }(), }, want: datadogV2.HTTPLogItem{ - Ddtags: datadog.PtrString(""), + Ddtags: datadog.PtrString("otel_source:test"), Message: *datadog.PtrString(""), Service: datadog.PtrString("otlp_col"), AdditionalProperties: map[string]string{ @@ -169,7 +172,7 @@ func TestTransform(t *testing.T) { }(), }, want: datadogV2.HTTPLogItem{ - Ddtags: datadog.PtrString(""), + Ddtags: datadog.PtrString("otel_source:test"), Message: *datadog.PtrString(""), Service: datadog.PtrString("otlp_col"), AdditionalProperties: map[string]string{ @@ -202,7 +205,7 @@ func TestTransform(t *testing.T) { }(), }, want: datadogV2.HTTPLogItem{ - Ddtags: datadog.PtrString(""), + Ddtags: datadog.PtrString("otel_source:test"), Message: *datadog.PtrString(""), Service: datadog.PtrString("otlp_col"), AdditionalProperties: map[string]string{ @@ -235,7 +238,7 @@ func TestTransform(t *testing.T) { }(), }, want: datadogV2.HTTPLogItem{ - Ddtags: datadog.PtrString(""), + Ddtags: datadog.PtrString("otel_source:test"), Message: *datadog.PtrString(""), Service: datadog.PtrString("otlp_col"), AdditionalProperties: map[string]string{ @@ -268,7 +271,7 @@ func TestTransform(t *testing.T) { }(), }, want: datadogV2.HTTPLogItem{ - Ddtags: datadog.PtrString(""), + Ddtags: datadog.PtrString("otel_source:test"), Message: *datadog.PtrString(""), Service: datadog.PtrString("otlp_col"), AdditionalProperties: map[string]string{ @@ -301,7 +304,7 @@ func TestTransform(t *testing.T) { }(), }, want: datadogV2.HTTPLogItem{ - Ddtags: datadog.PtrString(""), + Ddtags: datadog.PtrString("otel_source:test"), Message: *datadog.PtrString(""), Service: datadog.PtrString("otlp_col"), AdditionalProperties: map[string]string{ @@ -336,7 +339,7 @@ func TestTransform(t *testing.T) { }(), }, want: datadogV2.HTTPLogItem{ - Ddtags: datadog.PtrString(""), + Ddtags: datadog.PtrString("otel_source:test"), Message: *datadog.PtrString(""), Service: datadog.PtrString("otlp_col"), AdditionalProperties: map[string]string{ @@ -371,7 +374,7 @@ func TestTransform(t *testing.T) { }(), }, want: datadogV2.HTTPLogItem{ - Ddtags: datadog.PtrString(""), + Ddtags: datadog.PtrString("otel_source:test"), Message: *datadog.PtrString(""), Service: datadog.PtrString("otlp_col"), AdditionalProperties: map[string]string{ @@ -403,7 +406,7 @@ func TestTransform(t *testing.T) { }(), }, want: datadogV2.HTTPLogItem{ - Ddtags: datadog.PtrString("service:otlp_col"), + Ddtags: datadog.PtrString("service:otlp_col,otel_source:test"), Message: *datadog.PtrString(""), Service: datadog.PtrString("otlp_col"), AdditionalProperties: map[string]string{ @@ -432,7 +435,7 @@ func TestTransform(t *testing.T) { }(), }, want: datadogV2.HTTPLogItem{ - Ddtags: datadog.PtrString(""), + Ddtags: datadog.PtrString("otel_source:test"), Message: *datadog.PtrString(""), AdditionalProperties: map[string]string{ "app": "test", @@ -471,7 +474,7 @@ func TestTransform(t *testing.T) { }(), }, want: datadogV2.HTTPLogItem{ - Ddtags: datadog.PtrString(""), + Ddtags: datadog.PtrString("otel_source:test"), Message: *datadog.PtrString(""), AdditionalProperties: map[string]string{ "root.nest1.nest2": "val", @@ -495,7 +498,7 @@ func TestTransform(t *testing.T) { }(), }, want: datadogV2.HTTPLogItem{ - Ddtags: datadog.PtrString(""), + Ddtags: datadog.PtrString("otel_source:test"), Message: *datadog.PtrString(""), AdditionalProperties: map[string]string{ "status": "", @@ -545,7 +548,7 @@ func TestTransform(t *testing.T) { }(), }, want: datadogV2.HTTPLogItem{ - Ddtags: datadog.PtrString(""), + Ddtags: datadog.PtrString("otel_source:test"), Message: *datadog.PtrString(""), AdditionalProperties: map[string]string{ "nest1.nest2.nest3.nest4.nest5.nest6.nest7.nest8.nest9.nest10": "{\"nest11\":{\"nest12\":\"ok\"}}", @@ -569,7 +572,7 @@ func TestTransform(t *testing.T) { }(), }, want: datadogV2.HTTPLogItem{ - Ddtags: datadog.PtrString(""), + Ddtags: datadog.PtrString("otel_source:test"), Message: *datadog.PtrString(""), AdditionalProperties: map[string]string{ "status": "debug", @@ -580,9 +583,24 @@ func TestTransform(t *testing.T) { }, }, } + + set := componenttest.NewNopTelemetrySettings() + set.Logger = zaptest.NewLogger(t) + attributesTranslator, err := attributes.NewTranslator(set) + require.NoError(t, err) + translator, err := NewTranslator(set, attributesTranslator, "test") + require.NoError(t, err) + for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - got := Transform(tt.args.lr, tt.args.res, testLogger) + logs := plog.NewLogs() + rl := logs.ResourceLogs().AppendEmpty() + tt.args.res.MoveTo(rl.Resource()) + tt.args.lr.CopyTo(rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()) + + payloads := translator.MapLogs(context.Background(), logs) + require.Len(t, payloads, 1) + got := payloads[0] gs, err := got.MarshalJSON() if err != nil { diff --git a/pkg/otlp/logs/translator.go b/pkg/otlp/logs/translator.go index e6466b3f..88116471 100644 --- a/pkg/otlp/logs/translator.go +++ b/pkg/otlp/logs/translator.go @@ -15,40 +15,82 @@ package logs import ( + "context" + "github.com/DataDog/datadog-api-client-go/v2/api/datadogV2" + "github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes" + "github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes/source" "go.opentelemetry.io/collector/component" + "go.opentelemetry.io/collector/pdata/pcommon" "go.opentelemetry.io/collector/pdata/plog" + conventions "go.opentelemetry.io/collector/semconv/v1.6.1" + "go.opentelemetry.io/otel/attribute" +) + +var ( + signalTypeSet = attribute.NewSet(attribute.String("signal", "logs")) ) // Translator of OTLP logs to Datadog format type Translator struct { - set component.TelemetrySettings - otelTag string + set component.TelemetrySettings + attributesTranslator *attributes.Translator + otelTag string } // NewTranslator returns a new Translator -func NewTranslator(set component.TelemetrySettings, otelSource string) (*Translator, error) { +func NewTranslator(set component.TelemetrySettings, attributesTranslator *attributes.Translator, otelSource string) (*Translator, error) { return &Translator{ - set: set, - otelTag: "otel_source:" + otelSource, + set: set, + attributesTranslator: attributesTranslator, + otelTag: "otel_source:" + otelSource, }, nil } +func (t *Translator) hostNameAndServiceNameFromResource(ctx context.Context, res pcommon.Resource) (host string, service string) { + if src, ok := t.attributesTranslator.ResourceToSource(ctx, res, signalTypeSet); ok && src.Kind == source.HostnameKind { + host = src.Identifier + } + if s, ok := res.Attributes().Get(conventions.AttributeServiceName); ok { + service = s.AsString() + } + return host, service +} + +func (t *Translator) hostFromAttributes(ctx context.Context, attrs pcommon.Map) string { + if src, ok := t.attributesTranslator.AttributesToSource(ctx, attrs); ok && src.Kind == source.HostnameKind { + return src.Identifier + } + return "" +} + // MapLogs from OTLP format to Datadog format. -func (t *Translator) MapLogs(ld plog.Logs) []datadogV2.HTTPLogItem { +func (t *Translator) MapLogs(ctx context.Context, ld plog.Logs) []datadogV2.HTTPLogItem { rsl := ld.ResourceLogs() var payloads []datadogV2.HTTPLogItem for i := 0; i < rsl.Len(); i++ { rl := rsl.At(i) sls := rl.ScopeLogs() res := rl.Resource() + host, service := t.hostNameAndServiceNameFromResource(ctx, res) for j := 0; j < sls.Len(); j++ { sl := sls.At(j) lsl := sl.LogRecords() // iterate over Logs for k := 0; k < lsl.Len(); k++ { log := lsl.At(k) - payload := Transform(log, res, t.set.Logger) + // HACK: Check for host and service in log record attributes + // This is not aligned with the specification and will be removed in the future. + if host == "" { + host = t.hostFromAttributes(ctx, log.Attributes()) + } + if service == "" { + if s, ok := log.Attributes().Get(conventions.AttributeServiceName); ok { + service = s.AsString() + } + } + + payload := transform(log, host, service, res, t.set.Logger) ddtags := payload.GetDdtags() if ddtags != "" { payload.SetDdtags(ddtags + "," + t.otelTag)