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
- Run `go mod tidy` / `go mod download` and rebuild
- Read the wrapped cause for the precise setup failure
- Validate certificate paths if TLS options were introduced
- 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
- Keep otlptracegrpc and sdk versions from the same release train
- Validate CA cert files when enabling TLS
- Run CI builds after any otel bump
- Make telemetry optional at the call site (nil client)
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
- failed to force flush tracer: %w
- failed to create log exporter: %w
- failed to create metric exporter: %w
- failed to force flush logger: %w
- failed to force flush meter: %w
AI-assisted analysis of vxcontrol/pentagi@ea665308ba (2026-09-01).
Data as JSON: /api/errors/a08553afd9a1f22c.
Report an issue: GitHub.