diff --git a/CHANGELOG.md b/CHANGELOG.md index 410d2d87013..762553cd630 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### 💡 Enhancements 💡 + +- Add validation to check at least one endpoint is specified in otlphttpexporter's configuration (#4860) + ## v0.45.0 Beta ### 🛑 Breaking changes 🛑 diff --git a/exporter/otlphttpexporter/config.go b/exporter/otlphttpexporter/config.go index ecd03695f31..31987e1e27a 100644 --- a/exporter/otlphttpexporter/config.go +++ b/exporter/otlphttpexporter/config.go @@ -15,6 +15,8 @@ package otlphttpexporter // import "go.opentelemetry.io/collector/exporter/otlphttpexporter" import ( + "fmt" + "go.opentelemetry.io/collector/config" "go.opentelemetry.io/collector/config/confighttp" "go.opentelemetry.io/collector/exporter/exporterhelper" @@ -41,5 +43,8 @@ var _ config.Exporter = (*Config)(nil) // Validate checks if the exporter configuration is valid func (cfg *Config) Validate() error { + if cfg.Endpoint == "" && cfg.TracesEndpoint == "" && cfg.MetricsEndpoint == "" && cfg.LogsEndpoint == "" { + return fmt.Errorf("at least one endpoint must be specified") + } return nil } diff --git a/exporter/otlphttpexporter/config_test.go b/exporter/otlphttpexporter/config_test.go index 6ad133f8c25..c751cf2c7c6 100644 --- a/exporter/otlphttpexporter/config_test.go +++ b/exporter/otlphttpexporter/config_test.go @@ -36,14 +36,21 @@ func TestLoadConfig(t *testing.T) { factory := NewFactory() factories.Exporters[typeStr] = factory - cfg, err := servicetest.LoadConfigAndValidate(filepath.Join("testdata", "config.yaml"), factories) - require.NoError(t, err) - require.NotNil(t, cfg) + // Bad config + cfg, err := servicetest.LoadConfigAndValidate(filepath.Join("testdata", "bad_empty_config.yaml"), factories) + + require.Error(t, err) e0 := cfg.Exporters[config.NewComponentID(typeStr)] assert.Equal(t, e0, factory.CreateDefaultConfig()) + // Good config + cfg, err = servicetest.LoadConfigAndValidate(filepath.Join("testdata", "config.yaml"), factories) + + require.NoError(t, err) + require.NotNil(t, cfg) + e1 := cfg.Exporters[config.NewComponentIDWithName(typeStr, "2")] assert.Equal(t, e1, &Config{ diff --git a/exporter/otlphttpexporter/testdata/bad_empty_config.yaml b/exporter/otlphttpexporter/testdata/bad_empty_config.yaml new file mode 100644 index 00000000000..c52b900bbe9 --- /dev/null +++ b/exporter/otlphttpexporter/testdata/bad_empty_config.yaml @@ -0,0 +1,15 @@ +receivers: + nop: + +processors: + nop: + +exporters: + otlphttp: + +service: + pipelines: + traces: + receivers: [nop] + processors: [nop] + exporters: [otlphttp] diff --git a/exporter/otlphttpexporter/testdata/config.yaml b/exporter/otlphttpexporter/testdata/config.yaml index 61de8891da9..3d48e47f57a 100644 --- a/exporter/otlphttpexporter/testdata/config.yaml +++ b/exporter/otlphttpexporter/testdata/config.yaml @@ -5,7 +5,6 @@ processors: nop: exporters: - otlphttp: otlphttp/2: endpoint: "https://1.2.3.4:1234" tls: @@ -36,4 +35,4 @@ service: traces: receivers: [nop] processors: [nop] - exporters: [otlphttp] + exporters: [otlphttp/2]