Skip to content

Commit d72869d

Browse files
[chore][exporter/debug] refactor code to make independent from Logging exporter
This is in preparation to implement open-telemetry#7806 (draft PR: open-telemetry#9298).
1 parent fc28929 commit d72869d

File tree

3 files changed

+126
-18
lines changed

3 files changed

+126
-18
lines changed

exporter/debugexporter/exporter.go

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package debugexporter
5+
6+
import (
7+
"context"
8+
9+
"go.uber.org/zap"
10+
11+
"go.opentelemetry.io/collector/config/configtelemetry"
12+
"go.opentelemetry.io/collector/exporter/internal/otlptext"
13+
"go.opentelemetry.io/collector/pdata/plog"
14+
"go.opentelemetry.io/collector/pdata/pmetric"
15+
"go.opentelemetry.io/collector/pdata/ptrace"
16+
)
17+
18+
type debugExporter struct {
19+
verbosity configtelemetry.Level
20+
logger *zap.Logger
21+
logsMarshaler plog.Marshaler
22+
metricsMarshaler pmetric.Marshaler
23+
tracesMarshaler ptrace.Marshaler
24+
}
25+
26+
func newDebugExporter(logger *zap.Logger, verbosity configtelemetry.Level) *debugExporter {
27+
return &debugExporter{
28+
verbosity: verbosity,
29+
logger: logger,
30+
logsMarshaler: otlptext.NewTextLogsMarshaler(),
31+
metricsMarshaler: otlptext.NewTextMetricsMarshaler(),
32+
tracesMarshaler: otlptext.NewTextTracesMarshaler(),
33+
}
34+
}
35+
36+
func (s *debugExporter) pushTraces(_ context.Context, td ptrace.Traces) error {
37+
s.logger.Info("TracesExporter",
38+
zap.Int("resource spans", td.ResourceSpans().Len()),
39+
zap.Int("spans", td.SpanCount()))
40+
if s.verbosity != configtelemetry.LevelDetailed {
41+
return nil
42+
}
43+
44+
buf, err := s.tracesMarshaler.MarshalTraces(td)
45+
if err != nil {
46+
return err
47+
}
48+
s.logger.Info(string(buf))
49+
return nil
50+
}
51+
52+
func (s *debugExporter) pushMetrics(_ context.Context, md pmetric.Metrics) error {
53+
s.logger.Info("MetricsExporter",
54+
zap.Int("resource metrics", md.ResourceMetrics().Len()),
55+
zap.Int("metrics", md.MetricCount()),
56+
zap.Int("data points", md.DataPointCount()))
57+
if s.verbosity != configtelemetry.LevelDetailed {
58+
return nil
59+
}
60+
61+
buf, err := s.metricsMarshaler.MarshalMetrics(md)
62+
if err != nil {
63+
return err
64+
}
65+
s.logger.Info(string(buf))
66+
return nil
67+
}
68+
69+
func (s *debugExporter) pushLogs(_ context.Context, ld plog.Logs) error {
70+
s.logger.Info("LogsExporter",
71+
zap.Int("resource logs", ld.ResourceLogs().Len()),
72+
zap.Int("log records", ld.LogRecordCount()))
73+
if s.verbosity != configtelemetry.LevelDetailed {
74+
return nil
75+
}
76+
77+
buf, err := s.logsMarshaler.MarshalLogs(ld)
78+
if err != nil {
79+
return err
80+
}
81+
s.logger.Info(string(buf))
82+
return nil
83+
}

exporter/debugexporter/factory.go

Lines changed: 41 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,17 @@ package debugexporter // import "go.opentelemetry.io/collector/exporter/debugexp
55

66
import (
77
"context"
8+
"time"
89

910
"go.opentelemetry.io/collector/component"
1011
"go.opentelemetry.io/collector/config/configtelemetry"
12+
"go.opentelemetry.io/collector/consumer"
1113
"go.opentelemetry.io/collector/exporter"
1214
"go.opentelemetry.io/collector/exporter/debugexporter/internal/metadata"
13-
"go.opentelemetry.io/collector/exporter/internal/common"
15+
"go.opentelemetry.io/collector/exporter/exporterhelper"
16+
"go.opentelemetry.io/collector/exporter/internal/otlptext"
17+
"go.uber.org/zap"
18+
"go.uber.org/zap/zapcore"
1419
)
1520

