SigNoz/signoz · warning · errors SigNozError

ErrCodeAlertmanagerStateNotFound

ErrCodeAlertmanagerStateNotFound

Error message

state not found

What it means

Get on the alertmanager state store returns this when the requested state bucket (silences or nflog) is empty. State is stored base64-encoded per section; an empty string means no persisted state exists for that name yet. Callers like nonEmptyConfigsField use it to detect first-run/no-state conditions.

Source

Thrown at pkg/types/alertmanagertypes/state.go:83

	}

	s.UpdatedAt = time.Now()

	return int64(len(marshalledState)), nil
}

func (s *StoreableState) Get(stateName StateName) (string, error) {
	base64encodedState := ""

	switch stateName {
	case SilenceStateName:
		base64encodedState = s.Silences
	case NFLogStateName:
		base64encodedState = s.NFLog
	}

	if base64encodedState == "" {
		return "", errors.New(errors.TypeNotFound, ErrCodeAlertmanagerStateNotFound, "state not found")
	}

	decodedState, err := base64.StdEncoding.DecodeString(base64encodedState)
	if err != nil {
		return "", err
	}

	return string(decodedState), nil
}

type StateName struct {
	name string
}

func (s StateName) String() string {
	return s.name
}

View on GitHub (pinned to 5069bf80b0)

Solutions

  1. Treat ErrCodeAlertmanagerStateNotFound as a non-fatal 'no state yet' case and initialize empty state
  2. Verify silences/nflog have actually been persisted (check that state was saved at least once)
  3. If state should exist, check persistence backend configuration (volume/DB) is correct

Example fix

// before
val, err := state.Get(SilencesStateName)
if err != nil { return err }
// after
val, err := state.Get(SilencesStateName)
if err != nil {
  if errors.Is(err, ErrCodeAlertmanagerStateNotFound) { val = "" } else { return err }
}
Defensive patterns

Strategy: try-catch

Try / catch

val, err := state.Get(name)
if err != nil {
  if apiErr, ok := err.(errors.Error); ok && apiErr.Code == ErrCodeAlertmanagerStateNotFound {
    val = "" // first run: no persisted state yet
  } else {
    return err
  }
}

Prevention

When it happens

Trigger: Calling state.Get(SilencesStateName) or Get(NFLogStateName) before any silences or notifications have been created/persisted; reading state right after a fresh install or state wipe.

Common situations: Fresh deployments with no silences yet, state persistence not mounted/wired so nothing was ever saved, or querying immediately after state reset.

Related errors


AI-assisted analysis of SigNoz/signoz@5069bf80b0 (2026-08-28). Data as JSON: /api/errors/bf9517fb33d8a681. Report an issue: GitHub.