in pkg/tracegen/otlp.go [174:218]
func newOTLPGRPCExporters(ctx context.Context, endpointURL *url.URL, cfg Config) (*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: cfg.insecure})
}
grpcConn, err := grpc.NewClient(
endpointURL.Host,
grpc.WithTransportCredentials(transportCredentials),
grpc.WithDefaultCallOptions(grpc.UseCompressor("gzip")),
)
if err != nil {
return nil, err
}
cleanup := func(context.Context) error {
return grpcConn.Close()
}
traceOptions := []otlptracegrpc.Option{otlptracegrpc.WithGRPCConn(grpcConn)}
var logHeaders map[string]string
headers := map[string]string{"Authorization": "ApiKey " + cfg.apiKey}
traceOptions = append(traceOptions, otlptracegrpc.WithHeaders(headers))
logHeaders = headers
otlpTraceExporter, err := otlptracegrpc.New(ctx, traceOptions...)
if err != nil {
cleanup(ctx)
return nil, err
}
cleanup = combineCleanup(otlpTraceExporter.Shutdown, cleanup)
return &otlpExporters{
cleanup: cleanup,
trace: otlpTraceExporter,
log: &otlploggrpcExporter{
client: plogotlp.NewGRPCClient(grpcConn),
headers: logHeaders,
},
}, nil
}