Skip to main content

Alert rules

The daemon samples every 30 seconds and keeps 30 minutes of history. Each rule is evaluated over that history, so "for 5 minutes" means five minutes of consecutive evidence, not one bad sample.

AlertSeverityFires whenDefault thresholds
service_downcriticalthe service is not active for two samples in a row
crash_loopcriticalsystemd restarted the node at least twice within the windowwindow_minutes=10 count=2
sync_stalledcriticalthe node reports synced but its newest momentum is older than 2 minutes, twice in a row
momentums_stalledcriticalthe frontier height has not moved for the window while the service runs and RPC answers, whatever sync state the node claimsminutes=5
sync_behindwarningsyncing, and the gap to the target height has not shrunk over the windowminutes=10
not_enough_peerswarningfewer than min_peers peers, or the node itself reports not-enough-peers, for the windowmin_peers=3 minutes=5
pillar_missedcriticalover the window your pillar's expected momentums grew by missed more than its produced count; an epoch rollover restarts the windowminutes=30 missed=2
disk_lowwarningthe data directory's filesystem has less than min_free_gb freemin_free_gb=15
memory_highwarningznnd's resident memory exceeds pct of host memorypct=85
fds_highwarningopen files exceed pct of the limit (32768)pct=80
backup_stalewarningthe backup timer is enabled and the newest archive is older than cadence + 1 day
rpc_unreachablewarningthe service is active but the local RPC has not answered for the windowminutes=5
node_silentcriticalraised by the relay: no heartbeat from the node for 5 minutesrelay setting
update_availableinfo, off by defaulta newer nomctl release exists, or the configured go-zenon branch has commits beyond the running build; sent once, no reminders

Which alert for which failure

SituationYou get
znnd halts or is killedservice_down in about a minute, then service back up
the whole machine loses power or networknode_silent after 5 minutes, then node reporting again
znnd keeps crashing and systemd keeps restarting itcrash_loop
go-zenon runs but momentums stop advancingmomentums_stalled within 5 minutes, regardless of what the node says about its sync state; sync_stalled sooner if it claims to be synced
initial sync makes no progresssync_behind, often with not_enough_peers explaining why
your pillar is online but skipping its production slotspillar_missed
the disk is filling updisk_low; backups also stop below the same 15 GB minimum
about to be killed by the OOM killer, or hitting the file limitmemory_high, fds_high

CPU is deliberately not an alert: a syncing node runs hot for hours, and the failures that matter have their own alerts. Load is visible in nomctl status and top.

Behaviour

  • Every alert has a recovery message.
  • A firing alert repeats every 10 minutes until it clears.
  • The first evaluation after the daemon starts only establishes a baseline and announces "alerts started"; nothing else is sent until a condition is confirmed on a later sample.
  • A report the relay could not deliver (Telegram outage) is answered with an error, and one the relay never received (relay down) times out; in both cases the node keeps the transition pending and re-sends it on its next sample until the relay confirms delivery. The relay records an alert as sent only after Telegram accepted it. The one gap is the relay's own node_silent while Telegram is down: it is retried every 30 seconds by the relay until it goes through.