weaviate/weaviate · error

parse sentry config from env: %w

Error message

parse sentry config from env: %w

What it means

At the end of FromEnv the sentry config is reset (sentry.Config = nil) and rebuilt from the environment via sentry.InitSentryConfig(); any failure is wrapped as "parse sentry config from env: %w". The inner error names which SENTRY_* variable (DSN, traces sample rate, environment, etc.) was malformed. Startup aborts so error reporting is never left half-configured.

Source

Thrown at usecases/config/environment.go:1397

	config.Restrictions.AllowedVectorIndexTypes = allowVectorDV
	var allowCompression []string
	if v := os.Getenv("ALLOWED_COMPRESSION_TYPES"); v != "" {
		allowCompression = strings.Split(v, ",")
	}
	allowCompressionDV, err := configRuntime.NewDynamicValueWithValidation(allowCompression, NewRestrictionCompressionTypeListValidator())
	if err != nil {
		return fmt.Errorf("parse ALLOWED_COMPRESSION_TYPES: %w", err)
	}
	config.Restrictions.AllowedCompressionTypes = allowCompressionDV
	parseString("RESTRICTIONS_ERROR_MESSAGE", func(val string) {
		config.Restrictions.ErrorMessage = configRuntime.NewDynamicValue(val)
	}, DefaultRestrictionsErrorMessage)

	// explicitly reset sentry config
	sentry.Config = nil
	config.Sentry, err = sentry.InitSentryConfig()
	if err != nil {
		return fmt.Errorf("parse sentry config from env: %w", err)
	}

	config.MetadataServer.Enabled = false
	if entcfg.Enabled(os.Getenv("EXPERIMENTAL_METADATA_SERVER_ENABLED")) {
		config.MetadataServer.Enabled = true
	}
	config.MetadataServer.GrpcListenAddress = DefaultMetadataServerGrpcListenAddress
	if v := os.Getenv("EXPERIMENTAL_METADATA_SERVER_GRPC_LISTEN_ADDRESS"); v != "" {
		config.MetadataServer.GrpcListenAddress = v
	}
	if err := parsePositiveInt(
		"EXPERIMENTAL_METADATA_SERVER_DATA_EVENTS_CHANNEL_CAPACITY",
		func(val int) { config.MetadataServer.DataEventsChannelCapacity = val },
		DefaultMetadataServerDataEventsChannelCapacity,
	); err != nil {
		return err
	}

View on GitHub (pinned to 75aa4b6d11)

Solutions

  1. Read the inner error after "parse sentry config from env:" to identify the offending SENTRY_* variable
  2. Fix that variable — SENTRY_DSN must be a valid URL like https://key@host/project and SENTRY_TRACES_SAMPLE_RATE a float in [0,1]
  3. Remove all SENTRY_* variables to disable Sentry entirely (config is explicitly reset to nil here anyway)

Example fix

// before
SENTRY_TRACES_SAMPLE_RATE=50%

// after
SENTRY_TRACES_SAMPLE_RATE=0.5
Defensive patterns

Strategy: validation

Validate before calling

if dsn := os.Getenv("SENTRY_DSN"); dsn != "" {
    if u, err := url.Parse(dsn); err != nil || u.Scheme == "" || u.Host == "" {
        return fmt.Errorf("SENTRY_DSN is not a valid URL: %q", dsn)
    }
}
if r := os.Getenv("SENTRY_TRACES_SAMPLE_RATE"); r != "" {
    f, err := strconv.ParseFloat(r, 64)
    if err != nil || f < 0 || f > 1 {
        return fmt.Errorf("SENTRY_TRACES_SAMPLE_RATE must be a float in [0,1], got %q", r)
    }
}

Try / catch

if err := LoadConfig(...); err != nil {
    if strings.Contains(err.Error(), "parse sentry config from env:") {
        log.Fatalf("sentry env config invalid (check SENTRY_DSN / sample rates): %v", err)
    }
    return err
}

Prevention

When it happens

Trigger: SENTRY_* env vars (e.g. SENTRY_DSN invalid URL, SENTRY_TRACES_SAMPLE_RATE="0.5x" or out of [0,1], SENTRY_ENVIRONMENT issues) fail InitSentryConfig while LoadConfig runs.

Common situations: Pasting a DSN with surrounding quotes/whitespace; setting a sample rate like "50" instead of "0.5"; leftover SENTRY_* vars from a copied compose file pointing at a decommissioned project.

Related errors


AI-assisted analysis of weaviate/weaviate@75aa4b6d11 (2026-09-04). Data as JSON: /api/errors/54ec203e14bc4513. Report an issue: GitHub.