@@ -42,9 +42,13 @@ import (
42
42
"go.opentelemetry.io/otel/exporters/otlp/otlptrace"
43
43
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
44
44
"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"
45
48
"go.opentelemetry.io/otel/propagation"
46
49
"go.opentelemetry.io/otel/sdk/metric"
47
50
"go.opentelemetry.io/otel/sdk/trace"
51
+ "go.opentelemetry.io/otel/sdk/trace/tracetest"
48
52
)
49
53
50
54
// 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"
55
59
const report_protocol = "OTEL_EXPORTER_OTLP_PROTOCOL"
56
60
const trace_report_protocol = "OTEL_EXPORTER_OTLP_TRACES_PROTOCOL"
57
61
const metrics_exporter = "OTEL_METRICS_EXPORTER"
62
+ const trace_exporter = "OTEL_TRACES_EXPORTER"
58
63
const prometheus_exporter_port = "OTEL_EXPORTER_PROMETHEUS_PORT"
59
64
const default_prometheus_exporter_port = "9464"
60
65
@@ -92,17 +97,22 @@ func newSpanProcessor(ctx context.Context) trace.SpanProcessor {
92
97
return simpleProcessor
93
98
} else {
94
99
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 )
100
106
} 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 ())
104
111
}
105
112
}
113
+ if err != nil {
114
+ log .Fatalf ("%s: %v" , "Failed to create the OpenTelemetry trace exporter" , err )
115
+ }
106
116
batchSpanProcessor = trace .NewBatchSpanProcessor (spanExporter )
107
117
return batchSpanProcessor
108
118
}
@@ -127,38 +137,37 @@ func initOpenTelemetry(ctx context.Context) error {
127
137
func initMetrics () error {
128
138
ctx := context .Background ()
129
139
// TODO: abstract the if-else
140
+ var err error
130
141
if verifier .IsInTest () {
131
142
metricsProvider = metric .NewMeterProvider (
132
143
metric .WithReader (verifier .ManualReader ),
133
144
)
134
145
} 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 ()
140
150
metricsProvider = metric .NewMeterProvider (
141
151
metric .WithReader (exporter ),
142
152
)
143
153
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
- )
152
154
} 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
+ )
156
165
}
157
- metricsProvider = metric .NewMeterProvider (
158
- metric .WithReader (metric .NewPeriodicReader (exporter )),
159
- )
160
166
}
161
167
}
168
+ if err != nil {
169
+ log .Fatalf ("Failed to create metric exporter: %v" , err )
170
+ }
162
171
if metricsProvider == nil {
163
172
return errors .New ("No MeterProvider is provided" )
164
173
}
0 commit comments