Skip to content

Commit 23181f7

Browse files
author
Alex Boten
authored
autoexport: Add support for console exporters (#4486)
1 parent 19346a7 commit 23181f7

File tree

7 files changed

+41
-0
lines changed

7 files changed

+41
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
1515
- Add `"go.opentelemetry.io/contrib/config"` package that includes configuration models generated via go-jsonschema. (#4376)
1616
- Add `NewSDK` function to `"go.opentelemetry.io/contrib/config"`. The initial implementation only returns noop providers. (#4414)
1717
- Add metrics support (No-op, OTLP and Prometheus) to `go.opentelemetry.io/contrib/exporters/autoexport`. (#4229, #4479)
18+
- Add support for `console` span exporter and metrics exporter in `go.opentelemetry.io/contrib/exporters/autoexport`. (#4486)
1819
- Set unit and description on all instruments in `go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp`. (#4500)
1920

2021
### Changed

exporters/autoexport/go.mod

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ require (
1212
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.19.0
1313
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0
1414
go.opentelemetry.io/otel/exporters/prometheus v0.42.0
15+
go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v0.42.0
16+
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.19.0
1517
go.opentelemetry.io/otel/sdk v1.19.0
1618
go.opentelemetry.io/otel/sdk/metric v1.19.0
1719
go.uber.org/goleak v1.3.0

exporters/autoexport/go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,10 @@ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0 h1:IeMey
5353
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0/go.mod h1:oVdCUtjq9MK9BlS7TtucsQwUcXcymNiEDjgDD2jMtZU=
5454
go.opentelemetry.io/otel/exporters/prometheus v0.42.0 h1:jwV9iQdvp38fxXi8ZC+lNpxjK16MRcZlpDYvbuO1FiA=
5555
go.opentelemetry.io/otel/exporters/prometheus v0.42.0/go.mod h1:f3bYiqNqhoPxkvI2LrXqQVC546K7BuRDL/kKuxkujhA=
56+
go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v0.42.0 h1:4jJuoeOo9W6hZnz+r046fyoH5kykZPRvKfUXJVfMpB0=
57+
go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v0.42.0/go.mod h1:/MtYTE1SfC2QIcE0bDot6fIX+h+WvXjgTqgn9P0LNPE=
58+
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.19.0 h1:Nw7Dv4lwvGrI68+wULbcq7su9K2cebeCUrDjVrUJHxM=
59+
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.19.0/go.mod h1:1MsF6Y7gTqosgoZvHlzcaaM8DIMNZgJh87ykokoNH7Y=
5660
go.opentelemetry.io/otel/metric v1.19.0 h1:aTzpGtV0ar9wlV4Sna9sdJyII5jTVJEvKETPiOKwvpE=
5761
go.opentelemetry.io/otel/metric v1.19.0/go.mod h1:L5rUsV9kM1IxCj1MmSdS+JQAcVm319EUrDVLrt7jqt8=
5862
go.opentelemetry.io/otel/sdk v1.19.0 h1:6USY6zH+L8uMH8L3t1enZPR3WFEmSTADlqldyHtJi3o=

exporters/autoexport/metrics.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
"go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc"
3131
"go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp"
3232
promexporter "go.opentelemetry.io/otel/exporters/prometheus"
33+
"go.opentelemetry.io/otel/exporters/stdout/stdoutmetric"
3334
"go.opentelemetry.io/otel/sdk/metric"
3435
)
3536

@@ -49,6 +50,7 @@ func WithFallbackMetricReader(exporter metric.Reader) MetricOption {
4950
// - "none" - "no operation" exporter
5051
// - "otlp" (default) - OTLP exporter; see [go.opentelemetry.io/otel/exporters/otlp/otlpmetric]
5152
// - "prometheus" - Prometheus exporter + HTTP server; see [go.opentelemetry.io/otel/exporters/prometheus]
53+
// - "console" - Standard output exporter; see [go.opentelemetry.io/otel/exporters/stdout/stdoutmetric]
5254
//
5355
// OTEL_EXPORTER_OTLP_PROTOCOL defines OTLP exporter's transport protocol;
5456
// supported values:
@@ -106,6 +108,13 @@ func init() {
106108
return nil, errInvalidOTLPProtocol
107109
}
108110
})
111+
RegisterMetricReader("console", func(ctx context.Context) (metric.Reader, error) {
112+
r, err := stdoutmetric.New()
113+
if err != nil {
114+
return nil, err
115+
}
116+
return metric.NewPeriodicReader(r), nil
117+
})
109118
RegisterMetricReader("none", func(ctx context.Context) (metric.Reader, error) {
110119
return newNoopMetricReader(), nil
111120
})

exporters/autoexport/metrics_test.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,18 @@ func TestMetricExporterNone(t *testing.T) {
4040
assert.True(t, IsNoneMetricReader(got))
4141
}
4242

43+
func TestMetricExporterConsole(t *testing.T) {
44+
t.Setenv("OTEL_METRICS_EXPORTER", "console")
45+
got, err := NewMetricReader(context.Background())
46+
assert.NoError(t, err)
47+
t.Cleanup(func() {
48+
assert.NoError(t, got.Shutdown(context.Background()))
49+
})
50+
assert.IsType(t, &metric.PeriodicReader{}, got)
51+
exporterType := reflect.Indirect(reflect.ValueOf(got)).FieldByName("exporter").Elem().Type()
52+
assert.Equal(t, "*stdoutmetric.exporter", exporterType.String())
53+
}
54+
4355
func TestMetricExporterOTLP(t *testing.T) {
4456
t.Setenv("OTEL_METRICS_EXPORTER", "otlp")
4557

exporters/autoexport/spans.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020

2121
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
2222
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp"
23+
"go.opentelemetry.io/otel/exporters/stdout/stdouttrace"
2324
"go.opentelemetry.io/otel/sdk/trace"
2425
)
2526

@@ -43,6 +44,7 @@ func WithFallbackSpanExporter(exporter trace.SpanExporter) SpanOption {
4344
// OTEL_TRACES_EXPORTER defines the traces exporter; supported values:
4445
// - "none" - "no operation" exporter
4546
// - "otlp" (default) - OTLP exporter; see [go.opentelemetry.io/otel/exporters/otlp/otlptrace]
47+
// - "console" - Standard output exporter; see [go.opentelemetry.io/otel/exporters/stdout/stdouttrace]
4648
//
4749
// OTEL_EXPORTER_OTLP_PROTOCOL defines OTLP exporter's transport protocol;
4850
// supported values:
@@ -88,6 +90,9 @@ func init() {
8890
return nil, errInvalidOTLPProtocol
8991
}
9092
})
93+
RegisterSpanExporter("console", func(ctx context.Context) (trace.SpanExporter, error) {
94+
return stdouttrace.New()
95+
})
9196
RegisterSpanExporter("none", func(ctx context.Context) (trace.SpanExporter, error) {
9297
return noopSpanExporter{}, nil
9398
})

exporters/autoexport/spans_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"testing"
2222

2323
"go.opentelemetry.io/otel/exporters/otlp/otlptrace"
24+
"go.opentelemetry.io/otel/exporters/stdout/stdouttrace"
2425

2526
"github.com/stretchr/testify/assert"
2627
)
@@ -35,6 +36,13 @@ func TestSpanExporterNone(t *testing.T) {
3536
assert.True(t, IsNoneSpanExporter(got))
3637
}
3738

39+
func TestSpanExporterConsole(t *testing.T) {
40+
t.Setenv("OTEL_TRACES_EXPORTER", "console")
41+
got, err := NewSpanExporter(context.Background())
42+
assert.NoError(t, err)
43+
assert.IsType(t, &stdouttrace.Exporter{}, got)
44+
}
45+
3846
func TestSpanExporterOTLP(t *testing.T) {
3947
t.Setenv("OTEL_TRACES_EXPORTER", "otlp")
4048

0 commit comments

Comments
 (0)