func newOTLPGRPCExporters()

in systemtest/cmd/sendotlp/main.go [262:320]


func newOTLPGRPCExporters(ctx context.Context, endpointURL *url.URL) (*otlpExporters, error) {
	var transportCredentials credentials.TransportCredentials

	switch endpointURL.Scheme {
	case "http":
		// If http:// is specified, then use insecure (plaintext).
		transportCredentials = grpcinsecure.NewCredentials()
	case "https":
		transportCredentials = credentials.NewTLS(&tls.Config{InsecureSkipVerify: *insecure})
	}

	grpcConn, err := grpc.DialContext(ctx, endpointURL.Host, grpc.WithTransportCredentials(transportCredentials))
	if err != nil {
		return nil, err
	}
	cleanup := func(context.Context) error {
		return grpcConn.Close()
	}

	traceOptions := []otlptracegrpc.Option{otlptracegrpc.WithGRPCConn(grpcConn)}
	metricOptions := []otlpmetricgrpc.Option{otlpmetricgrpc.WithGRPCConn(grpcConn)}
	var headers map[string]string
	if *apiKey != "" {
		// If -api-key is specified then we set headers explicitly,
		// overriding anything set in $OTEL_EXPORTER_OTLP_HEADERS and -secret-token.
		headers = map[string]string{"Authorization": "ApiKey " + *apiKey}
	} else if *secretToken != "" {
		// If -secret-token is specified then we set headers explicitly,
		// overriding anything set in $OTEL_EXPORTER_OTLP_HEADERS.
		headers = map[string]string{"Authorization": "Bearer " + *secretToken}
	}

	if headers != nil {
		traceOptions = append(traceOptions, otlptracegrpc.WithHeaders(headers))
		metricOptions = append(metricOptions, otlpmetricgrpc.WithHeaders(headers))
	}

	otlpTraceExporter, err := otlptracegrpc.New(ctx, traceOptions...)
	if err != nil {
		cleanup(ctx)
		return nil, err
	}

	otlpMetricExporter, err := otlpmetricgrpc.New(ctx, metricOptions...)
	if err != nil {
		cleanup(ctx)
		return nil, err
	}

	return &otlpExporters{
		cleanup: cleanup,
		trace:   otlpTraceExporter,
		metric:  otlpMetricExporter,
		log: &otlploggrpcExporter{
			client:  plogotlp.NewGRPCClient(grpcConn),
			headers: headers, // logs exporter does not respect OTEL_EXPORTER_OTLP_HEADERS
		},
	}, nil
}