Skip to content
Oh Dear

Beyond a 200 response

Application health monitoring.

An app can be online while the work behind it is breaking. Oh Dear reads your app's own health results through one protected endpoint and alerts you to problems, recoveries, and results that stopped updating.

10-day free trial · No credit card required · Every feature included

One protected endpoint Stale results detected
  • Bitmovin
  • HBO Nordic
  • Obsidian
  • Laravel
  • Fathom Analytics
  • PHP 8
  • Stanford University
  • Takeaway.com
  • IGN
  • VRT NWS
  • spatie

Uptime is only one signal

Your homepage can load while the app is already failing.

A public uptime check confirms your app answers. It cannot know whether your database, cache, mail path, disk, or background workers are healthy unless your application says so.

Observe Public vs internal

Uptime tells you whether the app answers. Health tells you whether it still works.

A cached page or a shallow health route can respond while the systems behind it are degraded. The dashboard stays green because the only question being asked is whether an HTTP response arrived.

Public route 200 OK Homepage loads normally
App-reported health Queue worker failed Background jobs not processing
Detect App-defined checks

Your application knows what a generic monitor cannot.

You decide which conditions matter: database availability, Redis connectivity, disk usage, outbound mail, application-error volume, worker state, or something specific to your application.

OK Database availability App-defined
OK Redis connectivity App-defined
Warning Disk usage App-defined
OK Outbound mail App-defined
Failed Queue worker App-defined

For the outside-in view, pair application health with website uptime monitoring.

One endpoint, separate checks

Report every result through one endpoint.

Oh Dear does not execute code on your server. Your team decides which conditions matter and exposes the results at an HTTP endpoint. Oh Dear reads them every minute and turns them into visible state, history, and alerts.

Health endpoint flow Illustrative
Oh Dear Request with secret
Your application Verify secret, run checks
Result JSON with per-check states
oh-dear-health-check-secret Your application should verify this header before returning results.

Full JSON contract and field reference in the application health documentation.

Five reported states

See a separate result for every check.

A single /health returning true hides which dependency failed. A structured result gives every condition its own status, summary, and notification message.

States Five states

Each check reports one of five states.

A database can be healthy while a worker fails. Status, summary, and notification message together tell the responsible person which result changed and what the application reported.

OK ok the check passed
Warning warning approaching a threshold
Failed failed the condition failed
Crashed crashed the check could not complete
Skipped skipped the check did not run
Detail Result fields

More than a status dot.

Each result can carry a short summary, a notification message, and metadata, so responders get context instead of a colour change.

name: "Queue worker"
status: "failed"
shortSummary: "Worker not running"
notificationMessage: "Horizon worker stopped after deploy"
Queue worker · Result history
OK, worker running and processing 09:48
Warning, queue depth above threshold 10:02
Failed, worker not running 10:14
OK, worker restarted and processing 10:31

History is kept for 30 days, retaining the most recent 30 results per check. The API can retrieve each check's history, export results for a longer archive, and snooze individual checks.

When results stop updating

An old green result is not a current green result.

Every health report carries a finishedAt timestamp. A crashed worker, a hung script, or a stalled deploy can leave old JSON behind that still says everything is fine.

Health report stale, last run over 10 minutes ago
Database, connections healthy 10:14 (stale)
Redis, connected 10:14 (stale)
Queue worker, running 10:14 (stale)

If the reported result is more than 10 minutes old, Oh Dear warns that the output is stale. It will not diagnose what stopped your scheduler, but it does tell you the green you are looking at is not current.

Laravel, PHP, or any stack

Use the same health format in every stack.

Any language or framework that can return the JSON contract can report health to Oh Dear. The Laravel and PHP packages make the first endpoint faster, but they are accelerators, not requirements.

Across client projects

One view for the health your projects report.

Each project defines its own checks. Oh Dear reads them all through the same contract and shows which one needs attention, whatever the language behind it.

ProjectStackHealth
shop.example Laravel 4/4 OK
api.client Java 3/4 Warning
admin.internal PHP 5/5 OK
Jonathan Lanoy
One of the most useful features for us is the application health monitoring, as we developed and used in all our projects an open source Java library to expose different health keys to Oh Dear.

Jonathan Lanoy, CEO at Zileo

Jonathan's team built a Java library around the endpoint contract, outside the Laravel and PHP ecosystem entirely.

