From 79c1c0296f732b0f049e77747541df677b923091 Mon Sep 17 00:00:00 2001 From: William Dumont Date: Thu, 27 Feb 2025 12:10:33 +0100 Subject: [PATCH] fix running otelcol.exporter.awss3 with sumo_ic marshaler --- CHANGELOG.md | 4 + .../component/otelcol/exporter/awss3/awss3.go | 12 ++- .../otelcol/exporter/awss3/awss3_test.go | 76 +++++++++++++++++++ 3 files changed, 91 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index edbaf7e5a4..6fb2320a73 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,10 @@ Main (unreleased) - Added OpenTelemetry logs and metrics support to Alloy mixin's dashboards and alerts. (@thampiotr) +### Bugfixes + +- Fixed an issue where the `otelcol.exporter.awss3` could not be started with the `sumo_ic` marshaler. (@wildum) + v1.7.1 ----------------- diff --git a/internal/component/otelcol/exporter/awss3/awss3.go b/internal/component/otelcol/exporter/awss3/awss3.go index b4a5415d80..b002b12f91 100644 --- a/internal/component/otelcol/exporter/awss3/awss3.go +++ b/internal/component/otelcol/exporter/awss3/awss3.go @@ -22,7 +22,17 @@ func init() { Build: func(opts component.Options, args component.Arguments) (component.Component, error) { fact := awss3exporter.NewFactory() - return exporter.New(opts, fact, args.(Arguments), exporter.TypeSignalConstFunc(exporter.TypeAll)) + + typeSignalFunc := func(opts component.Options, args component.Arguments) exporter.TypeSignal { + switch args.(Arguments).MarshalerName.Type { + case "sumo_ic": + return exporter.TypeLogs + default: + return exporter.TypeAll + } + } + + return exporter.New(opts, fact, args.(Arguments), typeSignalFunc) }, }) } diff --git a/internal/component/otelcol/exporter/awss3/awss3_test.go b/internal/component/otelcol/exporter/awss3/awss3_test.go index 81c241bd5e..d5550fa17b 100644 --- a/internal/component/otelcol/exporter/awss3/awss3_test.go +++ b/internal/component/otelcol/exporter/awss3/awss3_test.go @@ -2,9 +2,12 @@ package awss3_test import ( "testing" + "time" otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/exporter/awss3" + "github.com/grafana/alloy/internal/runtime/componenttest" + "github.com/grafana/alloy/internal/util" "github.com/grafana/alloy/syntax" "github.com/stretchr/testify/require" ) @@ -105,3 +108,76 @@ func TestDebugMetricsConfig(t *testing.T) { }) } } + +// Checks that the component can start with the sumo_ic marshaler. +func TestSumoICMarshaler(t *testing.T) { + ctx := componenttest.TestContext(t) + l := util.TestLogger(t) + + ctrl, err := componenttest.NewControllerFromID(l, "otelcol.exporter.awss3") + require.NoError(t, err) + + cfg := ` + s3_uploader { + s3_bucket = "test" + s3_prefix = "logs" + } + + marshaler { + type = "sumo_ic" + } + ` + var args awss3.Arguments + require.NoError(t, syntax.Unmarshal([]byte(cfg), &args)) + + go func() { + err := ctrl.Run(ctx, args) + require.NoError(t, err) + }() + + require.NoError(t, ctrl.WaitRunning(time.Second), "component never started") +} + +// Checks that the component can be updated with the sumo_ic marshaler. +func TestSumoICMarshalerUpdate(t *testing.T) { + ctx := componenttest.TestContext(t) + l := util.TestLogger(t) + + ctrl, err := componenttest.NewControllerFromID(l, "otelcol.exporter.awss3") + require.NoError(t, err) + + cfg := ` + s3_uploader { + s3_bucket = "test" + s3_prefix = "logs" + } + + marshaler { + type = "otlp_json" + } + ` + var args awss3.Arguments + require.NoError(t, syntax.Unmarshal([]byte(cfg), &args)) + + go func() { + err := ctrl.Run(ctx, args) + require.NoError(t, err) + }() + + require.NoError(t, ctrl.WaitRunning(time.Second), "component never started") + + cfg2 := ` + s3_uploader { + s3_bucket = "test" + s3_prefix = "logs" + } + + marshaler { + type = "sumo_ic" + } + ` + + var args2 awss3.Arguments + require.NoError(t, syntax.Unmarshal([]byte(cfg2), &args2)) + require.NoError(t, ctrl.Update(args2)) +}