Skip to content

Commit bace63c

Browse files
committed
support stdout, zipkin, none exporter
1 parent 37c8419 commit bace63c

File tree

1 file changed

+36
-27
lines changed

1 file changed

+36
-27
lines changed

pkg/otel_setup.go

+36-27
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,13 @@ import (
4242
"go.opentelemetry.io/otel/exporters/otlp/otlptrace"
4343
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
4444
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp"
45+
"go.opentelemetry.io/otel/exporters/stdout/stdoutmetric"
46+
"go.opentelemetry.io/otel/exporters/stdout/stdouttrace"
47+
"go.opentelemetry.io/otel/exporters/zipkin"
4548
"go.opentelemetry.io/otel/propagation"
4649
"go.opentelemetry.io/otel/sdk/metric"
4750
"go.opentelemetry.io/otel/sdk/trace"
51+
"go.opentelemetry.io/otel/sdk/trace/tracetest"
4852
)
4953

5054
// set the following environment variables based on https://opentelemetry.io/docs/specs/otel/configuration/sdk-environment-variables
@@ -55,6 +59,7 @@ const exec_name = "otel"
5559
const report_protocol = "OTEL_EXPORTER_OTLP_PROTOCOL"
5660
const trace_report_protocol = "OTEL_EXPORTER_OTLP_TRACES_PROTOCOL"
5761
const metrics_exporter = "OTEL_METRICS_EXPORTER"
62+
const trace_exporter = "OTEL_TRACES_EXPORTER"
5863
const prometheus_exporter_port = "OTEL_EXPORTER_PROMETHEUS_PORT"
5964
const default_prometheus_exporter_port = "9464"
6065

@@ -92,17 +97,22 @@ func newSpanProcessor(ctx context.Context) trace.SpanProcessor {
9297
return simpleProcessor
9398
} else {
9499
var err error
95-
if os.Getenv(report_protocol) == "grpc" || os.Getenv(trace_report_protocol) == "grpc" {
96-
spanExporter, err = otlptrace.New(ctx, otlptracegrpc.NewClient())
97-
if err != nil {
98-
log.Fatalf("%s: %v", "Failed to create the OpenTelemetry trace exporter", err)
99-
}
100+
if os.Getenv(trace_exporter) == "none" {
101+
spanExporter = tracetest.NewNoopExporter()
102+
} else if os.Getenv(trace_exporter) == "console" {
103+
spanExporter, err = stdouttrace.New()
104+
} else if os.Getenv(trace_exporter) == "zipkin" {
105+
spanExporter, err = zipkin.New(endpoint)
100106
} else {
101-
spanExporter, err = otlptrace.New(ctx, otlptracehttp.NewClient())
102-
if err != nil {
103-
log.Fatalf("%s: %v", "Failed to create the OpenTelemetry trace exporter", err)
107+
if os.Getenv(report_protocol) == "grpc" || os.Getenv(trace_report_protocol) == "grpc" {
108+
spanExporter, err = otlptrace.New(ctx, otlptracegrpc.NewClient())
109+
} else {
110+
spanExporter, err = otlptrace.New(ctx, otlptracehttp.NewClient())
104111
}
105112
}
113+
if err != nil {
114+
log.Fatalf("%s: %v", "Failed to create the OpenTelemetry trace exporter", err)
115+
}
106116
batchSpanProcessor = trace.NewBatchSpanProcessor(spanExporter)
107117
return batchSpanProcessor
108118
}
@@ -127,38 +137,37 @@ func initOpenTelemetry(ctx context.Context) error {
127137
func initMetrics() error {
128138
ctx := context.Background()
129139
// TODO: abstract the if-else
140+
var err error
130141
if verifier.IsInTest() {
131142
metricsProvider = metric.NewMeterProvider(
132143
metric.WithReader(verifier.ManualReader),
133144
)
134145
} else {
135-
if os.Getenv(metrics_exporter) == "prometheus" {
136-
exporter, err := prometheus.New()
137-
if err != nil {
138-
log.Fatalf("new otlp metric prometheus exporter failed: %v", err)
139-
}
146+
if os.Getenv(metrics_exporter) == "console" {
147+
exporter, err = stdoutmetric.New()
148+
} else if os.Getenv(metrics_exporter) == "prometheus" {
149+
exporter, err = prometheus.New()
140150
metricsProvider = metric.NewMeterProvider(
141151
metric.WithReader(exporter),
142152
)
143153
go serveMetrics()
144-
} else if os.Getenv(report_protocol) == "grpc" || os.Getenv(trace_report_protocol) == "grpc" {
145-
exporter, err := otlpmetricgrpc.New(ctx)
146-
if err != nil {
147-
log.Fatalf("new otlp metric grpc exporter failed: %v", err)
148-
}
149-
metricsProvider = metric.NewMeterProvider(
150-
metric.WithReader(metric.NewPeriodicReader(exporter)),
151-
)
152154
} else {
153-
exporter, err := otlpmetrichttp.New(ctx)
154-
if err != nil {
155-
log.Fatalf("new otlp metric http exporter failed: %v", err)
155+
if os.Getenv(report_protocol) == "grpc" || os.Getenv(trace_report_protocol) == "grpc" {
156+
exporter, err = otlpmetricgrpc.New(ctx)
157+
metricsProvider = metric.NewMeterProvider(
158+
metric.WithReader(metric.NewPeriodicReader(exporter)),
159+
)
160+
} else {
161+
exporter, err = otlpmetrichttp.New(ctx)
162+
metricsProvider = metric.NewMeterProvider(
163+
metric.WithReader(metric.NewPeriodicReader(exporter)),
164+
)
156165
}
157-
metricsProvider = metric.NewMeterProvider(
158-
metric.WithReader(metric.NewPeriodicReader(exporter)),
159-
)
160166
}
161167
}
168+
if err != nil {
169+
log.Fatalf("Failed to create metric exporter: %v", err)
170+
}
162171
if metricsProvider == nil {
163172
return errors.New("No MeterProvider is provided")
164173
}

0 commit comments

Comments
 (0)