Skip to content

Commit 447c71d

Browse files
authored
NH-137757 - Pull upstream vulnerabilities fix (#72)
* Sync * Default loglevel to warn * updated
1 parent 18e050e commit 447c71d

21 files changed

Lines changed: 1664 additions & 1675 deletions

File tree

collector/Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,12 @@ package: build
5454

5555
.PHONY: publish
5656
publish:
57-
aws lambda publish-layer-version --layer-name $(LAYER_NAME) --zip-file fileb://$(BUILD_SPACE)/opentelemetry-collector-layer-$(ARCH).zip --compatible-runtimes nodejs20.x nodejs22.x nodejs24.x java11 java17 java21 java25 python3.9 python3.10 python3.11 python3.12 python3.13 python3.14 --compatible-architectures $(ARCH) --query 'LayerVersionArn' --output text
57+
aws lambda publish-layer-version --layer-name $(LAYER_NAME) --zip-file fileb://$(BUILD_SPACE)/opentelemetry-collector-layer-$(ARCH).zip --compatible-runtimes nodejs20.x nodejs22.x nodejs24.x java11 java17 java21 java25 python3.10 python3.11 python3.12 python3.13 python3.14 --compatible-architectures $(ARCH) --query 'LayerVersionArn' --output text
5858

5959
.PHONY: publish-layer
6060
publish-layer: package
6161
@echo Publishing collector extension layer...
62-
aws lambda publish-layer-version --layer-name $(LAYER_NAME) --zip-file fileb://$(BUILD_SPACE)/opentelemetry-collector-layer-$(ARCH).zip --compatible-runtimes nodejs20.x nodejs22.x nodejs24.x java11 java17 java21 java25 python3.9 python3.10 python3.11 python3.12 python3.13 python3.14 --compatible-architectures $(ARCH) --query 'LayerVersionArn' --output text
62+
aws lambda publish-layer-version --layer-name $(LAYER_NAME) --zip-file fileb://$(BUILD_SPACE)/opentelemetry-collector-layer-$(ARCH).zip --compatible-runtimes nodejs20.x nodejs22.x nodejs24.x java11 java17 java21 java25 python3.10 python3.11 python3.12 python3.13 python3.14 --compatible-architectures $(ARCH) --query 'LayerVersionArn' --output text
6363
@echo OpenTelemetry Collector layer published.
6464

6565
.PHONY: set-otelcol-version

collector/config.yaml

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -58,11 +58,3 @@ service:
5858
receivers: [otlp,telemetryapi]
5959
processors: [resource,resourcedetection,batch]
6060
exporters: [otlp,debug]
61-
telemetry:
62-
metrics:
63-
readers:
64-
- pull:
65-
exporter:
66-
prometheus:
67-
host: "localhost"
68-
port: 8888

collector/go.mod

Lines changed: 180 additions & 178 deletions
Large diffs are not rendered by default.

collector/go.sum

Lines changed: 424 additions & 420 deletions
Large diffs are not rendered by default.

collector/internal/collector/collector.go

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import (
3333
"go.uber.org/zap/zapcore"
3434

3535
"github.com/open-telemetry/opentelemetry-lambda/collector/internal/confmap/converter/disablequeuedretryconverter"
36+
"github.com/open-telemetry/opentelemetry-lambda/collector/internal/logging"
3637
)
3738

3839
// Collector runs a single otelcol as a go routine within the
@@ -45,6 +46,7 @@ type Collector struct {
4546
stopped bool
4647
logger *zap.Logger
4748
version string
49+
coreFunc func(zapcore.LevelEnabler) zapcore.Core
4850
}
4951

5052
func getConfig(logger *zap.Logger) string {
@@ -88,6 +90,7 @@ func NewCollector(logger *zap.Logger, factories otelcol.Factories, version strin
8890
cfgProSet: cfgSet,
8991
logger: logger,
9092
version: version,
93+
coreFunc: logging.NewCore,
9194
}
9295
return col
9396
}
@@ -103,18 +106,8 @@ func (c *Collector) Start(ctx context.Context) error {
103106
Factories: func() (otelcol.Factories, error) {
104107
return c.factories, nil
105108
},
106-
// TODO: fully decouple extension and collector log levels so that
107-
// OPENTELEMETRY_EXTENSION_LOG_LEVEL only affects extension logs.
108109
LoggingOptions: []zap.Option{zap.WrapCore(func(collectorCore zapcore.Core) zapcore.Core {
109-
extensionCore := c.logger.Core()
110-
if zapcore.LevelOf(collectorCore) == zapcore.InfoLevel {
111-
return extensionCore
112-
}
113-
increased, err := zapcore.NewIncreaseLevelCore(extensionCore, collectorCore)
114-
if err != nil {
115-
return extensionCore
116-
}
117-
return increased
110+
return c.coreFunc(collectorCore)
118111
})},
119112
}
120113
var err error

collector/internal/collector/collector_test.go

Lines changed: 68 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -29,28 +29,19 @@ import (
2929
"go.uber.org/zap/zaptest/observer"
3030
)
3131

32-
func TestCollectorConfigLogLevelIsOverridden(t *testing.T) {
32+
func TestCollectorConfigLogLevelSuppressesCollectorInfoLogs(t *testing.T) {
3333
t.Setenv("OPENTELEMETRY_COLLECTOR_CONFIG_URI", "file:testdata/config-error-level.yaml")
3434

35-
receivers, err := otelcol.MakeFactoryMap(receivertest.NewNopFactory())
36-
require.NoError(t, err)
37-
exporters, err := otelcol.MakeFactoryMap(exportertest.NewNopFactory())
38-
require.NoError(t, err)
39-
40-
factories := otelcol.Factories{
41-
Receivers: receivers,
42-
Exporters: exporters,
43-
Telemetry: otelconftelemetry.NewFactory(),
35+
collectorLogs := &observer.ObservedLogs{}
36+
collector := NewCollector(zap.NewNop(), testFactories(t), "test")
37+
collector.coreFunc = func(levelEnabler zapcore.LevelEnabler) zapcore.Core {
38+
var collectorObservedCore zapcore.Core
39+
collectorObservedCore, collectorLogs = observer.New(levelEnabler)
40+
return collectorObservedCore
4441
}
4542

46-
// Use a nop logger so extension logs don't end up in our observer
47-
collector := NewCollector(zap.NewNop(), factories, "test")
48-
// Replace collector logger with an observed core at INFO level.
49-
collectorObservedCore, collectorLogs := observer.New(zapcore.InfoLevel)
50-
collector.logger = zap.New(collectorObservedCore)
51-
5243
ctx := context.Background()
53-
err = collector.Start(ctx)
44+
err := collector.Start(ctx)
5445
require.NoError(t, err)
5546

5647
err = collector.Stop()
@@ -61,3 +52,63 @@ func TestCollectorConfigLogLevelIsOverridden(t *testing.T) {
6152
assert.Empty(t, infoLogs,
6253
"INFO logs from the collector should be suppressed when config sets level: error")
6354
}
55+
56+
func TestExtensionLogLevelDoesNotSuppressCollectorLogs(t *testing.T) {
57+
t.Setenv("OPENTELEMETRY_COLLECTOR_CONFIG_URI", "file:testdata/config-info-level.yaml")
58+
59+
extensionObservedCore, extensionLogs := observer.New(zapcore.ErrorLevel)
60+
collectorLogs := &observer.ObservedLogs{}
61+
collector := NewCollector(zap.New(extensionObservedCore), testFactories(t), "test")
62+
collector.coreFunc = func(levelEnabler zapcore.LevelEnabler) zapcore.Core {
63+
var collectorObservedCore zapcore.Core
64+
collectorObservedCore, collectorLogs = observer.New(levelEnabler)
65+
return collectorObservedCore
66+
}
67+
68+
ctx := context.Background()
69+
err := collector.Start(ctx)
70+
require.NoError(t, err)
71+
72+
err = collector.Stop()
73+
require.NoError(t, err)
74+
75+
assert.NotEmpty(t, collectorLogs.FilterLevelExact(zapcore.InfoLevel).All(),
76+
"INFO logs from the collector should be emitted when collector config sets level: info")
77+
assert.Empty(t, extensionLogs.All(), "collector logs should not be written through the extension logger core")
78+
}
79+
80+
func TestCollectorLogLevelDoesNotSuppressExtensionLogs(t *testing.T) {
81+
t.Setenv("OPENTELEMETRY_COLLECTOR_CONFIG_URI", "file:testdata/config-error-level.yaml")
82+
83+
extensionObservedCore, extensionLogs := observer.New(zapcore.InfoLevel)
84+
collector := NewCollector(zap.New(extensionObservedCore), testFactories(t), "test")
85+
collector.coreFunc = func(levelEnabler zapcore.LevelEnabler) zapcore.Core {
86+
collectorObservedCore, _ := observer.New(levelEnabler)
87+
return collectorObservedCore
88+
}
89+
90+
ctx := context.Background()
91+
err := collector.Start(ctx)
92+
require.NoError(t, err)
93+
94+
collector.logger.Info("extension log")
95+
96+
err = collector.Stop()
97+
require.NoError(t, err)
98+
99+
assert.Len(t, extensionLogs.FilterMessage("extension log").All(), 1,
100+
"extension logs should be controlled by the extension logger, not collector config")
101+
}
102+
103+
func testFactories(t *testing.T) otelcol.Factories {
104+
receivers, err := otelcol.MakeFactoryMap(receivertest.NewNopFactory())
105+
require.NoError(t, err)
106+
exporters, err := otelcol.MakeFactoryMap(exportertest.NewNopFactory())
107+
require.NoError(t, err)
108+
109+
return otelcol.Factories{
110+
Receivers: receivers,
111+
Exporters: exporters,
112+
Telemetry: otelconftelemetry.NewFactory(),
113+
}
114+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
receivers:
2+
nop:
3+
4+
exporters:
5+
nop:
6+
7+
service:
8+
telemetry:
9+
logs:
10+
level: info
11+
pipelines:
12+
traces:
13+
receivers: [nop]
14+
exporters: [nop]
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
// Copyright The OpenTelemetry Authors
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
package logging
16+
17+
import (
18+
"os"
19+
20+
"go.uber.org/zap"
21+
"go.uber.org/zap/zapcore"
22+
)
23+
24+
const extensionLogLevelEnvVar = "OPENTELEMETRY_EXTENSION_LOG_LEVEL"
25+
26+
var (
27+
encoderConfig = zap.NewProductionEncoderConfig()
28+
stdoutSyncer = zapcore.Lock(zapcore.AddSync(os.Stdout))
29+
)
30+
31+
func NewLogger() *zap.Logger {
32+
lvl, err := parseLevel(os.Getenv(extensionLogLevelEnvVar))
33+
34+
l := zap.New(NewCore(lvl))
35+
36+
if err != nil {
37+
l.Warn("unable to parse log level from environment, falling back to default log level", zap.Error(err), zap.Stringer("default_level", lvl))
38+
}
39+
return l
40+
}
41+
42+
func NewCore(levelEnabler zapcore.LevelEnabler) zapcore.Core {
43+
return zapcore.NewCore(zapcore.NewJSONEncoder(encoderConfig), stdoutSyncer, levelEnabler)
44+
}
45+
46+
// parseLevel resolves the extension log level from the env var value,
47+
// falling back to INFO and returning an error if the value is invalid.
48+
func parseLevel(envLvl string) (zap.AtomicLevel, error) {
49+
if envLvl == "" {
50+
return zap.NewAtomicLevelAt(zapcore.WarnLevel), nil
51+
}
52+
userLvl, err := zap.ParseAtomicLevel(envLvl)
53+
if err != nil {
54+
return zap.NewAtomicLevelAt(zapcore.WarnLevel), err
55+
}
56+
return userLvl, nil
57+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// Copyright The OpenTelemetry Authors
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
package logging
16+
17+
import (
18+
"testing"
19+
20+
"github.com/stretchr/testify/assert"
21+
"github.com/stretchr/testify/require"
22+
"go.uber.org/zap/zapcore"
23+
)
24+
25+
func TestParseLevelDefaultsToInfoWhenUnset(t *testing.T) {
26+
lvl, err := parseLevel("")
27+
require.NoError(t, err)
28+
assert.Equal(t, zapcore.WarnLevel, lvl.Level())
29+
}
30+
31+
func TestParseLevelAppliesValidLevel(t *testing.T) {
32+
lvl, err := parseLevel("error")
33+
require.NoError(t, err)
34+
assert.Equal(t, zapcore.ErrorLevel, lvl.Level())
35+
}
36+
37+
func TestParseLevelFallsBackToInfoAndErrorsOnInvalid(t *testing.T) {
38+
lvl, err := parseLevel("not-a-level")
39+
require.Error(t, err)
40+
assert.Equal(t, zapcore.WarnLevel, lvl.Level(), "should fall back to INFO")
41+
}

collector/internal/tools/go.mod

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ require (
1313
go.opentelemetry.io/build-tools/crosslink v0.30.0
1414
go.opentelemetry.io/build-tools/multimod v0.30.0
1515
go.opentelemetry.io/build-tools/semconvgen v0.24.0
16-
golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f
17-
golang.org/x/tools v0.44.0
16+
golang.org/x/exp v0.0.0-20260709172345-9ea1abe57597
17+
golang.org/x/tools v0.48.0
1818
)
1919

2020
require (
@@ -74,7 +74,7 @@ require (
7474
github.com/go-critic/go-critic v0.12.0 // indirect
7575
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
7676
github.com/go-git/go-billy/v5 v5.9.0 // indirect
77-
github.com/go-git/go-git/v5 v5.19.0 // indirect
77+
github.com/go-git/go-git/v5 v5.19.1 // indirect
7878
github.com/go-toolsmith/astcast v1.1.0 // indirect
7979
github.com/go-toolsmith/astcopy v1.1.0 // indirect
8080
github.com/go-toolsmith/astequal v1.2.0 // indirect
@@ -215,15 +215,15 @@ require (
215215
go.uber.org/multierr v1.11.0 // indirect
216216
go.uber.org/zap v1.28.0 // indirect
217217
go.yaml.in/yaml/v3 v3.0.4 // indirect
218-
golang.org/x/crypto v0.50.0 // indirect
218+
golang.org/x/crypto v0.54.0 // indirect
219219
golang.org/x/exp/typeparams v0.0.0-20250210185358-939b2ce775ac // indirect
220-
golang.org/x/mod v0.35.0 // indirect
221-
golang.org/x/net v0.53.0 // indirect
220+
golang.org/x/mod v0.38.0 // indirect
221+
golang.org/x/net v0.57.0 // indirect
222222
golang.org/x/oauth2 v0.36.0 // indirect
223-
golang.org/x/sync v0.20.0 // indirect
224-
golang.org/x/sys v0.43.0 // indirect
225-
golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa // indirect
226-
golang.org/x/text v0.36.0 // indirect
223+
golang.org/x/sync v0.22.0 // indirect
224+
golang.org/x/sys v0.47.0 // indirect
225+
golang.org/x/telemetry v0.0.0-20260708182218-49f421fb7959 // indirect
226+
golang.org/x/text v0.40.0 // indirect
227227
google.golang.org/protobuf v1.36.5 // indirect
228228
gopkg.in/warnings.v0 v0.1.2 // indirect
229229
gopkg.in/yaml.v2 v2.4.0 // indirect

0 commit comments

Comments
 (0)