vxcontrol/pentagi · error

failed to create tracer exporter: %w

Error message

failed to create tracer exporter: %w

What it means

Construction of the OTLP gRPC span (tracer) exporter (otlptracegrpc.New) failed during NewTelemetryClient; the shared connection is closed for complete teardown and the error is wrapped with this message.

Source

Thrown at backend/pkg/observability/otelclient.go:132

	}

	// Build all three exporters before creating any provider. Exporter creation
	// is the only remaining error path, and at that point no batch/reader
	// goroutine has started yet, so closing the connection is a complete teardown.
	logExporter, err := otlploggrpc.New(ctx, otlploggrpc.WithGRPCConn(conn))
	if err != nil {
		_ = conn.Close()
		return nil, fmt.Errorf("failed to create log exporter: %w", err)
	}
	metricExporter, err := otlpmetricgrpc.New(ctx, otlpmetricgrpc.WithGRPCConn(conn))
	if err != nil {
		_ = conn.Close()
		return nil, fmt.Errorf("failed to create metric exporter: %w", err)
	}
	spanExporter, err := otlptracegrpc.New(ctx, otlptracegrpc.WithGRPCConn(conn))
	if err != nil {
		_ = conn.Close()
		return nil, fmt.Errorf("failed to create tracer exporter: %w", err)
	}

	logProvider := sdklog.NewLoggerProvider(
		sdklog.WithProcessor(sdklog.NewBatchProcessor(
			logExporter,
			sdklog.WithExportInterval(DefaultLogInterval),
			sdklog.WithExportTimeout(DefaultLogTimeout),
		)),
		sdklog.WithResource(newResource(resourceAttrs(cfg)...)),
	)

	meterProvider := sdkmetric.NewMeterProvider(
		sdkmetric.WithReader(sdkmetric.NewPeriodicReader(
			metricExporter,
			sdkmetric.WithInterval(DefaultMetricInterval),
			sdkmetric.WithTimeout(DefaultMetricTimeout),
		)),
		sdkmetric.WithResource(newResource(resourceAttrs(cfg)...)),

View on GitHub (pinned to ea665308ba)

Solutions

  1. Run `go mod tidy` / `go mod download` and rebuild
  2. Read the wrapped cause for the precise setup failure
  3. Validate certificate paths if TLS options were introduced
  4. Verify the observability stack version matches the OTLP exporter expectations
Defensive patterns

Strategy: fallback

Validate before calling

// verify tracing module versions: go list -m go.opentelemetry.io/otel/sdk go.opentelemetry.io/otel/exporters/otlp/otlptrace

Try / catch

client, err := NewTelemetryClient(ctx, cfg)
if err != nil {
    log.Warnf("tracing disabled due to init failure: %v", err)
    client = nil
}

Prevention

When it happens

Trigger: otlptracegrpc.New returning an error at setup time — invalid options, SDK/version mismatch, or bad credentials configuration. Not a network failure: grpc.NewClient is lazy, so this happens before any dial.

Common situations: Dependency upgrade breaking the tracing API surface; adding TLS options with missing/invalid CA certs; corrupted vendor directory.

Related errors


AI-assisted analysis of vxcontrol/pentagi@ea665308ba (2026-09-01). Data as JSON: /api/errors/a08553afd9a1f22c. Report an issue: GitHub.