Laravel Uptime Monitor
Published on by Diaa Fares
The internet has become indispensable and the revenue source for a lot of people. It’s not acceptable for most web apps to be down even for a few seconds.
Spatie released a very handy package called Laravel Uptime Monitor, which aims to provide an easy and powerful way to monitor your website uptime and SSL certificate expiration date; it will notify you when your site is down using the flexible Laravel 5.3 notification system. Also, when your website goes up again, the package will kindly notify and inform you about the downtime period.
Let’s take a look at how this package can be set up and used.
Installation
First, install Laravel Uptime Monitor through Composer:
composer require spatie/laravel-uptime-monitor
Add its service provider in config/app.php:
'providers' => [ ... Spatie\UptimeMonitor\UptimeMonitorServiceProvider::class,];
Then, to publish the config file, run the following command in your terminal:
php artisan vendor:publish --provider="Spatie\UptimeMonitor\UptimeMonitorServiceProvider"
Run the following command to migrate the monitors table to database:
php artisan migrate
Finally, open app/Console/Kernel.php file and schedule monitor:check-uptime and monitor:check-certificate commands like this:
protected function schedule(Schedule $schedule){ $schedule->command('monitor:check-uptime')->everyMinute(); $schedule->command('monitor:check-certificate')->daily();}
Be sure you added the Laravel Cron entry to your server to enable Laravel Uptime Monitor commands to run repeatedly:
* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1
Usage
After installing the package, you can add the websites you want to monitor by using monitor:create command. If you add a URL beginning with https:// the package will also start monitoring the SSL certificate:
php artisan monitor:create https://laravel-news.com
Optionally, it will ask you if you want to look for a specific string in the response of the website. If the string does not appear, it will consider the uptime check as failed.
After few minutes, run php artisan monitor:list
It will show a list of all the monitored websites and the result of the uptime and certificate checks with some details about the SSL certificate.
There are also monitor:delete, monitor:enable, and monitor:disable commands. The first is for deleting a website from the monitoring list, the other two commands are for enabling and disabling the monitoring for the provided website URL:
php artisan monitor:delete http://example.comphp artisan monitor:enable http://example.comphp artisan monitor:disable http://example.com
Overview
If you open the config/laravel-uptime-monitor.php configuration file, you will see the Laravel Uptime Monitor package has a lot of configurations and is highly customizable. Please take note of the following important options:
- First, you can customize the notifications option to add your notifications channels for each event the Laravel Uptime Monitor package will fire (it provides six different event types). You can easily use any channel Laravel 5.3 notification system supports like Slack or mail, etc.
- If you use Laravel Uptime Monitor from multiple locations, you can use the location option to distinguish between different locations, as the location will be sent with each notification.
- The resend_uptime_check_failed_notification_every_minutes option is for specifying the delay time between the reminding notifications that will be sent when your website is down; the default is 60 minutes.
- Then, there are two options; one is for specifying the mail that will be notified by the package, the second is for specifying the webhook_url for the Slack if you used the Slack notification channel.
- The run_interval_in_minutes option is for specifying the delay time between uptime check. Note that if an uptime check fails the package will ignore this option and starts checking that site every minute.
- The timeout_per_site option is for specifying the period in seconds that the check process should wait before giving up, the default is ten seconds.
- The fire_monitor_failed_event_after_consecutive_failures determines the number of failed uptime checks before it fires the Spatie\UptimeMonitor\Events\MonitorFailed event, the default is two.
- Then, you have options for fire_expiring_soon_event_if_certificate_expires_within_days, which will fire a SslExpiresSoon event when the remaining days in your SSL certificate are less than the number of days you specify for this option.
If you want a powerful way to monitor a website’s uptime and SSL certificates expiration date, give the Laravel Uptime Monitor a try.