Each cron, backup job or scheduled task gets a slug URL. It pings on success; we alert when the ping doesn't come. Late and dead are different events — late is yellow, dead is red.
Unlike a crashed service, a job that never ran produces no metric and no log. You find out months later, usually because something downstream broke.
A schedule the check knows about turns that into yes or no, rather than an inference from side effects.
A backup twenty minutes late might be a slow disk. A backup that has not pinged in 24 hours is a problem. They alert differently.
POST or GET with start, success or fail. One line at the end of your script.A URL per check, hit at the end of the run. No SDK, no API key — the slug is the authentication.
Interval or cron schedule, plus a grace period, define when the ping was due and how much lateness is tolerable.
Late is a warning while the job may still finish. Dead is a page. Conflating them is why cron alerts get muted.
Heartbeats are part of every plan.