dagger/dagger · error

export metrics: %w

Error message

export metrics: %w

What it means

During subscribeTelemetry, if Client.EngineMetrics is non-nil the client starts an OTel metrics exporter toward the engine. A failure from c.exportMetrics is wrapped as "export metrics: %w". It means the metrics export stream could not be established at connect time.

Source

Thrown at engine/client/client.go:556

	slog := slog.With("client", c.ID)

	slog.Debug("subscribing to telemetry", "remote", c.RunnerHost)

	c.telemetry = new(errgroup.Group)
	httpClient := c.newTelemetryHTTPClient()
	if c.EngineTrace != nil {
		if err := c.exportTraces(ctx, httpClient); err != nil {
			return fmt.Errorf("export traces: %w", err)
		}
	}
	if c.EngineLogs != nil {
		if err := c.exportLogs(ctx, httpClient); err != nil {
			return fmt.Errorf("export logs: %w", err)
		}
	}
	if c.EngineMetrics != nil {
		if err := c.exportMetrics(ctx, httpClient); err != nil {
			return fmt.Errorf("export metrics: %w", err)
		}
	}
	return nil
}

func (c *Client) startSession(ctx context.Context) (rerr error) {
	ctx, sessionSpan := Tracer(ctx).Start(ctx, "starting session", telemetry.Encapsulate())
	defer telemetry.EndWithCause(sessionSpan, &rerr)

	clientMetadata := c.clientMetadata()
	c.internalCtx = engine.ContextWithClientMetadata(c.internalCtx, &clientMetadata)

	attachables := []SessionAttachable{
		// sockets
		SocketProvider{EnableHostNetworkAccess: true},
		// secrets
		secretprovider.NewSecretProvider(),
		// registry auth

View on GitHub (pinned to 82ba2681db)

Solutions

  1. Inspect the wrapped cause for the transport-level error
  2. Confirm engine reachability and that no proxy/firewall blocks the telemetry connection
  3. Retry the connect
  4. Leave Client.EngineMetrics nil if metrics export is not needed

Example fix

null
Defensive patterns

Strategy: try-catch

Validate before calling

null

Type guard

null

Try / catch

_, err := dagger.Connect(ctx, dagger.WithEngineMetrics(true))
if err != nil && strings.Contains(err.Error(), "export metrics") {
    // retry or skip metrics export
}

Prevention

When it happens

Trigger: dagger.Connect() or ConnectEngineToEngine with Client.EngineMetrics enabled, and exportMetrics fails — HTTP dial/write error to the engine telemetry endpoint or context cancellation.

Common situations: Engine unreachable or restarted mid-connect; corporate proxy blocking the telemetry channel; short-lived connect context expiring during exporter setup.

Related errors


AI-assisted analysis of dagger/dagger@82ba2681db (2026-09-05). Data as JSON: /api/errors/15f76fe8fe346509. Report an issue: GitHub.