Skip to content

Commit

Permalink
[chore][exporter/debug] refactor code to make independent from Loggin…
Browse files Browse the repository at this point in the history
…g exporter

This is in preparation to implement open-telemetry#7806
(draft PR: open-telemetry#9298).
  • Loading branch information
andrzej-stencel committed Apr 9, 2024
1 parent fc28929 commit d72869d
Show file tree
Hide file tree
Showing 3 changed files with 126 additions and 18 deletions.
83 changes: 83 additions & 0 deletions exporter/debugexporter/exporter.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

package debugexporter

import (
"context"

"go.uber.org/zap"

"go.opentelemetry.io/collector/config/configtelemetry"
"go.opentelemetry.io/collector/exporter/internal/otlptext"
"go.opentelemetry.io/collector/pdata/plog"
"go.opentelemetry.io/collector/pdata/pmetric"
"go.opentelemetry.io/collector/pdata/ptrace"
)

type debugExporter struct {
verbosity configtelemetry.Level
logger *zap.Logger
logsMarshaler plog.Marshaler
metricsMarshaler pmetric.Marshaler
tracesMarshaler ptrace.Marshaler
}

func newDebugExporter(logger *zap.Logger, verbosity configtelemetry.Level) *debugExporter {
return &debugExporter{
verbosity: verbosity,
logger: logger,
logsMarshaler: otlptext.NewTextLogsMarshaler(),
metricsMarshaler: otlptext.NewTextMetricsMarshaler(),
tracesMarshaler: otlptext.NewTextTracesMarshaler(),
}
}

func (s *debugExporter) pushTraces(_ context.Context, td ptrace.Traces) error {
s.logger.Info("TracesExporter",
zap.Int("resource spans", td.ResourceSpans().Len()),
zap.Int("spans", td.SpanCount()))
if s.verbosity != configtelemetry.LevelDetailed {
return nil
}

buf, err := s.tracesMarshaler.MarshalTraces(td)
if err != nil {
return err
}
s.logger.Info(string(buf))
return nil
}

func (s *debugExporter) pushMetrics(_ context.Context, md pmetric.Metrics) error {
s.logger.Info("MetricsExporter",
zap.Int("resource metrics", md.ResourceMetrics().Len()),
zap.Int("metrics", md.MetricCount()),
zap.Int("data points", md.DataPointCount()))
if s.verbosity != configtelemetry.LevelDetailed {
return nil
}

buf, err := s.metricsMarshaler.MarshalMetrics(md)
if err != nil {
return err
}
s.logger.Info(string(buf))
return nil
}

func (s *debugExporter) pushLogs(_ context.Context, ld plog.Logs) error {
s.logger.Info("LogsExporter",
zap.Int("resource logs", ld.ResourceLogs().Len()),
zap.Int("log records", ld.LogRecordCount()))
if s.verbosity != configtelemetry.LevelDetailed {
return nil
}

buf, err := s.logsMarshaler.MarshalLogs(ld)
if err != nil {
return err
}
s.logger.Info(string(buf))
return nil
}
57 changes: 41 additions & 16 deletions exporter/debugexporter/factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,17 @@ package debugexporter // import "go.opentelemetry.io/collector/exporter/debugexp

import (
"context"
"time"

"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/configtelemetry"
"go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/debugexporter/internal/metadata"
"go.opentelemetry.io/collector/exporter/internal/common"
"go.opentelemetry.io/collector/exporter/exporterhelper"
"go.opentelemetry.io/collector/exporter/internal/otlptext"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)

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

func createTracesExporter(ctx context.Context, set exporter.CreateSettings, config component.Config) (exporter.Traces, error) {
cfg := config.(*Config)
return common.CreateTracesExporter(ctx, set, config, &common.Common{
Verbosity: cfg.Verbosity,
SamplingInitial: cfg.SamplingInitial,
SamplingThereafter: cfg.SamplingThereafter,
})
exporterLogger := createLogger(cfg, set.TelemetrySettings.Logger)
debugExporter := newDebugExporter(exporterLogger, cfg.Verbosity)
return exporterhelper.NewTracesExporter(ctx, set, config,
debugExporter.pushTraces,
exporterhelper.WithCapabilities(consumer.Capabilities{MutatesData: false}),
exporterhelper.WithTimeout(exporterhelper.TimeoutSettings{Timeout: 0}),
exporterhelper.WithShutdown(otlptext.LoggerSync(exporterLogger)),
)
}

func createMetricsExporter(ctx context.Context, set exporter.CreateSettings, config component.Config) (exporter.Metrics, error) {
cfg := config.(*Config)
return common.CreateMetricsExporter(ctx, set, config, &common.Common{
Verbosity: cfg.Verbosity,
SamplingInitial: cfg.SamplingInitial,
SamplingThereafter: cfg.SamplingThereafter,
})
exporterLogger := createLogger(cfg, set.TelemetrySettings.Logger)
debugExporter := newDebugExporter(exporterLogger, cfg.Verbosity)
return exporterhelper.NewMetricsExporter(ctx, set, config,
debugExporter.pushMetrics,
exporterhelper.WithCapabilities(consumer.Capabilities{MutatesData: false}),
exporterhelper.WithTimeout(exporterhelper.TimeoutSettings{Timeout: 0}),
exporterhelper.WithShutdown(otlptext.LoggerSync(exporterLogger)),
)
}

func createLogsExporter(ctx context.Context, set exporter.CreateSettings, config component.Config) (exporter.Logs, error) {
cfg := config.(*Config)
return common.CreateLogsExporter(ctx, set, config, &common.Common{
Verbosity: cfg.Verbosity,
SamplingInitial: cfg.SamplingInitial,
SamplingThereafter: cfg.SamplingThereafter,
})
exporterLogger := createLogger(cfg, set.TelemetrySettings.Logger)
debugExporter := newDebugExporter(exporterLogger, cfg.Verbosity)
return exporterhelper.NewLogsExporter(ctx, set, config,
debugExporter.pushLogs,
exporterhelper.WithCapabilities(consumer.Capabilities{MutatesData: false}),
exporterhelper.WithTimeout(exporterhelper.TimeoutSettings{Timeout: 0}),
exporterhelper.WithShutdown(otlptext.LoggerSync(exporterLogger)),
)
}

func createLogger(cfg *Config, logger *zap.Logger) *zap.Logger {
core := zapcore.NewSamplerWithOptions(
logger.Core(),
1*time.Second,
cfg.SamplingInitial,
cfg.SamplingThereafter,
)

return zap.New(core)
}
4 changes: 2 additions & 2 deletions exporter/debugexporter/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,13 @@ require (
go.opentelemetry.io/collector/component v0.97.0
go.opentelemetry.io/collector/config/configtelemetry v0.97.0
go.opentelemetry.io/collector/confmap v0.97.0
go.opentelemetry.io/collector/consumer v0.97.0
go.opentelemetry.io/collector/exporter v0.97.0
go.opentelemetry.io/collector/pdata v1.4.0
go.opentelemetry.io/otel/metric v1.24.0
go.opentelemetry.io/otel/trace v1.24.0
go.uber.org/goleak v1.3.0
go.uber.org/zap v1.27.0
)

require (
Expand Down Expand Up @@ -40,15 +42,13 @@ require (
github.com/prometheus/procfs v0.12.0 // indirect
go.opentelemetry.io/collector v0.97.0 // indirect
go.opentelemetry.io/collector/config/configretry v0.97.0 // indirect
go.opentelemetry.io/collector/consumer v0.97.0 // indirect
go.opentelemetry.io/collector/extension v0.97.0 // indirect
go.opentelemetry.io/collector/receiver v0.97.0 // indirect
go.opentelemetry.io/otel v1.24.0 // indirect
go.opentelemetry.io/otel/exporters/prometheus v0.46.0 // indirect
go.opentelemetry.io/otel/sdk v1.24.0 // indirect
go.opentelemetry.io/otel/sdk/metric v1.24.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.27.0 // indirect
golang.org/x/net v0.23.0 // indirect
golang.org/x/sys v0.18.0 // indirect
golang.org/x/text v0.14.0 // indirect
Expand Down

0 comments on commit d72869d

Please sign in to comment.