All posts

Healthchecker Explained: The Two Types and How to Choose

September 18, 2026

What Is a Healthchecker?

A healthchecker is any tool or mechanism that verifies a system, service, or job is functioning as expected. That's the whole idea — but the meaning gets murky fast, because the word describes two genuinely different mechanisms that solve opposite problems.

One kind asks a question and waits for an answer. The other waits for a message that never has to be asked for, and treats silence as the problem. Both get called "healthcheckers" in blog posts, vendor docs, and Stack Overflow answers, often without the author noticing the distinction. If you've felt confused reading about healthcheckers across different tools, that inconsistency is the reason — not you. The rest of this article untangles the two categories and gives you a way to pick the right one.

The Two Types of Healthcheckers

Endpoint-based healthcheckers are the kind most developers meet first. A service exposes a /health route or similar, and something else — Kubernetes, a load balancer, Prometheus — polls it on a schedule and reads the response. Kubernetes uses this pattern for liveness and readiness probes: liveness asks "should this container be restarted?" and readiness asks "should traffic be sent here right now?" ASP.NET Core has built-in middleware for exactly this, and the Docker HEALTHCHECK instruction lets a container self-report status the same way. Prometheus's Blackbox Exporter extends the idea further out, probing HTTP, TCP, and DNS endpoints from the outside. All of these share one requirement: something has to be running and reachable to answer the question.

Ping-based healthcheckers flip that model. Instead of an endpoint that gets polled, the monitored job or service actively sends a signal — a ping, heartbeat, or check-in — to a monitoring system on its own schedule. The monitor's only job is to notice when that signal doesn't arrive on time. This is the dead man's switch pattern, borrowed from railway and industrial safety systems: absence of a signal is treated as evidence of failure, not just lack of evidence of success. Open-source projects like healthchecks.io work this way — you set up a check, ping it via HTTP when your job runs, and get alerted the moment a ping doesn't show up inside the expected window. This is heartbeat monitoring, and it solves a category of failure that endpoint checks structurally cannot.

For a wider view of how these ideas apply across a full application stack — databases, queues, third-party dependencies — the broader breakdown of what a healthcheck means is worth a look before you start building anything.

Which Type of Healthchecker Do You Actually Need?

The decision rule is simple. If you're running a long-lived, always-on service that stays up and can be polled at any moment, an endpoint-based healthchecker fits: your API server, your web app, your database proxy. Kubernetes probes, load balancer health checks, and Prometheus exporters were all designed for exactly that shape of workload.

If instead you're running a cron job, a scheduled script, a batch task, or any process that starts, does its work, and exits, endpoint-based checks don't apply — there's no service listening in between runs, so there's nothing to poll. This is where a cron job healthchecker built on the ping model earns its keep. A Prometheus health check setup has real gaps here: it can tell you a target is unreachable right now, but it can't tell you your 2 a.m. backup script silently failed to run at all. A healthchecker for scheduled jobs needs to know the job's schedule and notice when the expected check-in doesn't happen — a different mechanism entirely from polling a live endpoint.

What to Look for in a Ping-Based Healthchecker

Once you've settled on the ping-based category for cron and scheduled work, not all tools in that category are equally reliable. A solid healthcheck monitoring service should give you:

  • Schedule awareness — the ability to describe your job's timing with a cron expression, so the tool knows exactly when to expect the next ping instead of relying on a flat interval.
  • A configurable grace period — some buffer beyond the expected run time before an alert fires, since jobs occasionally run a few minutes late without actually failing. Setting this correctly is its own small skill.
  • Execution history and duration tracking — a record of every run, how long it took, and whether it succeeded, so you can spot jobs that are slowly degrading before they fail outright.
  • Multi-channel alerting — email alone isn't enough at 3 a.m.; look for Slack, SMS, webhooks, or paging integrations.
  • Simple HTTP integration — a curl call or webhook at the start and end of your script, with no agent or SDK to install and maintain.

Common Mistakes That Defeat a Healthchecker

Even a well-chosen ping-based healthchecker fails to do its job if it's set up carelessly. The recurring mistakes:

  • Only pinging on success. If your script pings the monitor at the very end and then hangs before finishing, the ping never fires — whether the job crashed in one second or hung for six hours, and you can't tell the difference. Pinging at start and end closes this gap and gives you real duration data.
  • Skipping grace period tuning. Too tight, and normal timing jitter triggers false positive alerts that train your team to ignore them. Too loose, and a genuinely silent cron failure can sit unnoticed for hours.
  • Relying on a single alert channel. If that one channel is down, muted, or buried under other notifications, the alert might as well not exist.
  • Treating it as set-and-forget. A healthchecker configured once and never revisited will keep monitoring the wrong schedule after a deploy changes job timing, or keep alerting a person who left the team six months ago.

Frequently Asked Questions

What's the difference between a healthchecker and a health check endpoint?

A healthchecker is the general category of tool that verifies something is working; a health check endpoint is one specific implementation, where a running service answers requests on demand. Health check endpoints work for always-on services that can be polled, but they can't monitor jobs that aren't running at the moment someone checks.

Is a healthchecker the same thing as an uptime monitor?

Not exactly. An uptime monitor typically polls a URL from the outside to see if it responds, a form of endpoint-based checking. A ping-based healthchecker inverts that relationship — the monitored system reaches out to the monitor — which is the only way to catch a job that never runs at all.

Can I build my own healthchecker instead of using a hosted tool?

Yes, and open-source options like healthchecks.io's codebase show the pattern clearly: you build an endpoint that accepts pings and tracks whether they arrive on schedule. The tradeoff is ongoing maintenance — grace periods, alert routing, and history tracking all need to be built and kept working yourself.

Do I still need a healthchecker if my cron jobs already log to a file?

Yes, because logs only help if someone is actively reading them. A log file records what happened after the fact, but nothing reviews it proactively or alerts you the moment a run doesn't happen — a healthchecker closes that gap by actively watching for the absence of a check-in.

How does a ping-based healthchecker know a job failed if it never got a signal?

It works from expectation, not confirmation: the tool knows your job's schedule and expected duration, and if a ping doesn't arrive within that window plus its grace period, it treats the silence itself as the failure signal. This dead man's switch logic is what lets it catch crashes, hangs, and jobs that never started.

What's the difference between liveness, readiness, and heartbeat checks?

Liveness checks ask whether a service is running and should be restarted if not; readiness checks ask whether it's currently able to handle traffic. Both are endpoint-based and apply to always-on services. Heartbeat checks are different — they apply to jobs that run and exit, and rely on the job pinging in rather than being polled.

If you've worked through this and landed on the ping-based side — because what you're monitoring is a cron job, scheduled script, or background worker rather than an always-on service — that's precisely the gap Cronevra is built to close. It pings on your schedule, tracks execution history and duration, and alerts you the moment a run goes silent, so a missed cron job never gets discovered days later in a support ticket.