← Back to how it works

Heartbeats

The failure mode no exception tracker can see on its own

A cron job or recurring task that's supposed to run but silently stopped raises nothing, so nothing would otherwise tell you.

Three states, not two

A heartbeat is ok as long as it's pinged within its expected interval. Past that, it goes late: a soft, non-alerting "keep an eye on this" state for a job running a few minutes behind, which isn't necessarily broken yet. Only once it's past the expected interval plus its own grace period does it become missed, and that's the only transition that actually sends a notification.

Both the interval and the grace period are set per heartbeat, so a job that runs every five minutes and a nightly batch job can each get a grace period that actually fits how much of a delay is normal for that specific job.

A heartbeats list showing one heartbeat ok and one missed

Every heartbeat for a project, at a glance.


Checked every minute, alerts once

A sweep runs every minute and recomputes every non-paused heartbeat's status. A heartbeat_missed notification only fires on the specific transition into the missed state, not on every subsequent sweep while it remains missed, so a job that's been down for six hours produces one alert, not 360 of them.

There's deliberately no separate "recovered" notification either. The moment a real ping arrives, the heartbeat flips straight back to ok immediately, bypassing the sweep entirely, so there's nothing left for the next sweep to observe as "just recovered" and announce.

A heartbeat's ping URL and status, showing its expected interval, grace period, and last check-in

Its own ping URL, expected interval, and grace period.


Pausing is safe

A paused heartbeat is excluded entirely from the sweep, for planned maintenance windows, so pausing one never fires a stale missed alert the moment it's unpaused. Resuming doesn't force a false all-clear either: it re-evaluates for real against however long it's actually been silent, landing on exactly what the very next sweep would have computed anyway.


See it on your own data

Free plan included, no credit card required.

Get started free