@@ -3,9 +3,11 @@ package tracing
33import (
44 "context"
55
6+ "go.opentelemetry.io/otel"
67 "go.opentelemetry.io/otel/exporters/otlp/otlptrace"
78 "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
89 "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp"
10+ "go.opentelemetry.io/otel/propagation"
911 "go.opentelemetry.io/otel/sdk/resource"
1012 sdktrace "go.opentelemetry.io/otel/sdk/trace"
1113 semconv "go.opentelemetry.io/otel/semconv/v1.10.0"
@@ -24,34 +26,53 @@ type TracerOpts struct {
2426
2527// TracerProvider creates a grpc otlp exporter and configures a trace provider.
2628// Caller is responsible for calling TracerProvider.Shutdown to ensure all data is flushed.
27- func TracerProvider (ctx context.Context , service string , opts TracerOpts ) (* sdktrace.TracerProvider , error ) {
29+ func TracerProvider (ctx context.Context , service string , opts TracerOpts ) (* sdktrace.TracerProvider , func (context. Context ) error , error ) {
2830 res := resource .NewWithAttributes (
2931 semconv .SchemaURL ,
3032 // the service name used to display traces in backends
3133 semconv .ServiceNameKey .String (service ),
3234 )
3335
34- tracerOpts := []sdktrace.TracerProviderOption {
35- sdktrace .WithResource (res ),
36- }
36+ var (
37+ tracerOpts = []sdktrace.TracerProviderOption {
38+ sdktrace .WithResource (res ),
39+ }
40+ closers = []func (context.Context ) error {}
41+ )
42+
3743 if opts .Default {
3844 exporter , err := DefaultExporter (ctx )
3945 if err != nil {
40- return nil , xerrors .Errorf ("default exporter: %w" , err )
46+ return nil , nil , xerrors .Errorf ("default exporter: %w" , err )
4147 }
48+ closers = append (closers , exporter .Shutdown )
4249 tracerOpts = append (tracerOpts , sdktrace .WithBatcher (exporter ))
4350 }
4451 if opts .Coder {
4552 exporter , err := CoderExporter (ctx )
4653 if err != nil {
47- return nil , xerrors .Errorf ("coder exporter: %w" , err )
54+ return nil , nil , xerrors .Errorf ("coder exporter: %w" , err )
4855 }
56+ closers = append (closers , exporter .Shutdown )
4957 tracerOpts = append (tracerOpts , sdktrace .WithBatcher (exporter ))
5058 }
5159
5260 tracerProvider := sdktrace .NewTracerProvider (tracerOpts ... )
61+ otel .SetTracerProvider (tracerProvider )
62+ otel .SetTextMapPropagator (
63+ propagation .NewCompositeTextMapPropagator (
64+ propagation.TraceContext {},
65+ propagation.Baggage {},
66+ ),
67+ )
5368
54- return tracerProvider , nil
69+ return tracerProvider , func (ctx context.Context ) error {
70+ for _ , close := range closers {
71+ _ = close (ctx )
72+ }
73+ _ = tracerProvider .Shutdown (ctx )
74+ return nil
75+ }, nil
5576}
5677
5778func DefaultExporter (ctx context.Context ) (* otlptrace.Exporter , error ) {
0 commit comments