Paul Redmond's Laravel News article, published on September 22, 2026, covers Health for Laravel, a package by Sylvester Damgaard. It adds `/health`, `/health/ready`, and `/health/startup` for the three Kubernetes probe types. Each endpoint can use its own checks. Laravel applications also have the built-in `/up` route, which reports whether the application booted. Health for Laravel provides ten built-in checks for the database, cache, queue, storage, Redis, environment, scheduler, CPU, memory, and disk space.

terminal
composer require cboxdk/laravel-health
php artisan vendor:publish --tag="health-config"
php artisan health:check
php artisan health:check --endpoint=readiness

The checks are assigned in `config/health.php`. A liveness configuration can contain `DatabaseCheck`, readiness can combine database, cache, Redis, queue, and storage checks, and startup can use `EnvironmentCheck`. A probe returns HTTP 200 when all checks are healthy or warning-level. It returns HTTP 503 when a check is critical or unknown. Kubernetes restarts a container after a liveness failure. A readiness failure removes the pod from traffic while the container continues running.

The sample deployment uses `/health` on port 80 with `periodSeconds: 15` for liveness. Readiness uses `/health/ready` with `periodSeconds: 10`. Startup uses `/health/startup` with `failureThreshold: 30` and `periodSeconds: 5`. `/health/status` returns every check result and the hostname. Kubernetes reports the pod name as that hostname. The three probe endpoints omit it.

Health results are cached for 10 seconds by default. An optional HTML page is available at `/health/ui`, and it is disabled by default. Prometheus can scrape `/health`. Every check produces `app_health_check_status`, with values of 1.0 for ok, 0.5 for warning, and 0.0 for critical or unknown. `app_health_check_duration_seconds` records its runtime. The metric namespace comes from `HEALTH_PROMETHEUS_NAMESPACE`.

System data comes from the author's `cboxdk/system-metrics` package, which supports Linux and macOS. The metrics include load averages, memory, disk usage for each mount point, network bytes per interface, and uptime. The package reads cgroup v1 and v2 limits inside containers, so memory figures describe the container. Container deployments also expose `app_container_memory_limit_bytes` and `app_container_memory_usage_bytes` as gauges. `app_container_cpu_quota` is a gauge. `app_container_cpu_throttled_total` and `app_container_oom_kills_total` are counters. The same system information is available as JSON at `/health/metrics/json`, including the hostname or pod name that handled the request.

`ScheduleCheck` reads a heartbeat timestamp from the cache. In `routes/console.php`, the `health:heartbeat` command can run every minute. A heartbeat older than the default `max_age_minutes` value of 5 produces a critical result. A missing heartbeat produces a warning. Adding this check to readiness makes the endpoint return 503 after five minutes without a scheduler run.

Custom checks implement the HealthCheck contract with `name()` and `run()` methods that return `CheckResult`. Extending `BaseCheck` derives the name from the class, so `PaymentGatewayCheck` becomes `payment_gateway`. The example calls `https://payments.example.com/health` with a five-second HTTP timeout. A caught `\Throwable` produces a critical result with the exception message. A successful response produces an ok result. Other responses produce a critical result containing the HTTP status. `CheckResult` provides `ok()`, `warning()`, `critical()`, and `unknown()` constructors. Each accepts a metadata array as its third argument, and status and JSON responses include that metadata. The built-in `QueueCheck` uses it for `queue_size`.

Version 2.0.0 requires PHP 8.3 and Laravel 11, 12, or 13. Installation uses Composer and the `health-config` publish tag. `php artisan health:check` runs the liveness and readiness checks and exits with a non-zero status after a failure. The `--endpoint=readiness` option selects readiness explicitly. `HEALTH_PREFIX` changes the `/health` prefix, and each endpoint has configurable paths and enabled checks, which supports paths such as `/readyz`. The package source and full documentation are available on GitHub.