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
- Treat ErrCodeAlertmanagerStateNotFound as a non-fatal 'no state yet' case and initialize empty state
- Verify silences/nflog have actually been persisted (check that state was saved at least once)
- 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
- Check for empty state strings before calling Get
- Treat not-found as expected on fresh installations and seed empty silences/nflog
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.