PHP HTML JavaScript
Clone or download
antonioribeiro Merge pull request #68 from rap2hpoutre/patch-1
It's not compatible with 4.x anymore
Latest commit f3999c2 Jan 5, 2018

Health Monitor

Laravel Server & App Health Monitor and Notifier

Latest Stable Version License Downloads Code Quality Build Build StyleCI

This package checks if the application resources are running as they should and creates a service status panel. It has the following main points:

  • Highly extensible and configurable: you can create new checkers and notifiers very easily, and you can virtually change everything on it.
  • Easy configuration: uses YAML as configuration files
  • Resilient resource checker: if the framework is working and at least one notification channel, you should receive notification messages.
  • Built-in notification system: get notifications via mail, slack, telegram or anything else you need.
  • Routes for: panel, json result, string result and resource.
  • Configurable panel design.
  • Cache.
  • Schedule checks to automatically receive notifications when a service fails.
  • View app error messages right in the panel.
  • Http response codes 200 and 500, on error, for services like Envoyer to keep track of your app health.

Built-in Checkers

Heath has pre-configured resource checkers for the following services:

  • Broadcasting
  • Cache
  • Database
  • DocuSign
  • Filesystem
  • Framework
  • Health
  • Http
  • Https
  • LaravelServices
  • LocalStorage
  • Mail
  • MySql
  • NewrelicDeamon
  • NginxServer
  • Php
  • PostgreSqlServer
  • Queue
  • QueueWorkers
  • RebootRequired
  • Redis
  • RedisServer
  • S3
  • ServerLoad
  • ServerUptime
  • Sshd
  • Supervisor

But you can add anything else you need!

Easy Configuration

Creating new resources monitors is easy, just create a new YAML file in app's config/health folder and it's done. Here's some examples:

Amazon S3

name: S3
abbreviation: s3
checker: PragmaRX\Health\Checkers\CloudStorageChecker
notify: true
driver: s3
file: pragmarx-health-s3-testfile.txt
contents: {{ str_random(32) }}
error_message: 'Amazon S3 connection is failing.'
column_size: 4


name: NginxServer
abbreviation: ngnxsrvr
checker: PragmaRX\Health\Checkers\ProcessChecker
command: 'pgrep %s'
method: process_count
process_name: nginx
        count: 4
        message: 'Process "%s" has not enough instances running: it has %s, when should have at least %s'
        count: 8
        message: 'Process "%s" exceeded the maximum number of running instances: it has %s, when should have at most %s'
notify: true
pid_file_missing_error_message: 'Process ID file is missing: %s.'
pid_file_missing_not_locked: 'Process ID file is not being used by any process: %s.'
column_size: 4



default panel

Panel alternate design

If you have lots of services to check, you may change the default panel design to use less space:

default panel

Panel in 4 columns layout

default panel

Error Messages

Mouse over a failing resource and get instant access to the error message:

default panel

Click the resource button and you'll get an alert showing the error message:

default panel

Slack Notification

Here's an example of notification sent via Slack:

default panel

Artisan Console Commands


Use the command health:panel to view the status of your services in console.


Use the command health:check to check all your resources and send notifications on failures.

default panel


After installing you will have access to the folowing routes:


The main panel route.


Returns a json with everything the package knows about your services:

default panel


Returns a string with status on all your services, useful when using other monitoring services:



Returns a json with information about a particular service:

default panel


  • PHP 5.6+
  • Laravel 5.3+


Use Composer to install it:

composer require pragmarx/health

Installing on Laravel

Add the Service Provider to your config/app.php:


Publish config and views

php artisan vendor:publish --provider="PragmaRX\Health\ServiceProvider"

Hit The Health Panel

Configure All The Things

  • Panel
  • Title and messages
  • Resource checkers
  • Slack icon
  • Sort resources in the panel
  • Notification channels
  • Template location
  • Routes and prefixes
  • Mail server
  • Cache
  • Scheduler

Allowing Slack Notifications

To receive notifications via Slack, you'll have to setup Incoming Webhooks and add this method to your User model with your webhook:

 * Route notifications for the Slack channel.
 * @return string
public function routeNotificationForSlack()
    return config('services.slack.webhook_url');


When Health result is cached, you can flush the chage to make it process all resources again by adding ?flush=true to the url:


If you prefer to build you own notifications systems, you can disable it and listen for the following event


Broadcasting Checker

Broadcasting checker is done via ping and pong system. The broadcast checker will ping your service, and it must pong back. Basically what you need to do is to call back a url with some data:

Redis +

var request = require('request');
var server = require('http').Server();
var io = require('')(server);
var Redis = require('ioredis');
var redis = new Redis();


redis.on('message', function (channel, message) {
    message = JSON.parse(message);

    if (message.event == 'PragmaRX\\Health\\Events\\HealthPing') {
        request.get( + '?data=' + JSON.stringify(;



<!DOCTYPE html>
        <title>Pusher Test</title>
        <script src=""></script>
            var pusher = new Pusher('YOUR-PUSHER-KEY', {
                encrypted: true

            var channel = pusher.subscribe('pragmarx-health-broadcasting-channel');

            channel.bind('PragmaRX\\Health\\Events\\HealthPing', function(data) {
                var request = (new XMLHttpRequest());

      "GET", data.callbackUrl + '?data=' + JSON.stringify(data));


        Pusher waiting for events...


$ composer test


Antonio Carlos Ribeiro


Health is licensed under the BSD 3-Clause License - see the LICENSE file for details


Pull requests and issues are more than welcome.