func initProvider()

in sandbox/ho11y/main.go [122:167]


func initProvider() {
	ctx := context.Background()
	endpoint := os.Getenv("OTEL_EXPORTER_OTLP_ENDPOINT")
	if endpoint == "" {
		endpoint = "0.0.0.0:55680"
	}
	log.Info("Using Otel collector at " + endpoint)
	driver := otlpgrpc.NewDriver(
		otlpgrpc.WithInsecure(),
		otlpgrpc.WithEndpoint(endpoint),
		//otlpgrpc.WithDialOption(grpc.WithBlock()),
	)
	exporter, err := otlp.NewExporter(ctx, driver)
	handleErr(err, "Failed to create new OTLP exporter")

	svcattrib := os.Getenv("OTEL_RESOURCE_ATTRIB")
	if svcattrib == "" {
		svcattrib = "ho11y-svc"
	}
	res, err := resource.New(ctx,
		resource.WithAttributes(
			semconv.ServiceNameKey.String(svcattrib),
		),
	)
	handleErr(err, "Failed to create resource "+svcattrib)

	tp := sdktrace.NewTracerProvider(
		sdktrace.WithConfig(sdktrace.Config{
			DefaultSampler: sdktrace.AlwaysSample(),
		}),
		sdktrace.WithResource(res),
		sdktrace.WithSyncer(exporter),
		sdktrace.WithIDGenerator(xray.NewIDGenerator()),
	)
	cont := controller.New(
		processor.New(
			simple.NewWithExactDistribution(),
			exporter,
		),
		controller.WithPusher(exporter),
		controller.WithCollectPeriod(2*time.Second),
	)
	otel.SetTracerProvider(tp)
	otel.SetTextMapPropagator(xray.Propagator{})
	_ = cont.Start(ctx)
}