Files
Juliano CostaandGitHub 9a33088100 [debugexporter] Add support for profiles signal (#11494)
<!--Ex. Fixing a bug - Describe the bug and how this fixes the issue.
Ex. Adding a feature - Explain what this achieves.-->
#### Description

This PR adds Profiles support to the `debugexporter` component.

<!-- Issue number if applicable -->
#### Link to tracking issue
Fixes #11155.

<!--Describe what testing was performed and which tests were added.-->
#### Testing
Added tests to all modified modules:
- `exporter/debugexporter/exporter_test.go`
- `exporter/debugexporter/factory_test.go`
- `exporter/debugexporter/internal/normal/profiles_test.go`
2024-10-23 08:22:46 -07:00

121 lines
3.4 KiB
Go

// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
package debugexporter // import "go.opentelemetry.io/collector/exporter/debugexporter"
import (
"context"
"go.uber.org/zap"
"go.opentelemetry.io/collector/config/configtelemetry"
"go.opentelemetry.io/collector/exporter/debugexporter/internal/normal"
"go.opentelemetry.io/collector/exporter/debugexporter/internal/otlptext"
"go.opentelemetry.io/collector/pdata/plog"
"go.opentelemetry.io/collector/pdata/pmetric"
"go.opentelemetry.io/collector/pdata/pprofile"
"go.opentelemetry.io/collector/pdata/ptrace"
)
type debugExporter struct {
verbosity configtelemetry.Level
logger *zap.Logger
logsMarshaler plog.Marshaler
metricsMarshaler pmetric.Marshaler
tracesMarshaler ptrace.Marshaler
profilesMarshaler pprofile.Marshaler
}
func newDebugExporter(logger *zap.Logger, verbosity configtelemetry.Level) *debugExporter {
var logsMarshaler plog.Marshaler
var metricsMarshaler pmetric.Marshaler
var tracesMarshaler ptrace.Marshaler
var profilesMarshaler pprofile.Marshaler
if verbosity == configtelemetry.LevelDetailed {
logsMarshaler = otlptext.NewTextLogsMarshaler()
metricsMarshaler = otlptext.NewTextMetricsMarshaler()
tracesMarshaler = otlptext.NewTextTracesMarshaler()
profilesMarshaler = otlptext.NewTextProfilesMarshaler()
} else {
logsMarshaler = normal.NewNormalLogsMarshaler()
metricsMarshaler = normal.NewNormalMetricsMarshaler()
tracesMarshaler = normal.NewNormalTracesMarshaler()
profilesMarshaler = normal.NewNormalProfilesMarshaler()
}
return &debugExporter{
verbosity: verbosity,
logger: logger,
logsMarshaler: logsMarshaler,
metricsMarshaler: metricsMarshaler,
tracesMarshaler: tracesMarshaler,
profilesMarshaler: profilesMarshaler,
}
}
func (s *debugExporter) pushTraces(_ context.Context, td ptrace.Traces) error {
s.logger.Info("Traces",
zap.Int("resource spans", td.ResourceSpans().Len()),
zap.Int("spans", td.SpanCount()))
if s.verbosity == configtelemetry.LevelBasic {
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("Metrics",
zap.Int("resource metrics", md.ResourceMetrics().Len()),
zap.Int("metrics", md.MetricCount()),
zap.Int("data points", md.DataPointCount()))
if s.verbosity == configtelemetry.LevelBasic {
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("Logs",
zap.Int("resource logs", ld.ResourceLogs().Len()),
zap.Int("log records", ld.LogRecordCount()))
if s.verbosity == configtelemetry.LevelBasic {
return nil
}
buf, err := s.logsMarshaler.MarshalLogs(ld)
if err != nil {
return err
}
s.logger.Info(string(buf))
return nil
}
func (s *debugExporter) pushProfiles(_ context.Context, pd pprofile.Profiles) error {
s.logger.Info("Profiles",
zap.Int("resource profiles", pd.ResourceProfiles().Len()),
zap.Int("sample records", pd.SampleCount()))
if s.verbosity == configtelemetry.LevelBasic {
return nil
}
buf, err := s.profilesMarshaler.MarshalProfiles(pd)
if err != nil {
return err
}
s.logger.Info(string(buf))
return nil
}