Fastest path

Laravel

spatie/laravel-health

Enable the Oh Dear endpoint, add the shared secret, and register your checks.

PHP helper

PHP

ohdearapp/health-check-results

Build the expected health results and return them from your endpoint.

Any framework

Any other stack

finishedAt + checkResults[]

Return the same protected JSON contract from Java, Python, Node, Go, or anything else.

Setup aid Starting from scratch? The Application Health tab gives you a ready-made prompt to scaffold the endpoint. You still review and own the implementation.

Operational ownership

Send the result to the person who owns the fix.

Oh Dear notifies you when it detects a health problem, when that problem recovers, and when the health output goes stale. A failing check is limited to one notification per hour, so a check that stays broken does not fill the channel.

For agencies, that means each client application's alerts reach whoever owns that project, on the channels that team already relies on.

Slack
Email
Webhook
Explore notifications and routing

What this does not replace

Know what application health does, and what it does not.

Application health is a focused layer between a basic uptime check and a full APM platform. It complements the rest of your monitoring rather than replacing it.

NeedBest surface
Is the public site reachable? Website uptime monitoring
Does an API meet response assertions? API and endpoint monitoring
Did a scheduled task run? Scheduled task monitoring
What internal conditions does the app report right now? Application health monitoring
Can a user complete a browser journey? AI-powered monitoring
Traces, logs, profiles, or exceptions? APM, logging and error-monitoring tooling

Application health shows the states your app deliberately reports. It does not collect traces, logs, profiles, browser journeys, or automatic root-cause analysis.

No feature tiers

Every check.
Every plan.

Application health monitoring is included on every plan. Choose by the number of sites and servers you monitor, not by which checks you need.

Start with everything on.

Try application health alongside uptime, certificates, DNS, scheduled tasks, and the rest of the toolkit.


  • Application health on every plan
  • Every monitoring feature included
  • Plans scale by monitored capacity
  • No credit card required
Start a free trial

10-day free trial. No credit card.

Setup and security

Questions before the first health check.

What Oh Dear reads, how the endpoint works, and where application health monitoring ends.

What is application health monitoring?

It reads app-defined health results from an endpoint you expose, keeps each result visible, and alerts you when a reported state develops a problem or goes stale. A disk filling up, a queue that stopped processing, a database or Redis that is unreachable: things a homepage request cannot see.

How is application health different from uptime monitoring?

Uptime monitoring observes whether the public URL responds. Application health shows the internal conditions your application chooses to check. Use both: one is the outside view, the other is the inside view.

Does Oh Dear run code inside my application?

No. Your application or infrastructure runs the checks and returns their results as JSON. Oh Dear reads those results from the endpoint you configured.

Do I need to install an agent?

No resident agent. You expose a single health endpoint that returns your checks as JSON, protected by a secret, and Oh Dear requests it every minute.

How is the health endpoint protected?

Oh Dear sends the shared secret you configured in the oh-dear-health-check-secret header. Your application should verify it before returning any results.

What happens when health results go stale?

If the finishedAt timestamp in the report is more than 10 minutes old, Oh Dear warns that the results are stale. That is how you find out the process producing them has stopped, instead of staring at an old green result.

Does application health monitoring only work with Laravel?

No. The endpoint is a simple JSON contract, so any language or framework that can serve HTTP works. On Laravel, spatie/laravel-health gives you the endpoint and a stack of ready-made checks out of the box.

What can I check?

Whatever matters to your app: database and cache connectivity, queue and scheduler health, disk space, outbound mail, plus any custom check you write. You can report up to 200 checks from a single application.

Is this APM?

No. It does not collect traces, logs, profiles, or automatic root-cause data. It reads the health states your application deliberately reports.

How much result history is available?

Up to 30 days, keeping the most recent 30 results for each check. Use the API to export results if you need a longer archive.

How often will Oh Dear notify me about a failing check?

Once per failing check per hour, so a check that stays broken does not fill your Slack channel. You also get a notification when the problem is fixed.

Is application health included in every plan?

Yes. Plans scale by the number of sites and servers you monitor, not by which features you switch on.

See all other FAQ items

Connect your health endpoint

Start monitoring what your application knows.

Connect one protected health endpoint and keep every result visible. Every feature on, no credit card.