diff options
Diffstat (limited to 'vendor/go.opentelemetry.io/contrib/exporters/autoexport/spans.go')
| -rw-r--r-- | vendor/go.opentelemetry.io/contrib/exporters/autoexport/spans.go | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/vendor/go.opentelemetry.io/contrib/exporters/autoexport/spans.go b/vendor/go.opentelemetry.io/contrib/exporters/autoexport/spans.go new file mode 100644 index 000000000..8970d18f7 --- /dev/null +++ b/vendor/go.opentelemetry.io/contrib/exporters/autoexport/spans.go @@ -0,0 +1,98 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package autoexport // import "go.opentelemetry.io/contrib/exporters/autoexport" + +import ( + "context" + "os" + + "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc" + "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp" + "go.opentelemetry.io/otel/exporters/stdout/stdouttrace" + "go.opentelemetry.io/otel/sdk/trace" +) + +const otelExporterOTLPTracesProtoEnvKey = "OTEL_EXPORTER_OTLP_TRACES_PROTOCOL" + +// SpanOption applies an autoexport configuration option. +type SpanOption = option[trace.SpanExporter] + +// Option applies an autoexport configuration option. +// +// Deprecated: Use SpanOption. +type Option = SpanOption + +// WithFallbackSpanExporter sets the fallback exporter to use when no exporter +// is configured through the OTEL_TRACES_EXPORTER environment variable. +func WithFallbackSpanExporter(spanExporterFactory func(ctx context.Context) (trace.SpanExporter, error)) SpanOption { + return withFallbackFactory[trace.SpanExporter](spanExporterFactory) +} + +// NewSpanExporter returns a configured [go.opentelemetry.io/otel/sdk/trace.SpanExporter] +// defined using the environment variables described below. +// +// OTEL_TRACES_EXPORTER defines the traces exporter; supported values: +// - "none" - "no operation" exporter +// - "otlp" (default) - OTLP exporter; see [go.opentelemetry.io/otel/exporters/otlp/otlptrace] +// - "console" - Standard output exporter; see [go.opentelemetry.io/otel/exporters/stdout/stdouttrace] +// +// OTEL_EXPORTER_OTLP_PROTOCOL defines OTLP exporter's transport protocol; +// supported values: +// - "grpc" - protobuf-encoded data using gRPC wire format over HTTP/2 connection; +// see: [go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc] +// - "http/protobuf" (default) - protobuf-encoded data over HTTP connection; +// see: [go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp] +// +// OTEL_EXPORTER_OTLP_TRACES_PROTOCOL defines OTLP exporter's transport protocol for the traces signal; +// supported values are the same as OTEL_EXPORTER_OTLP_PROTOCOL. +// +// An error is returned if an environment value is set to an unhandled value. +// +// Use [RegisterSpanExporter] to handle more values of OTEL_TRACES_EXPORTER. +// +// Use [WithFallbackSpanExporter] option to change the returned exporter +// when OTEL_TRACES_EXPORTER is unset or empty. +// +// Use [IsNoneSpanExporter] to check if the returned exporter is a "no operation" exporter. +func NewSpanExporter(ctx context.Context, opts ...SpanOption) (trace.SpanExporter, error) { + return tracesSignal.create(ctx, opts...) +} + +// RegisterSpanExporter sets the SpanExporter factory to be used when the +// OTEL_TRACES_EXPORTER environment variable contains the exporter name. This +// will panic if name has already been registered. +func RegisterSpanExporter(name string, factory func(context.Context) (trace.SpanExporter, error)) { + must(tracesSignal.registry.store(name, factory)) +} + +var tracesSignal = newSignal[trace.SpanExporter]("OTEL_TRACES_EXPORTER") + +func init() { + RegisterSpanExporter("otlp", func(ctx context.Context) (trace.SpanExporter, error) { + proto := os.Getenv(otelExporterOTLPTracesProtoEnvKey) + if proto == "" { + proto = os.Getenv(otelExporterOTLPProtoEnvKey) + } + + // Fallback to default, http/protobuf. + if proto == "" { + proto = "http/protobuf" + } + + switch proto { + case "grpc": + return otlptracegrpc.New(ctx) + case "http/protobuf": + return otlptracehttp.New(ctx) + default: + return nil, errInvalidOTLPProtocol + } + }) + RegisterSpanExporter("console", func(ctx context.Context) (trace.SpanExporter, error) { + return stdouttrace.New() + }) + RegisterSpanExporter("none", func(ctx context.Context) (trace.SpanExporter, error) { + return noopSpanExporter{}, nil + }) +} |
