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
}