Best Practices

Use descriptive check names

Name checks after what they monitor, not how they run. Nightly DB Backup is better than Cron Job #3. When you get an alert at 3 AM, a clear name saves time.

Set appropriate grace periods

Don't set the grace period too tight — account for network latency, server load, and normal job duration variance. A grace period that's 2x your typical job duration is a good starting point.

Use start + success + fail signals

Using all three signal types gives you the most visibility:

  • Start — tells you the job began, and enables run duration tracking.
  • Success — confirms successful completion.
  • Fail — triggers an immediate alert without waiting for the grace period.

Always use --retry with curl

Network hiccups happen. Adding --retry 3 makes your pings resilient to momentary connectivity issues without adding complexity.

Don't let ping failures break your job

The monitoring call should never cause your actual task to fail. Use timeout flags (--max-time 10 with curl) and handle errors gracefully. Your backup is more important than the ping.

Monitor the scheduler itself

If you use a central scheduler (like Laravel's schedule:run or a cron daemon), create a dedicated check that pings every minute. If the scheduler itself stops, all your other checks will eventually alert — but a dedicated "scheduler heartbeat" catches it immediately.

Use tags to organize checks

Group related checks with tags like production, staging, backups, or payments. Tags make it easy to filter your dashboard and create aggregate status badges.

Pause checks during maintenance

Before a planned deployment or maintenance window, pause the affected checks from your dashboard. This prevents false alerts while you work. Don't forget to resume them afterward.