forked from tangled.org/core
this repo has no description
1package telemetry 2 3import ( 4 "context" 5 "fmt" 6 "time" 7 8 "go.opentelemetry.io/otel" 9 "go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc" 10 "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc" 11 "go.opentelemetry.io/otel/exporters/stdout/stdoutmetric" 12 "go.opentelemetry.io/otel/exporters/stdout/stdouttrace" 13 "go.opentelemetry.io/otel/sdk/metric" 14 "go.opentelemetry.io/otel/sdk/resource" 15 "go.opentelemetry.io/otel/sdk/trace" 16) 17 18func NewTracerProvider(ctx context.Context, res *resource.Resource, isDev bool) (*trace.TracerProvider, error) { 19 var exporter trace.SpanExporter 20 var err error 21 22 if isDev { 23 exporter, err = stdouttrace.New() 24 if err != nil { 25 return nil, fmt.Errorf("failed to create stdout trace exporter: %w", err) 26 } 27 } else { 28 exporter, err = otlptracegrpc.New(ctx) 29 if err != nil { 30 return nil, fmt.Errorf("failed to create OTLP trace exporter: %w", err) 31 } 32 } 33 34 tp := trace.NewTracerProvider( 35 trace.WithBatcher(exporter, trace.WithBatchTimeout(1*time.Second)), 36 trace.WithResource(res), 37 ) 38 otel.SetTracerProvider(tp) 39 40 return tp, nil 41} 42 43func NewMeterProvider(ctx context.Context, res *resource.Resource, isDev bool) (*metric.MeterProvider, error) { 44 var exporter metric.Exporter 45 var err error 46 47 if isDev { 48 exporter, err = stdoutmetric.New() 49 if err != nil { 50 return nil, fmt.Errorf("failed to create stdout metric exporter: %w", err) 51 } 52 } else { 53 exporter, err = otlpmetricgrpc.New(ctx) 54 if err != nil { 55 return nil, fmt.Errorf("failed to create OTLP metric exporter: %w", err) 56 } 57 } 58 59 mp := metric.NewMeterProvider( 60 metric.WithReader(metric.NewPeriodicReader(exporter, metric.WithInterval(10*time.Second))), 61 metric.WithResource(res), 62 ) 63 otel.SetMeterProvider(mp) 64 return mp, nil 65}