InitializeOTel sets up OTEL with meter/metrics and tracer providers
(ctx context.Context, endpoint string)
| 37 | |
| 38 | // InitializeOTel sets up OTEL with meter/metrics and tracer providers |
| 39 | func InitializeOTel(ctx context.Context, endpoint string) (ShutdownFunc, error) { |
| 40 | logger, err := logging.FromContext(ctx) |
| 41 | if err != nil { |
| 42 | return nil, err |
| 43 | } |
| 44 | otel.SetErrorHandler(&errorhandler{logger: logger}) |
| 45 | otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator( |
| 46 | propagation.TraceContext{}, |
| 47 | propagation.Baggage{}, |
| 48 | )) |
| 49 | |
| 50 | res := newResource(ctx) |
| 51 | |
| 52 | var secure bool |
| 53 | endpoint, secure = sanitizeEndpoint(endpoint) |
| 54 | tracerProvider := createTraceProvider(ctx, res, endpoint, secure) |
| 55 | metricsProvider := createMetricProvider(ctx, res, endpoint, secure) |
| 56 | cleanup := func(ctx context.Context) { |
| 57 | if err := tracerProvider.Shutdown(ctx); err != nil { |
| 58 | logger.Warnf("Tracer provider did not shut down cleanly: %s", err) |
| 59 | } |
| 60 | if err := metricsProvider.Shutdown(ctx); err != nil { |
| 61 | logger.Warnf("Metrics provider did not shut down cleanly: %s", err) |
| 62 | } |
| 63 | } |
| 64 | otel.SetTracerProvider(tracerProvider) |
| 65 | otel.SetMeterProvider(metricsProvider) |
| 66 | return cleanup, nil |
| 67 | } |
| 68 | |
| 69 | func createMetricProvider(ctx context.Context, res *resource.Resource, endpoint string, secure bool) *sdkmetric.MeterProvider { |
| 70 | expOpts := []otlpmetricgrpc.Option{ |
nothing calls this directly
no test coverage detected