diff --git a/CHANGELOG.md b/CHANGELOG.md index ac41a7a862..dc32bc7d45 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,9 @@ Main (unreleased) - Update yet-another-cloudwatch-exporter from v0.60.0 vo v0.61.0: (@morremeyer) - Fixes a bug where cloudwatch S3 metrics are reported as `0` +- Issue 1687 - otelcol.exporter.awss3 fails to configure (@cydergoth) + - Fix parsing of the Level configuration attribute in debug_metrics config block + - Ensure "optional" debug_metrics config block really is optional ### Other changes diff --git a/internal/component/otelcol/config/config_debug_metrics.go b/internal/component/otelcol/config/config_debug_metrics.go index bf7e1ffd02..2a147689e0 100644 --- a/internal/component/otelcol/config/config_debug_metrics.go +++ b/internal/component/otelcol/config/config_debug_metrics.go @@ -19,6 +19,13 @@ const ( LevelDetailed = "detailed" ) +var levels = map[Level]bool{ + LevelNone: true, + LevelBasic: true, + LevelNormal:true, + LevelDetailed: true, +} + func (l Level) Convert() (configtelemetry.Level, error) { switch l { case LevelNone: @@ -34,6 +41,16 @@ func (l Level) Convert() (configtelemetry.Level, error) { } } +// UnmarshalText implements encoding.TextUnmarshaler for Level. +func (l *Level) UnmarshalText(text []byte) error { + alloyLevelStr := Level(text) + if _, exists := levels[alloyLevelStr]; exists { + *l = alloyLevelStr + return nil + } + return fmt.Errorf("unrecognized debug level %q", string(text)) +} + // DebugMetricsArguments configures internal metrics of the components type DebugMetricsArguments struct { DisableHighCardinalityMetrics bool `alloy:"disable_high_cardinality_metrics,attr,optional"` diff --git a/internal/component/otelcol/exporter/awss3/awss3.go b/internal/component/otelcol/exporter/awss3/awss3.go index 6ab2b7cca5..effa87632e 100644 --- a/internal/component/otelcol/exporter/awss3/awss3.go +++ b/internal/component/otelcol/exporter/awss3/awss3.go @@ -44,6 +44,7 @@ var _ exporter.Arguments = Arguments{} func (args *Arguments) SetToDefault() { args.MarshalerName.SetToDefault() args.S3Uploader.SetToDefault() + args.DebugMetrics.SetToDefault() } func (args Arguments) Convert() (otelcomponent.Config, error) { diff --git a/internal/component/otelcol/exporter/awss3/awss3_test.go b/internal/component/otelcol/exporter/awss3/awss3_test.go index a9605e06f0..81c241bd5e 100644 --- a/internal/component/otelcol/exporter/awss3/awss3_test.go +++ b/internal/component/otelcol/exporter/awss3/awss3_test.go @@ -31,6 +31,19 @@ func TestDebugMetricsConfig(t *testing.T) { Level: otelcolCfg.LevelDetailed, }, }, + { + testName: "no_optional_debug", + agentCfg: ` + s3_uploader { + s3_bucket = "test" + s3_prefix = "logs" + } + `, + expected: otelcolCfg.DebugMetricsArguments{ + DisableHighCardinalityMetrics: true, + Level: otelcolCfg.LevelDetailed, + }, + }, { testName: "explicit_false", agentCfg: ` @@ -63,6 +76,22 @@ func TestDebugMetricsConfig(t *testing.T) { Level: otelcolCfg.LevelDetailed, }, }, + { + testName: "explicit_debug_level", + agentCfg: ` + s3_uploader { + s3_bucket = "test" + s3_prefix = "logs" + } + debug_metrics { + level = "none" + } + `, + expected: otelcolCfg.DebugMetricsArguments{ + DisableHighCardinalityMetrics: true, + Level: otelcolCfg.LevelNone, + }, + }, } for _, tc := range tests {