Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions internal/e2e/status_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ import (
"go.opentelemetry.io/collector/service"
"go.opentelemetry.io/collector/service/extensions"
"go.opentelemetry.io/collector/service/pipelines"
"go.opentelemetry.io/collector/service/telemetry"
"go.opentelemetry.io/collector/service/telemetry/otelconftelemetry"
)

var nopType = component.MustNewType("nop")
Expand Down Expand Up @@ -79,12 +79,12 @@ func Test_ComponentStatusReporting_SharedInstance(t *testing.T) {
set.BuildInfo = component.BuildInfo{Version: "test version", Command: "otelcoltest"}

cfg := service.Config{
Telemetry: telemetry.Config{
Logs: telemetry.LogsConfig{
Telemetry: otelconftelemetry.Config{
Logs: otelconftelemetry.LogsConfig{
Level: zapcore.InfoLevel,
Development: false,
Encoding: "console",
Sampling: &telemetry.LogsSamplingConfig{
Sampling: &otelconftelemetry.LogsSamplingConfig{
Enabled: true,
Tick: 10 * time.Second,
Initial: 100,
Expand All @@ -96,7 +96,7 @@ func Test_ComponentStatusReporting_SharedInstance(t *testing.T) {
DisableStacktrace: false,
InitialFields: map[string]any(nil),
},
Metrics: telemetry.MetricsConfig{
Metrics: otelconftelemetry.MetricsConfig{
Level: configtelemetry.LevelNone,
},
},
Expand Down
8 changes: 4 additions & 4 deletions otelcol/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import (
"go.opentelemetry.io/collector/pipeline"
"go.opentelemetry.io/collector/service"
"go.opentelemetry.io/collector/service/pipelines"
"go.opentelemetry.io/collector/service/telemetry"
"go.opentelemetry.io/collector/service/telemetry/otelconftelemetry"
)

var (
Expand Down Expand Up @@ -288,8 +288,8 @@ func generateConfig() *Config {
component.MustNewID("nop"): &errConfig{},
},
Service: service.Config{
Telemetry: telemetry.Config{
Logs: telemetry.LogsConfig{
Telemetry: otelconftelemetry.Config{
Logs: otelconftelemetry.LogsConfig{
Level: zapcore.DebugLevel,
Development: true,
Encoding: "console",
Expand All @@ -299,7 +299,7 @@ func generateConfig() *Config {
ErrorOutputPaths: []string{"stderr", "./error-output-logs"},
InitialFields: map[string]any{"fieldKey": "filed-value"},
},
Metrics: telemetry.MetricsConfig{
Metrics: otelconftelemetry.MetricsConfig{
Level: configtelemetry.LevelNormal,
MeterProvider: config.MeterProvider{
Readers: []config.MetricReader{
Expand Down
10 changes: 7 additions & 3 deletions otelcol/unmarshaler.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import (
"go.opentelemetry.io/collector/processor"
"go.opentelemetry.io/collector/receiver"
"go.opentelemetry.io/collector/service"
"go.opentelemetry.io/collector/service/telemetry"
"go.opentelemetry.io/collector/service/telemetry/otelconftelemetry"
)

type configSettings struct {
Expand All @@ -27,8 +27,12 @@ type configSettings struct {
// unmarshal the configSettings from a confmap.Conf.
// After the config is unmarshalled, `Validate()` must be called to validate.
func unmarshal(v *confmap.Conf, factories Factories) (*configSettings, error) {
telFactory := telemetry.NewFactory()
defaultTelConfig := *telFactory.CreateDefaultConfig().(*telemetry.Config)
// TODO remove these params once SDK and resource creation are encapsulated
// within the otelconftelemetry factory. They are not used when creating
// the default config.
// See https://github.com/open-telemetry/opentelemetry-collector/issues/4970
telFactory := otelconftelemetry.NewFactory(nil, nil)
defaultTelConfig := *telFactory.CreateDefaultConfig().(*otelconftelemetry.Config)

// Unmarshal top level sections and validate.
cfg := &configSettings{
Expand Down
6 changes: 3 additions & 3 deletions otelcol/unmarshaler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import (
"go.opentelemetry.io/collector/confmap"
"go.opentelemetry.io/collector/service"
"go.opentelemetry.io/collector/service/pipelines"
"go.opentelemetry.io/collector/service/telemetry"
"go.opentelemetry.io/collector/service/telemetry/otelconftelemetry"
)

func TestUnmarshalEmpty(t *testing.T) {
Expand All @@ -41,11 +41,11 @@ func TestUnmarshalEmptyAllSections(t *testing.T) {
require.NoError(t, err)

zapProdCfg := zap.NewProductionConfig()
assert.Equal(t, telemetry.LogsConfig{
assert.Equal(t, otelconftelemetry.LogsConfig{
Level: zapProdCfg.Level.Level(),
Development: zapProdCfg.Development,
Encoding: "console",
Sampling: &telemetry.LogsSamplingConfig{
Sampling: &otelconftelemetry.LogsSamplingConfig{
Enabled: true,
Tick: 10 * time.Second,
Initial: 10,
Expand Down
4 changes: 2 additions & 2 deletions service/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@ package service // import "go.opentelemetry.io/collector/service"
import (
"go.opentelemetry.io/collector/service/extensions"
"go.opentelemetry.io/collector/service/pipelines"
"go.opentelemetry.io/collector/service/telemetry"
"go.opentelemetry.io/collector/service/telemetry/otelconftelemetry"
)

// Config defines the configurable components of the Service.
type Config struct {
// Telemetry is the configuration for collector's own telemetry.
Telemetry telemetry.Config `mapstructure:"telemetry"`
Telemetry otelconftelemetry.Config `mapstructure:"telemetry"`

// Extensions are the ordered list of extensions configured for the service.
Extensions extensions.Config `mapstructure:"extensions,omitempty"`
Expand Down
12 changes: 6 additions & 6 deletions service/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import (
"go.opentelemetry.io/collector/pipeline"
"go.opentelemetry.io/collector/service/extensions"
"go.opentelemetry.io/collector/service/pipelines"
"go.opentelemetry.io/collector/service/telemetry"
"go.opentelemetry.io/collector/service/telemetry/otelconftelemetry"
)

func TestConfigValidate(t *testing.T) {
Expand Down Expand Up @@ -79,8 +79,8 @@ func TestConfigValidate(t *testing.T) {
}

func TestConfmapMarshalConfig(t *testing.T) {
telFactory := telemetry.NewFactory()
defaultTelConfig := *telFactory.CreateDefaultConfig().(*telemetry.Config)
telFactory := otelconftelemetry.NewFactory(nil, nil)
defaultTelConfig := *telFactory.CreateDefaultConfig().(*otelconftelemetry.Config)
conf := confmap.New()

require.NoError(t, conf.Marshal(Config{
Expand Down Expand Up @@ -128,8 +128,8 @@ func TestConfmapMarshalConfig(t *testing.T) {

func generateConfig() *Config {
return &Config{
Telemetry: telemetry.Config{
Logs: telemetry.LogsConfig{
Telemetry: otelconftelemetry.Config{
Logs: otelconftelemetry.LogsConfig{
Level: zapcore.DebugLevel,
Development: true,
Encoding: "console",
Expand All @@ -139,7 +139,7 @@ func generateConfig() *Config {
ErrorOutputPaths: []string{"stderr", "./error-output-logs"},
InitialFields: map[string]any{"fieldKey": "filed-value"},
},
Metrics: telemetry.MetricsConfig{
Metrics: otelconftelemetry.MetricsConfig{
Level: configtelemetry.LevelNormal,
MeterProvider: config.MeterProvider{
Readers: []config.MetricReader{
Expand Down
11 changes: 5 additions & 6 deletions service/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ import (
"go.opentelemetry.io/collector/service/internal/resource"
"go.opentelemetry.io/collector/service/internal/status"
"go.opentelemetry.io/collector/service/telemetry"
"go.opentelemetry.io/collector/service/telemetry/otelconftelemetry"
)

// This feature gate is deprecated and will be removed in 1.40.0. Views can now be configured.
Expand Down Expand Up @@ -134,7 +135,7 @@ func New(ctx context.Context, set Settings, cfg Config) (*Service, error) {
mpConfig.Views = configureViews(cfg.Telemetry.Metrics.Level)
}

sdk, err := telemetry.NewSDK(ctx, &cfg.Telemetry, res)
sdk, err := otelconftelemetry.NewSDK(ctx, &cfg.Telemetry, res)
if err != nil {
return nil, fmt.Errorf("failed to create SDK: %w", err)
}
Expand All @@ -145,12 +146,10 @@ func New(ctx context.Context, set Settings, cfg Config) (*Service, error) {
}
}()

telFactory := telemetry.NewFactory()
telFactory := otelconftelemetry.NewFactory(sdk, res)
telset := telemetry.Settings{
BuildInfo: set.BuildInfo,
ZapOptions: set.LoggingOptions,
SDK: sdk,
Resource: res,
}

logger, loggerProvider, err := telFactory.CreateLogger(ctx, telset, &cfg.Telemetry)
Expand Down Expand Up @@ -227,14 +226,14 @@ func New(ctx context.Context, set Settings, cfg Config) (*Service, error) {
return srv, nil
}

func logsAboutMeterProvider(logger *zap.Logger, cfg telemetry.MetricsConfig, mp metric.MeterProvider) {
func logsAboutMeterProvider(logger *zap.Logger, cfg otelconftelemetry.MetricsConfig, mp metric.MeterProvider) {
if cfg.Level == configtelemetry.LevelNone || len(cfg.Readers) == 0 {
logger.Info("Skipped telemetry setup.")
return
}

if lmp, ok := mp.(interface {
LogAboutServers(logger *zap.Logger, cfg telemetry.MetricsConfig)
LogAboutServers(logger *zap.Logger, cfg otelconftelemetry.MetricsConfig)
}); ok {
lmp.LogAboutServers(logger, cfg)
}
Expand Down
18 changes: 9 additions & 9 deletions service/service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ import (
"go.opentelemetry.io/collector/service/internal/builders"
"go.opentelemetry.io/collector/service/internal/promtest"
"go.opentelemetry.io/collector/service/pipelines"
"go.opentelemetry.io/collector/service/telemetry"
"go.opentelemetry.io/collector/service/telemetry/otelconftelemetry"
)

type labelState int
Expand Down Expand Up @@ -298,7 +298,7 @@ func TestServiceTelemetryLogging(t *testing.T) {
}

cfg := newNopConfig()
cfg.Telemetry.Logs.Sampling = &telemetry.LogsSamplingConfig{
cfg.Telemetry.Logs.Sampling = &otelconftelemetry.LogsSamplingConfig{
Enabled: true,
Tick: time.Minute,
Initial: 2,
Expand Down Expand Up @@ -635,12 +635,12 @@ func TestServiceInvalidTelemetryConfiguration(t *testing.T) {
tests := []struct {
name string
wantErr error
cfg telemetry.Config
cfg otelconftelemetry.Config
}{
{
name: "log config with processors and invalid config",
cfg: telemetry.Config{
Logs: telemetry.LogsConfig{
cfg: otelconftelemetry.Config{
Logs: otelconftelemetry.LogsConfig{
Encoding: "console",
Processors: []config.LogRecordProcessor{
{
Expand Down Expand Up @@ -809,12 +809,12 @@ func newNopConfigPipelineConfigs(pipelineCfgs pipelines.Config) Config {
return Config{
Extensions: extensions.Config{component.NewID(nopType)},
Pipelines: pipelineCfgs,
Telemetry: telemetry.Config{
Logs: telemetry.LogsConfig{
Telemetry: otelconftelemetry.Config{
Logs: otelconftelemetry.LogsConfig{
Level: zapcore.InfoLevel,
Development: false,
Encoding: "console",
Sampling: &telemetry.LogsSamplingConfig{
Sampling: &otelconftelemetry.LogsSamplingConfig{
Enabled: true,
Tick: 10 * time.Second,
Initial: 100,
Expand All @@ -826,7 +826,7 @@ func newNopConfigPipelineConfigs(pipelineCfgs pipelines.Config) Config {
DisableStacktrace: false,
InitialFields: map[string]any(nil),
},
Metrics: telemetry.MetricsConfig{
Metrics: otelconftelemetry.MetricsConfig{
Level: configtelemetry.LevelBasic,
},
},
Expand Down
6 changes: 6 additions & 0 deletions service/telemetry/doc.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

// Package telemetry provides an abstract interface for creating
// telemetry providers.
package telemetry // import "go.opentelemetry.io/collector/service/telemetry"
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

package telemetry // import "go.opentelemetry.io/collector/service/telemetry"
package otelconftelemetry // import "go.opentelemetry.io/collector/service/telemetry/otelconftelemetry"

import (
"errors"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

package telemetry
package otelconftelemetry

import (
"path/filepath"
Expand All @@ -21,11 +21,13 @@ import (
)

func TestComponentConfigStruct(t *testing.T) {
require.NoError(t, componenttest.CheckConfigStruct(NewFactory().CreateDefaultConfig()))
require.NoError(t, componenttest.CheckConfigStruct(
NewFactory(nil, nil).CreateDefaultConfig(),
))
}

func TestUnmarshalDefaultConfig(t *testing.T) {
factory := NewFactory()
factory := NewFactory(nil, nil)
cfg := factory.CreateDefaultConfig()
require.NoError(t, confmap.New().Unmarshal(&cfg))
assert.Equal(t, factory.CreateDefaultConfig(), cfg)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

package telemetry // import "go.opentelemetry.io/collector/service/telemetry"
package otelconftelemetry // import "go.opentelemetry.io/collector/service/telemetry/otelconftelemetry"

import (
"context"
Expand All @@ -18,6 +18,7 @@ import (
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/configtelemetry"
"go.opentelemetry.io/collector/featuregate"
"go.opentelemetry.io/collector/service/telemetry"
)

var useLocalHostAsDefaultMetricsAddressFeatureGate = featuregate.GlobalRegistry().MustRegister(
Expand All @@ -27,49 +28,50 @@ var useLocalHostAsDefaultMetricsAddressFeatureGate = featuregate.GlobalRegistry(
featuregate.WithRegisterDescription("controls whether default Prometheus metrics server use localhost as the default host for their endpoints"),
)

// Settings holds configuration for building Telemetry.
type Settings struct {
BuildInfo component.BuildInfo
ZapOptions []zap.Option
SDK *config.SDK
Resource *resource.Resource
}

// Factory is factory interface for telemetry.
// This interface cannot be directly implemented. Implementations must
// use the NewFactory to implement it.
//
// NOTE This API is experimental and will change soon - use at your own risk.
// See https://github.com/open-telemetry/opentelemetry-collector/issues/4970
type Factory interface {
// CreateDefaultConfig creates the default configuration for the telemetry.
// TODO: Should we just inherit from component.Factory?
CreateDefaultConfig() component.Config

// CreateLogger creates a logger.
CreateLogger(ctx context.Context, set Settings, cfg component.Config) (*zap.Logger, log.LoggerProvider, error)
CreateLogger(context.Context, telemetry.Settings, component.Config) (*zap.Logger, log.LoggerProvider, error)

// CreateTracerProvider creates a TracerProvider.
CreateTracerProvider(ctx context.Context, set Settings, cfg component.Config) (trace.TracerProvider, error)
CreateTracerProvider(context.Context, telemetry.Settings, component.Config) (trace.TracerProvider, error)

// CreateMeterProvider creates a MeterProvider.
CreateMeterProvider(ctx context.Context, set Settings, cfg component.Config) (metric.MeterProvider, error)
CreateMeterProvider(context.Context, telemetry.Settings, component.Config) (metric.MeterProvider, error)

// unexportedFactoryFunc is used to prevent external implementations of Factory.
unexportedFactoryFunc()
}

// NewFactory creates a new Factory.
func NewFactory() Factory {
//
// NOTE This API is experimental and will change soon - use at your own risk.
// See https://github.com/open-telemetry/opentelemetry-collector/issues/4970
//
// TODO remove the parameters once the factory is fully self-contained
// and is responsible for creating the SDK and resource itself.
func NewFactory(sdk *config.SDK, res *resource.Resource) Factory {
return newFactory(createDefaultConfig,
withLogger(func(_ context.Context, set Settings, cfg component.Config) (*zap.Logger, log.LoggerProvider, error) {
withLogger(func(_ context.Context, set telemetry.Settings, cfg component.Config) (*zap.Logger, log.LoggerProvider, error) {
c := *cfg.(*Config)
return newLogger(set, c)
return newLogger(set, c, sdk, res)
}),
withTracerProvider(func(_ context.Context, set Settings, cfg component.Config) (trace.TracerProvider, error) {
withTracerProvider(func(_ context.Context, _ telemetry.Settings, cfg component.Config) (trace.TracerProvider, error) {
c := *cfg.(*Config)
return newTracerProvider(set, c)
return newTracerProvider(c, sdk)
}),
withMeterProvider(func(_ context.Context, set Settings, cfg component.Config) (metric.MeterProvider, error) {
withMeterProvider(func(_ context.Context, _ telemetry.Settings, cfg component.Config) (metric.MeterProvider, error) {
c := *cfg.(*Config)
return newMeterProvider(set, c)
return newMeterProvider(c, sdk)
}),
)
}
Expand Down
Loading
Loading