@@ -33,15 +33,21 @@ import (
3333 "go.opentelemetry.io/collector/processor"
3434 "go.opentelemetry.io/collector/processor/batchprocessor"
3535 "go.opentelemetry.io/otel"
36+ "go.opentelemetry.io/otel/metric/noop"
37+ apitrace "go.opentelemetry.io/otel/trace"
3638 "go.uber.org/multierr"
3739 "go.uber.org/zap"
3840)
3941
4042type Option func (* Config )
4143
44+ // TODO: Config, Option, and the option impls are duplicated between
45+ // this package and the metric exporter. Fix this.
4246type Config struct {
43- Batcher batchprocessor.Config
44- Exporter otlpexporter.Config
47+ SelfMetrics bool
48+ SelfSpans bool
49+ Batcher batchprocessor.Config
50+ Exporter otlpexporter.Config
4551}
4652
4753type client struct {
@@ -54,6 +60,8 @@ type client struct {
5460
5561func NewDefaultConfig () Config {
5662 return Config {
63+ SelfMetrics : true ,
64+ SelfSpans : false ,
5765 Batcher : batchprocessor.Config {
5866 Timeout : 0 ,
5967 SendBatchSize : 0 ,
@@ -130,9 +138,9 @@ func NewExporter(ctx context.Context, cfg Config) (metric.PushExporter, error) {
130138 c := & client {}
131139
132140 if ! cfg .Exporter .Arrow .Disabled {
133- c .settings .ID = component .NewID ("otel/sdk/arrow" )
141+ c .settings .ID = component .NewID ("otel/sdk/metric/ arrow" )
134142 } else {
135- c .settings .ID = component .NewID ("otel/sdk/otlp" )
143+ c .settings .ID = component .NewID ("otel/sdk/metric/ otlp" )
136144 }
137145 logger , err := zap .NewProduction ()
138146 if err != nil {
@@ -141,14 +149,18 @@ func NewExporter(ctx context.Context, cfg Config) (metric.PushExporter, error) {
141149
142150 c .settings .TelemetrySettings .Logger = logger
143151
144- // This is meta and we rely on global dependency injection,
145- // but we're hoping this works.
146- // Note: becomes otel.GetMeterProvider()
147- c .settings .TelemetrySettings .MeterProvider = otel . GetMeterProvider ()
148- c . settings . TelemetrySettings . MetricsLevel = configtelemetry . LevelNormal
152+ if cfg . SelfSpans {
153+ c . settings . TelemetrySettings . TracerProvider = otel . GetTracerProvider ()
154+ } else {
155+ c .settings .TelemetrySettings .TracerProvider = apitrace . NewNoopTracerProvider ()
156+ }
149157
150- // Note: this may be too much tracing.
151- c .settings .TelemetrySettings .TracerProvider = otel .GetTracerProvider ()
158+ if cfg .SelfMetrics {
159+ c .settings .TelemetrySettings .MeterProvider = otel .GetMeterProvider ()
160+ c .settings .TelemetrySettings .MetricsLevel = configtelemetry .LevelNormal
161+ } else {
162+ c .settings .TelemetrySettings .MeterProvider = noop .NewMeterProvider ()
163+ }
152164
153165 exp , err := otlpexporter .NewFactory ().CreateMetricsExporter (ctx , c .settings , & cfg .Exporter )
154166 if err != nil {
0 commit comments