func newOTLPMetricGRPCExporter()

in pkg/metricgen/otlp.go [141:172]


func newOTLPMetricGRPCExporter(ctx context.Context, cfg config) (*otlpmetricgrpc.Exporter, func(), error) {
	endpoint, err := otlpEndpoint(cfg.apmServerURL)
	if err != nil {
		return nil, func() {}, err
	}

	var transportCredentials credentials.TransportCredentials
	switch endpoint.Scheme {
	case "http":
		// If http:// is specified, then use insecure (plaintext).
		transportCredentials = grpcinsecure.NewCredentials()
	case "https":
		transportCredentials = credentials.NewTLS(&tls.Config{InsecureSkipVerify: !cfg.verifyServerCert})
	}

	grpcConn, err := grpc.NewClient(
		endpoint.Host,
		grpc.WithTransportCredentials(transportCredentials),
		grpc.WithDefaultCallOptions(grpc.UseCompressor("gzip")),
	)
	cleanup := func() { grpcConn.Close() }
	if err != nil {
		return nil, cleanup, fmt.Errorf("cannot create grpc dial context: %w", err)
	}

	opts := []otlpmetricgrpc.Option{otlpmetricgrpc.WithGRPCConn(grpcConn)}
	headers := map[string]string{"Authorization": "ApiKey " + cfg.apiKey}
	opts = append(opts, otlpmetricgrpc.WithHeaders(headers))

	e, err := otlpmetricgrpc.New(ctx, opts...)
	return e, cleanup, err
}