PHPackages                             waypointer-digital/health-laravel - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Logging &amp; Monitoring](/categories/logging)
4. /
5. waypointer-digital/health-laravel

ActiveLibrary[Logging &amp; Monitoring](/categories/logging)

waypointer-digital/health-laravel
=================================

Kanbino Health endpoint for Laravel — emits stack profile + extensible probes for uptime + security advisory matching

v1.2.1(1mo ago)0140MITPHPPHP ^8.2

Since May 8Pushed 1mo agoCompare

[ Source](https://github.com/Waypointer-Digital/health-laravel)[ Packagist](https://packagist.org/packages/waypointer-digital/health-laravel)[ Docs](https://github.com/Waypointer-Digital/health-laravel)[ RSS](/packages/waypointer-digital-health-laravel/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependencies (3)Versions (6)Used By (0)

Kanbino Health (Laravel)
========================

[](#kanbino-health-laravel)

A drop-in `/health` endpoint for Laravel apps that emits:

1. **`status`** — `healthy` or `degraded` based on probe outcomes (HTTP 200 / 503).
2. **`checks`** — per-probe results (database, redis, queue, plus your own).
3. **`stack`** — auto-collected OS profile (id/version/codename), kernel, PHP version, and dpkg package versions for a configured allowlist.

Kanbino's uptime monitor consumes the `stack` section to match your servers against Ubuntu Security Notices and oss-security advisories.

Install
-------

[](#install)

```
composer require waypointer-digital/health-laravel
php artisan vendor:publish --tag=kanbino-health-config
```

The route `GET /health` is registered automatically. Override the path in `config/kanbino-health.php` or via `KANBINO_HEALTH_PATH=/internal/health`.

Response shape
--------------

[](#response-shape)

```
{
  "status": "healthy",
  "checks": {
    "database": { "ok": true, "ms": 4 },
    "redis":    { "ok": true, "ms": 1 },
    "queue":    { "ok": true, "depth": 3 }
  },
  "stack": {
    "os": { "id": "ubuntu", "version": "24.04", "codename": "noble", "name": "Ubuntu 24.04 LTS" },
    "kernel": "6.8.0-49-generic",
    "php": "8.5.1",
    "packages": {
      "nginx": "1.24.0-2ubuntu7.1",
      "postgresql": "16.4-0ubuntu0.24.04.1",
      "redis-server": "5:7.0.15-1ubuntu0.1"
    }
  }
}
```

Configuration
-------------

[](#configuration)

`config/kanbino-health.php`:

```
return [
    'enabled'    => env('KANBINO_HEALTH_ENABLED', true),
    'path'       => env('KANBINO_HEALTH_PATH', '/health'),
    'middleware' => ['web'],
    'token'      => env('KANBINO_HEALTH_TOKEN'),

    'stack' => [
        'enabled'  => true,
        'packages' => ['nginx', 'postgresql', 'redis-server', 'php8.5-fpm', /* ... */],
        'cache_seconds' => 3600,
    ],

    'probes' => [
        \Kanbino\Health\Probes\DatabaseProbe::class,
        \Kanbino\Health\Probes\RedisProbe::class,
        \Kanbino\Health\Probes\QueueProbe::class,

        // Opt-in system probes:
        // \Kanbino\Health\Probes\HorizonProbe::class,  // requires laravel/horizon
        // \Kanbino\Health\Probes\DiskProbe::class,
        // \Kanbino\Health\Probes\MemoryProbe::class,
        // \Kanbino\Health\Probes\CpuProbe::class,
    ],
];
```

### Built-in probes

[](#built-in-probes)

ProbeWhat it checksDefaultNotes`DatabaseProbe``SELECT 1` on default connectionenabledReports `ms``RedisProbe``PING` on default Redis connectionenabledReports `ms``QueueProbe`Reads queue size on default connectionenabledReports `depth` (the queue *backend*, not the workers)`HorizonProbe`Active Horizon master supervisorsopt-inRequires `laravel/horizon`. Catches "Redis up, but Horizon dead and jobs piling up" — different signal than QueueProbe`DiskProbe`Disk usage on a pathopt-inConstructor: `path`, `failAtPercent` (default `/`, 95%)`MemoryProbe`Used memory from `/proc/meminfo`opt-inConstructor: `failAtPercent` (default 95%). Returns OK with note on macOS where `/proc` isn't available`CpuProbe`Load avg vs core countopt-inConstructor: `failAtPercent` (default 150%, i.e. 1.5× core saturation). Cores read from `/proc/cpuinfo`, no shell\_execTo override default thresholds or paths, bind in your `AppServiceProvider`:

```
$this->app->bind(\Kanbino\Health\Probes\DiskProbe::class, fn () => new \Kanbino\Health\Probes\DiskProbe('/var/www', 90.0));
$this->app->bind(\Kanbino\Health\Probes\CpuProbe::class, fn () => new \Kanbino\Health\Probes\CpuProbe(120.0));
```

### Auth

[](#auth)

If `KANBINO_HEALTH_TOKEN` is set, requests must send `Authorization: Bearer `. The Kanbino monitor sends the configured token automatically.

### Custom probes

[](#custom-probes)

Implement `Kanbino\Health\Probes\HealthProbe` and add it to the `probes` config array:

```
namespace App\Health;

use Kanbino\Health\Probes\HealthProbe;
use Kanbino\Health\Probes\ProbeResult;

class ScalewayReachableProbe implements HealthProbe
{
    public function name(): string
    {
        return 'scaleway';
    }

    public function run(): ProbeResult
    {
        $ok = @fsockopen('s3.nl-ams.scw.cloud', 443, $err, $errstr, 2) !== false;
        return $ok ? ProbeResult::ok() : ProbeResult::fail($errstr ?: 'unreachable');
    }
}
```

```
// config/kanbino-health.php
'probes' => [
    \Kanbino\Health\Probes\DatabaseProbe::class,
    \Kanbino\Health\Probes\RedisProbe::class,
    \Kanbino\Health\Probes\QueueProbe::class,
    \App\Health\ScalewayReachableProbe::class,  // your project-specific check
],
```

A failing probe flips `status` to `degraded` and the endpoint returns HTTP 503 — Kanbino's monitor will mark the service as degraded.

### Stack package detection

[](#stack-package-detection)

Stack package versions are read from `/var/lib/dpkg/status` (Debian/Ubuntu only, no shell exec). On non-dpkg systems (macOS, Alpine), the `packages` block will be empty but OS/kernel/PHP detection still works where possible.

The OS is detected from `/etc/os-release` — `ID`, `VERSION_ID`, `VERSION_CODENAME`. Codename matching (`noble`, `jammy`, …) is what Kanbino uses to filter Ubuntu Security Notices for your release.

Manual usage
------------

[](#manual-usage)

If you don't want the auto-registered route, set `enabled => false` and use `HealthResponse` from your own controller:

```
use Kanbino\Health\HealthResponse;

Route::get('/my-health', function (HealthResponse $response) {
    return response()->json($response->build());
});
```

###  Health Score

44

—

FairBetter than 90% of packages

Maintenance94

Actively maintained with recent releases

Popularity15

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity50

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

5

Last Release

32d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/6133f6c6081a85a9b24bed114032fb46179b111e4428254e7c1fd932db40e9e8?d=identicon)[henryvrolings](/maintainers/henryvrolings)

---

Top Contributors

[![henryvrolings](https://avatars.githubusercontent.com/u/1826196?v=4)](https://github.com/henryvrolings "henryvrolings (5 commits)")

---

Tags

laravelmonitoringhealthsecurityuptimekanbino

### Embed Badge

![Health badge](/badges/waypointer-digital-health-laravel/health.svg)

```
[![Health](https://phpackages.com/badges/waypointer-digital-health-laravel/health.svg)](https://phpackages.com/packages/waypointer-digital-health-laravel)
```

###  Alternatives

[psalm/plugin-laravel

Psalm plugin for Laravel

3325.1M337](/packages/psalm-plugin-laravel)[laravel/mcp

Rapidly build MCP servers for your Laravel applications.

76318.2M110](/packages/laravel-mcp)[api-platform/laravel

API Platform support for Laravel

59156.3k10](/packages/api-platform-laravel)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