1621
// The value of "type" key in configuration.
@@ -42,27 +47,47 @@ func createDefaultConfig() component.Config {
4247

4348
func createTracesExporter(ctx context.Context, set exporter.CreateSettings, config component.Config) (exporter.Traces, error) {
4449
cfg := config.(*Config)
45-
return common.CreateTracesExporter(ctx, set, config, &common.Common{
46-
Verbosity: cfg.Verbosity,
47-
SamplingInitial: cfg.SamplingInitial,
48-
SamplingThereafter: cfg.SamplingThereafter,
49-
})
50+
exporterLogger := createLogger(cfg, set.TelemetrySettings.Logger)
51+
debugExporter := newDebugExporter(exporterLogger, cfg.Verbosity)
52+
return exporterhelper.NewTracesExporter(ctx, set, config,
53+
debugExporter.pushTraces,
54+
exporterhelper.WithCapabilities(consumer.Capabilities{MutatesData: false}),
55+
exporterhelper.WithTimeout(exporterhelper.TimeoutSettings{Timeout: 0}),
56+
exporterhelper.WithShutdown(otlptext.LoggerSync(exporterLogger)),
57+
)
5058
}
5159

5260
func createMetricsExporter(ctx context.Context, set exporter.CreateSettings, config component.Config) (exporter.Metrics, error) {
5361
cfg := config.(*Config)
54-
return common.CreateMetricsExporter(ctx, set, config, &common.Common{
55-
Verbosity: cfg.Verbosity,
56-
SamplingInitial: cfg.SamplingInitial,
57-
SamplingThereafter: cfg.SamplingThereafter,
58-
})
62+
exporterLogger := createLogger(cfg, set.TelemetrySettings.Logger)
63+
debugExporter := newDebugExporter(exporterLogger, cfg.Verbosity)
64+
return exporterhelper.NewMetricsExporter(ctx, set, config,
65+
debugExporter.pushMetrics,
66+
exporterhelper.WithCapabilities(consumer.Capabilities{MutatesData: false}),
67+
exporterhelper.WithTimeout(exporterhelper.TimeoutSettings{Timeout: 0}),
68+
exporterhelper.WithShutdown(otlptext.LoggerSync(exporterLogger)),
69+
)
5970
}
6071

6172
func createLogsExporter(ctx context.Context, set exporter.CreateSettings, config component.Config) (exporter.Logs, error) {
6273
cfg := config.(*Config)
63-
return common.CreateLogsExporter(ctx, set, config, &common.Common{
64-
Verbosity: cfg.Verbosity,
65-
SamplingInitial: cfg.SamplingInitial,
66-
SamplingThereafter: cfg.SamplingThereafter,
67-
})
74+
exporterLogger := createLogger(cfg, set.TelemetrySettings.Logger)
75+
debugExporter := newDebugExporter(exporterLogger, cfg.Verbosity)
76+
return exporterhelper.NewLogsExporter(ctx, set, config,
77+
debugExporter.pushLogs,
78+
exporterhelper.WithCapabilities(consumer.Capabilities{MutatesData: false}),
79+
exporterhelper.WithTimeout(exporterhelper.TimeoutSettings{Timeout: 0}),
80+
exporterhelper.WithShutdown(otlptext.LoggerSync(exporterLogger)),
81+
)
82+
}
83+
84+
func createLogger(cfg *Config, logger *zap.Logger) *zap.Logger {
85+
core := zapcore.NewSamplerWithOptions(
86+
logger.Core(),
87+
1*time.Second,
88+
cfg.SamplingInitial,
89+
cfg.SamplingThereafter,
90+
)
91+
92+
return zap.New(core)
6893
}

exporter/debugexporter/go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@ require (
77
go.opentelemetry.io/collector/component v0.97.0
88
go.opentelemetry.io/collector/config/configtelemetry v0.97.0
99
go.opentelemetry.io/collector/confmap v0.97.0
10+
go.opentelemetry.io/collector/consumer v0.97.0
1011
go.opentelemetry.io/collector/exporter v0.97.0
1112
go.opentelemetry.io/collector/pdata v1.4.0
1213
go.opentelemetry.io/otel/metric v1.24.0
1314
go.opentelemetry.io/otel/trace v1.24.0
1415
go.uber.org/goleak v1.3.0
16+
go.uber.org/zap v1.27.0
1517
)
1618

1719
require (
@@ -40,15 +42,13 @@ require (
4042
github.com/prometheus/procfs v0.12.0 // indirect
4143
go.opentelemetry.io/collector v0.97.0 // indirect
4244
go.opentelemetry.io/collector/config/configretry v0.97.0 // indirect
43-
go.opentelemetry.io/collector/consumer v0.97.0 // indirect
4445
go.opentelemetry.io/collector/extension v0.97.0 // indirect
4546
go.opentelemetry.io/collector/receiver v0.97.0 // indirect
4647
go.opentelemetry.io/otel v1.24.0 // indirect
4748
go.opentelemetry.io/otel/exporters/prometheus v0.46.0 // indirect
4849
go.opentelemetry.io/otel/sdk v1.24.0 // indirect
4950
go.opentelemetry.io/otel/sdk/metric v1.24.0 // indirect
5051
go.uber.org/multierr v1.11.0 // indirect
51-
go.uber.org/zap v1.27.0 // indirect
5252
golang.org/x/net v0.23.0 // indirect
5353
golang.org/x/sys v0.18.0 // indirect
5454
golang.org/x/text v0.14.0 // indirect

0 commit comments

Comments
 (0)