Skip to content

Operations

What survives a restart depends entirely on -eventlog:

  • memory (the default) keeps the event log in process memory only. A restart loses every event — the projections (current state, history) rebuild from nothing, not from where they left off.
  • file://<path> persists the log to an embedded Pebble store at that path, durable across restarts. Pass -retain to make jaque fail fast at startup instead of running if -eventlog doesn’t guarantee persistence.
  • nats://<host:port> persists to an external JetStream instance, the shared log a multi-engine deployment reads from.

With file:// or nats://, three flags govern how much history the log actually keeps before it’s compacted away:

  • -eventlog-retain-check-executed (default 168h, i.e. 7 days) — how long check_executed events are kept.
  • -eventlog-retain-state-changed (default 0, unbounded) — how long state_changed events are kept; 0 is what Nagios-style state history needs.
  • -eventlog-retain-reachability-changed (default 0, unbounded) — how long reachability_changed events are kept.

-compaction-interval (default 1h) is how often the embedded transport’s retention pass runs and actually drops events past those windows.

With -eventlog file://<path>, the durable state is the Pebble directory at <path>. Two ways to back it up:

  • Cold copy: stop jaque, copy the directory, restart. Pebble is not safe to copy while the process is writing to it.
  • Rely on replay: if you’re running -eventlog nats://... instead, the external JetStream log is the durable copy — a fresh jaque instance pointed at the same log replays it from scratch, so there is nothing process-local to back up.

Replace the binary and restart. There’s no migration step: the event log format doesn’t change across a binary upgrade, and every projection (current object state, dashboard rows, Livestatus tables) rebuilds by replaying the log from wherever it resumes — from the start for memory, from where the log left off for file:///nats://. Restart each role (engine, worker, ui, sink, notifier) independently in a split deployment; there’s no required ordering between them.

  • ICMP checks return UNKNOWN with permission denied — the icmp check uses unprivileged datagram sockets, which most Linux distributions don’t allow by default. Run sudo sysctl -w net.ipv4.ping_group_range="0 2147483647" (or a narrower group range). See Quickstart.
  • A passive object keeps going UNKNOWN — check its freshness_threshold. Once a result is older than that window, the object is forced to stale_status (UNKNOWN by default) until a fresh result arrives. See Passive checks.
  • jaque won’t start, or a listener won’t bind — another process is already on that port. Check -listen (dashboard, API, /metrics), -livestatus-listen (Livestatus TCP), and -livestatus-socket (Livestatus UNIX socket) for a conflicting address or path.